Warum gibt Rs lm () andere Koeffizientenschätzungen zurück als mein Lehrbuch?

13

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:σ2S2lm()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!

post hoc
quelle
2
Überprüfen Sie noch einmal mod.m=8/3. Denn wenn Sie einstellen mod.m=2.5714, dann scheinen sie identisch zu sein.
Stat
2
Die Koeffizienten mod.m = 8/3 und mod.b = -1 werden meines Wissens nirgends in den Kommentaren berechnet, daher ist dies nicht offensichtlich. Wie @Stat oben bemerkt, scheint der Fehler in der Berechnung von mod.m zu liegen.
Juho Kokkala
2
Es ist wichtig zu bedenken, dass jeder Fehler machen kann - Ihr Lehrer, Sie, die Antwortenden hier, die R-Programmierer - jeder. Wenn Sie also herausfinden möchten, wo Fehler liegen können, wenn die Dinge nicht übereinstimmen, sollten Sie berücksichtigen, wie viele andere Personen die einzelnen Dinge überprüfen. Bei der lmFunktion 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).
Glen_b
1
@ Glen_b Dein Punkt ist eigentlich der Grund, warum ich hierher gekommen bin, um zu fragen. Ich konnte nicht verstehen, wie R bei einer solchen Grundberechnung falsch liegen könnte, aber ich konnte nicht herausfinden, warum sie unterschiedlich waren. Ich habe den Quellcode aufgeschnüffelt. Aber am Ende war der Fehler der letzte Punkt, an dem ich nachgesehen habe, hauptsächlich, weil der Kalkülteil an den Grenzen meines Wissens liegt. Ich habe viel aus der Antwort gelernt!
Post-hoc
2
Ja, es ist wichtig herauszufinden, warum sie sich unterscheiden. Es ist sinnvoll, hier zu fragen, ob Sie es nicht herausfinden können. Ich habe versucht vorzuschlagen, warum der letzte Ort, den Sie in Betracht gezogen haben, einer der ersten Orte war, an denen Sie nachsehen sollten. Ich war überrascht, als ich in letzter Minute ein oder zwei Mal selbst Änderungen an Beispielen vorgenommen habe, um diese zu vereinfachen.
Glen_b

Antworten:

25

Es sieht so aus, als hätte der Autor irgendwo einen mathematischen Fehler gemacht.

Wenn Sie die Abweichung der Quadratsumme vergrößern

S=((b+m)-1)2+((b+2m)-5)2+((b+4m)-9)2
S=b2+2bm+m2+12b2m+b2+4bm+4m2+2510b20m+b2+8bm+16m2+8118b72m

3b2+14bm+21m2+10730b94m
was bis auf den konstanten Ausdruck, der sowieso keine Rolle spielt, dem Ausdruck des Autors entspricht.

Sbm

dS/db=6b+14m-303b+7m-15=0
dS/dm=14b+42m-947b+21m-47=0

Lösen

b=(157m)/30=7(157m)/3+21m474735=(49/3+21)mm=(4735)/(2149/3)=18/7

R sagt, das ist in der Tat 2.571429 ...

Basierend auf diesem Link scheint es sich um einen Coursera-Kurs zu handeln ...? Vielleicht gab es irgendwo eine falsche Transkription der Daten?

(yy¯)(xx¯)(xx¯)2

g <- c(1,2,4)
g0 <- g - mean(g)
s <- c(1,5,9)
s0 <- s- mean(s)
sum(g0*s0)/(sum(g0^2))
## [1] 2.571429

{1,11/3,9}{1,5,9}

Ben Bolker
quelle
2
Beeindruckend. Ja, du hast recht. Es stammt aus einem Coursera-Kurs und ist aus dem Video, nicht aus der Transkription. Ich nehme an, er hat es vereinfacht, um die Berechnungen für das Video zu vereinfachen, und nicht erwartet, dass jemand versucht, es zu wiederholen. Es war einfach das erste Video, das ich gesehen habe, also habe ich versucht, mitzumachen. Es ist klar, dass ich mich in Mathe verbessern muss. Ich denke fand den Fehler aber. Der konstante Term, von dem Sie sagen, dass er keine Rolle spielt, ist wahrscheinlich der richtige Wert, der sich aus seinen Berechnungen ergibt. Ich werde Ihre Antwort noch ein paar Mal durchsehen, um mich selbst zu unterrichten. Ich weiß das wirklich zu schätzen!
post-hoc
Ich glaube nicht, dass der konstante Term die Berechnungen zunichte macht. Es hat keinen Einfluss auf die Schätzungen der Steigung und des Achsenabschnitts (es verschwindet, wenn wir die Ableitung nehmen), nur auf die Schätzungen der verbleibenden SSQ / Standardabweichung.
Ben Bolker