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.