Nach einem Jahr in der Graduiertenschule verstehe ich die "gewichteten kleinsten Quadrate" wie folgt: Sei , eine Entwurfsmatrix, \ boldsymbol \ beta \ in \ mathbb {R} ^ p ist ein Parametervektor, \ boldsymbol \ epsilon \ in \ mathbb {R} ^ n ist ein Fehlervektor, so dass \ boldsymbol \ epsilon \ sim \ mathcal {N} (\ mathbf {0}, \ sigma ^ 2 \ mathbf {V}) , wobei \ mathbf {V} = \ text {diag} (v_1, v_2, \ dots, v_n) und \ sigma ^ 2> 0 . Dann das Modell \ mathbf {y} = \ mathbf {X} \ boldsymbol \ beta + \ boldsymbol \ epsilon
Was mich besonders interessiert, ist, wie R
Gewichte in der lm()
Funktion behandelt werden, wenn Gewichte Ganzzahlen zugewiesen werden. Von der Verwendung ?lm
:
Nichtgewichte
NULL
können verwendet werden, um anzuzeigen, dass unterschiedliche Beobachtungen unterschiedliche Abweichungen aufweisen (wobei die Werte in Gewichten umgekehrt proportional zu den Abweichungen sind); oder äquivalent, wenn die Elemente von Gewichten positive ganze Zahlen sind, ist jede Antwort der Mittelwert von Einheitsgewichtsbeobachtungen (einschließlich des Falls, dass es Beobachtungen gibt, die gleich und die Daten zusammengefasst wurden).
Ich habe diesen Absatz mehrmals gelesen und es macht für mich keinen Sinn. Angenommen, ich habe unter Verwendung des oben entwickelten Frameworks die folgenden simulierten Werte:
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
Wie werden diese Parameter unter Verwendung des oben entwickelten Frameworks abgeleitet? Hier ist mein Versuch, dies von Hand zu tun: Unter der Annahme von haben wir und dies in ergibt (beachten Sie, dass die Invertierbarkeit in diesem Fall nicht funktioniert, daher habe ich eine verallgemeinerte Umkehrung verwendet):
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
Diese stimmen nicht mit den Werten aus der lm()
Ausgabe überein . Was mache ich falsch?