Bagaimana cara menggunakan bobot dalam fungsi lm dalam R?


21

Adakah yang bisa menawarkan beberapa petunjuk tentang cara menggunakan weightsargumen dalam lmfungsi R ? Misalnya, Anda mencoba menyesuaikan model pada data lalu lintas, dan Anda memiliki beberapa ratus baris, yang masing-masing mewakili kota (dengan populasi yang berbeda). Jika Anda ingin model menyesuaikan pengaruh relatif dari setiap pengamatan berdasarkan ukuran populasi, dapatkah Anda menentukannya weights=[the column containing the city's population]? Apakah itu semacam vektor yang bisa masuk weights? Atau apakah Anda perlu menggunakan fungsi / paket / pendekatan R yang berbeda sama sekali?

Penasaran ingin mendengar bagaimana orang mengatasi yang satu ini - tidak melihatnya tercakup dalam salah satu tutorial pemodelan linier yang saya lihat di sana. Terima kasih!

Jawaban:


17

Saya pikir halaman bantuan R lmmenjawab pertanyaan Anda dengan cukup baik. Satu-satunya persyaratan untuk bobot adalah bahwa vektor yang disediakan harus sama panjangnya dengan data. Anda bahkan dapat menyediakan hanya nama variabel dalam kumpulan data, R akan menangani sisanya, manajemen NA, dll. Anda juga dapat menggunakan rumus dalam weightargumen. Berikut ini contohnya:

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector
summary(lm(y~x,data=df,weights=(df$wght1)^(3/4))) 

# Fancy weights as formula on column of the data set
summary(lm(y~x,data=df,weights=I(wght1^(3/4))))

# Mundane weights as the column of the data set
summary(lm(y~x,data=df,weights=wght1))

Perhatikan bahwa bobot harus positif, jika tidak R akan menghasilkan kesalahan.


tetapi apakah bobot harus dijumlahkan menjadi satu? Saya mendapatkan hasil yang berbeda dalam lmringkasan saya jika diskalakan vs tidak ...
— Palace Chan

Tidak, bobot tidak perlu dijumlahkan menjadi satu. Apa yang berbeda dalam lmringkasan? Koefisien atau kesalahan standar?
— mpiktas

Residual dan kesalahan standarnya berbeda tetapi koefisien dan kesalahannya tidak.
— Palace Chan

3

Apa yang Anda sarankan harus berhasil. Lihat apakah ini masuk akal:

lm(c(8000, 50000, 116000) ~ c(6, 7, 8))
lm(c(8000, 50000, 116000) ~ c(6, 7, 8), weight = c(123, 123, 246))
lm(c(8000, 50000, 116000, 116000) ~ c(6, 7, 8, 8))

Baris kedua menghasilkan intersep dan kemiringan yang sama dengan garis ketiga (berbeda dari hasil garis pertama), dengan memberikan satu pengamatan yang relatif dua kali berat masing-masing dari dua pengamatan lainnya, mirip dengan dampak duplikasi pengamatan ketiga.


Saya mencoba tetapi menemukan bahwa summaryoutput berbeda untuk garis ke-2 dan ke-3, terutama untuk nilai-p dari koefisien, saya ingin tahu ini akan terjadi jika 2 pernyataan merujuk pada dataset yang sama. Saya memposting pertanyaan tentang ini di stackoverflow.com/questions/10268689/weighted-regress-in-r
— lokheart
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.