Làm thế nào để sử dụng trọng số trong hàm lm trong R?


21

Bất cứ ai cũng có thể cung cấp một số gợi ý về cách sử dụng weightsđối số trong lmhàm R ? Ví dụ, bạn đang cố gắng điều chỉnh mô hình về dữ liệu giao thông và bạn có hàng trăm hàng, mỗi hàng đại diện cho một thành phố (với dân số khác nhau). Nếu bạn muốn mô hình điều chỉnh ảnh hưởng tương đối của từng quan sát dựa trên quy mô dân số, bạn có thể chỉ định đơn giản weights=[the column containing the city's population]không? Đó có phải là loại vectơ có thể đi vào weights? Hoặc bạn sẽ cần phải sử dụng hoàn toàn một chức năng / gói / cách tiếp cận R khác nhau?

Tò mò muốn nghe cách mọi người giải quyết vấn đề này - không thấy nó được đề cập trong bất kỳ hướng dẫn mô hình tuyến tính nào tôi thấy ngoài kia. Cảm ơn!

Câu trả lời:


17

Tôi nghĩ rằng trang trợ giúp R lmtrả lời câu hỏi của bạn khá tốt. Yêu cầu duy nhất cho các trọng số là vectơ được cung cấp phải có cùng độ dài với dữ liệu. Bạn thậm chí chỉ có thể cung cấp tên của biến trong tập dữ liệu, R sẽ đảm nhiệm phần còn lại, quản lý NA, v.v. Bạn cũng có thể sử dụng các công thức trong weightđối số. Dưới đây là ví dụ:

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))

Lưu ý rằng trọng số phải dương, nếu không R sẽ tạo ra lỗi.


nhưng các trọng số phải tổng hợp thành một? Tôi nhận được các kết quả khác nhau trong lmbản tóm tắt của mình nếu chúng được chia tỷ lệ so với không ...
Palace Chan

Không, các trọng số không cần phải tổng hợp thành một. Khác nhau trong là gì lmtóm tắt? Các hệ số hay sai số chuẩn?
mpiktas

Dư lượng và lỗi tiêu chuẩn của chúng khác nhau nhưng hệ số và lỗi của chúng thì không.
Cung điện Chan

3

Những gì bạn đề nghị nên làm việc. Xem nếu điều này có ý nghĩa:

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))

Dòng thứ hai tạo ra cùng một phần chặn và độ dốc như dòng thứ ba (khác với kết quả của dòng thứ nhất), bằng cách cho một quan sát tương đối gấp đôi trọng lượng của hai quan sát khác, tương tự như tác động của việc nhân đôi quan sát thứ ba.


Tôi đã thử điều đó nhưng thấy rằng summaryđầu ra khác nhau cho dòng thứ 2 và thứ 3, đặc biệt là giá trị p của hệ số, tôi tự hỏi điều này sẽ xảy ra nếu 2 câu lệnh đề cập đến cùng một tập dữ liệu. Tôi đã đăng câu hỏi về vấn đề này tại stackoverflow.com/questions/10268689/
weighted
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.