После года, проведенного в аспирантуре, мое понимание «взвешенных наименьших квадратов» таково: пусть , будет некоторой матрицей проектирования, \ boldsymbol \ beta \ in \ mathbb {R} ^ p - вектор параметров, \ boldsymbol \ epsilon \ in \ mathbb {R} ^ n - вектор ошибок, такой что \ boldsymbol \ epsilon \ sim \ mathcal {N} (\ mathbf {0}, \ sigma ^ 2 \ mathbf {V}) , где \ mathbf {V} = \ text {diag} (v_1, v_2, \ dots, v_n) и \ sigma ^ 2> 0 . Тогда модель \ mathbf {y} = \ mathbf {X} \ boldsymbol \ beta + \ boldsymbol \ epsilon
Что меня особенно интересует, так это то, как R
обрабатываются веса в lm()
функции, когда весам назначаются целые числа. От использования ?lm
:
Невесовые значения
NULL
могут использоваться для указания того, что разные наблюдения имеют разные отклонения (при этом значения в весах обратно пропорциональны отклонениям); или эквивалентно, когда элементы весов являются положительными целыми числами , каждый ответ является средним значением наблюдений за единицу веса (включая случай, когда есть наблюдения равные и данные суммированы).
Я перечитал этот параграф несколько раз, и для меня это не имеет смысла. Используя структуру, которую я разработал выше, предположим, что у меня есть следующие смоделированные значения:
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
Используя структуру, которую я разработал выше, как эти параметры получены? Вот моя попытка сделать это вручную: предполагая, что , у нас есть и выполнение этого в дает (обратите внимание, что обратимость не работает в этом случае, поэтому я использовал обобщенное обратное):
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
Они не соответствуют значениям из lm()
вывода. Что я делаю неправильно?