Sau một năm học ở trường, sự hiểu biết của tôi về "bình phương nhỏ nhất có trọng số" như sau: let , là một số ma trận thiết kế , \ boldsymbol \ beta \ in \ mathbb {R} ^ p là một vectơ tham số, \ boldsymbol \ epsilon \ in \ mathbb {R} ^ n là một vectơ lỗi sao cho \ boldsymbol \ epsilon \ sim \ mathcal {N} (\ mathbf {0}, \ sigma ^ 2 \ mathbf {V}) , trong đó \ mathbf {V} = \ text {diag} (v_1, v_2, \ dot, v_n) và \ sigma ^ 2> 0 . Sau đó, mô hình \ mathbf {y} = \ mathbf {X} \ boldsymbol \ beta + \ boldsymbol \ epsilon
Điều tôi đặc biệt tò mò là cách R
xử lý các trọng số trong lm()
hàm khi các trọng số được gán là số nguyên. Từ việc sử dụng ?lm
:
Không
NULL
trọng số có thể được sử dụng để chỉ ra rằng các quan sát khác nhau có phương sai khác nhau (với các giá trị về trọng số tỷ lệ nghịch với phương sai); hoặc tương đương, khi các yếu tố của trọng số là số nguyên dương , rằng mỗi phản hồi là giá trị trung bình của các quan sát trọng số đơn vị (bao gồm cả trường hợp có các quan sát bằng và dữ liệu đã được tóm tắt).
Tôi đã đọc lại đoạn này nhiều lần và nó không có ý nghĩa gì với tôi. Sử dụng khung mà tôi đã phát triển ở trên, giả sử tôi có các giá trị mô phỏng sau:
x <- c(0, 1, 2)
y <- c(0.25, 0.75, 0.85)
weights <- c(50, 85, 75)
lm(y~x, weights = weights)
Call:
lm(formula = y ~ x, weights = weights)
Coefficients:
(Intercept) x
0.3495 0.2834
Sử dụng khung mà tôi đã phát triển ở trên, các tham số này được dẫn xuất như thế nào? Đây là nỗ lực của tôi khi làm điều này bằng tay: giả sử , chúng tôi có và thực hiện điều này trong cung cấp (lưu ý rằng tính không đảo ngược không hoạt động trong trường hợp này, vì vậy tôi đã sử dụng một nghịch đảo tổng quát):
R
X <- matrix(rep(1, times = 6), byrow = T, nrow = 3, ncol = 2)
V_inv <- diag(c(1/50, 1/85, 1/75))
y <- c(0.25, 0.75, 0.85)
library(MASS)
ginv(t(X) %*% V_inv %*% X) %*% t(X) %*% V_inv %*% y
[,1]
[1,] 0.278913
[2,] 0.278913
Chúng không khớp với các giá trị từ lm()
đầu ra. Tôi đang làm gì sai?