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!

Andrew
sumber

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.

mpiktas
sumber
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.

Henry
sumber
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