Hintergrund
Ich versuche, das erste Beispiel in einem Kurs zum Anpassen von Modellen zu verstehen (das mag lächerlich einfach erscheinen). Ich habe die Berechnungen von Hand durchgeführt und sie stimmen mit dem Beispiel überein, aber wenn ich sie in R wiederhole, sind die Modellkoeffizienten deaktiviert. Ich dachte, der Unterschied könnte auf das Lehrbuch mit der Populationsvarianz ( ) zurückzuführen sein, während R möglicherweise die Stichprobenvarianz ( ) verwendet, aber ich kann nicht sehen, wo diese in den Berechnungen verwendet werden. Wenn Sie es beispielsweise
irgendwo verwenden, lesen Sie den Hilfeabschnitt zu den folgenden Hinweisen:lm()
var()
var()
Der Nenner n - 1 wird verwendet, der einen unverzerrten Schätzer der (Co) Varianz für iid-Beobachtungen liefert.
Ich habe für beide auf den Code angesehen lm()
und lm.fit()
und weder nutzen var()
, sondern lm.fit()
übergibt diese Daten an kompilierte C - Code ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)
) , die ich haben keinen Zugang zu.
Frage
Kann jemand erklären, warum R unterschiedliche Ergebnisse liefert? Warum unterscheiden sich die Koeffizientenschätzungen, selbst wenn es einen Unterschied zwischen Stichproben- und Populationsvarianz gibt?
Daten
Passen Sie eine Linie an, um die Schuhgröße ab der Schulstufe vorherzusagen.
# model data
mod.dat <- read.table(
text = 'grade shoe
1 1
2 5
4 9'
, header = T);
# mean
mod.mu <- mean(mod.dat$shoe);
# variability
mod.var <- sum((mod.dat$shoe - mod.mu)^2)
# model coefficients from textbook
mod.m <- 8/3;
mod.b <- -1;
# predicted values ( 1.666667 4.333333 9.666667 )
mod.man.pred <- mod.dat$grade * mod.m + mod.b;
# residuals ( -0.6666667 0.6666667 -0.6666667 )
mod.man.resid <- (mod.dat$shoe - mod.man.pred)
# residual variance ( 1.333333 )
mod.man.unexpl.var <- sum(mod.man.resid^2);
# r^2 ( 0.9583333 )
mod.man.expl.var <- 1 - mod.man.unexpl.var / mod.var;
# but lm() gives different results:
summary(lm(shoe ~ grade, data = mod.dat))
Call:
lm(formula = shoe ~ grade, data = mod.dat)
Residuals:
1 2 3
-0.5714 0.8571 -0.2857
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.0000 1.3093 -0.764 0.585
grade 2.5714 0.4949 5.196 0.121
Residual standard error: 1.069 on 1 degrees of freedom
Multiple R-squared: 0.9643, Adjusted R-squared: 0.9286
F-statistic: 27 on 1 and 1 DF, p-value: 0.121
Bearbeiten
Wie Ben Bolker gezeigt hat, scheinen Lehrer manchmal Fehler zu machen. Es scheint, dass R-Berechnungen korrekt sind. Moral der Geschichte: Glaube etwas nicht, nur weil ein Lehrer sagt, dass es wahr ist. Überzeugen Sie sich selbst!
lm
Funktion in R haben Zehntausende die Ergebnisse durch Vergleich mit anderen Dingen lm
überprüft , und die Ausgabe von wird bei jeder Änderung des Codes anhand bekannter Beispiele überprüft. Wenn Sie hier Antworten finden, werden diese wahrscheinlich von einigen wenigen Personen überprüft (Ihre Frage wurde bereits 29 Mal beantwortet).
mod.m=8/3
. Denn wenn Sie einstellenmod.m=2.5714
, dann scheinen sie identisch zu sein.