Perché R's lm () restituisce stime di coefficienti diverse rispetto al mio libro di testo?


13

sfondo

Sto cercando di capire il primo esempio in un corso sui modelli di adattamento (quindi questo può sembrare ridicolmente semplice). Ho fatto i calcoli a mano e corrispondono all'esempio, ma quando li ripeto in R, i coefficienti del modello sono disattivati. Ho pensato che la differenza potrebbe essere dovuta al libro di testo che utilizza la varianza della popolazione ( σ2 ) mentre R potrebbe usare la varianza del campione ( S2 ), ma non riesco a vedere dove vengano utilizzati nei calcoli. Ad esempio, se lm()utilizza var()da qualche parte, la sezione della guida sulle var()note:

Viene usato il denominatore n - 1 che fornisce uno stimatore imparziale della (co) varianza per le osservazioni iid.

Ho esaminato il codice per entrambi lm()e lm.fit()e nessuno dei due ne fa uso var(), ma lm.fit()passa quei dati al codice C compilato ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)) a cui non ho accesso.

Domanda

Qualcuno può spiegare perché R sta dando risultati diversi? Anche se esiste una differenza nell'uso della varianza tra campione e popolazione, perché le stime dei coefficienti differiscono?

Dati

Adatta una linea per prevedere il numero di scarpe dalla classe a scuola.

# 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

modificare

Come ha dimostrato Ben Bolker , a volte sembra che gli insegnanti commettano errori. Sembra che i calcoli R siano corretti. Morale della storia: non credere a qualcosa solo perché un insegnante dice che è vero. Verifica tu stesso!


2
Doppio controllo mod.m=8/3. Perché se si imposta mod.m=2.5714, allora sembrano identici.
Stat,

2
I coefficienti mod.m = 8/3 e mod.b = -1 non vengono calcolati da nessuna parte nei commenti, per quanto ho capito, quindi non è ovvio. Come commenta @Stat sopra, l'errore sembra essere nel modulo di elaborazione mod.m.
Juho Kokkala,

2
È importante tenere presente che chiunque può commettere errori - il tuo insegnante, tu, i rispondenti qui, i programmatori R - chiunque. Quindi, quando si cerca di capire dove possono trovarsi gli errori quando le cose non sono d'accordo, considerare quante altre persone stanno controllando ogni cosa. Nel caso della lmfunzione in R, letteralmente decine di migliaia di persone hanno verificato i risultati confrontandoli con altre cose, e l'output di lmviene verificato con esempi noti ogni volta che qualcosa cambia nel codice. Con le risposte qui, è probabile che almeno alcune persone controllino (la tua domanda è stata esaminata 29 volte).
Glen_b

1
@Glen_b Il tuo punto è in realtà il motivo per cui sono venuto qui per chiedere. Non riuscivo a capire come R potesse sbagliarsi su un simile calcolo di base, ma non riuscivo a capire perché fossero diversi. Evento di curiosare attorno al codice sorgente. Ma alla fine, l'errore era nell'ultimo posto che pensavo di guardare, soprattutto perché la parte del calcolo è ai limiti della mia conoscenza. Ho imparato molto dalla risposta però!
post-hoc,

2
Sì, è importante cercare di capire perché differiscono; ha senso chiedere qui se non riesci a risolverlo. Stavo cercando di suggerire perché l'ultimo posto che hai preso in considerazione potrebbe essere stato invece uno dei primi posti in cui cercare. Sono stato colto da modifiche "semplificate" dell'ultimo minuto agli esempi in una o due occasioni.
Glen_b

Risposte:


25

Sembra che l'autore abbia fatto un errore matematico da qualche parte.

Se si espande la deviazione della somma dei quadrati

S=((B+m)-1)2+((B+2m)-5)2+((B+4m)-9)2
S=B2+2Bm+m2+1-2B-2m+B2+4Bm+4m2+25-10B-20m+B2+8Bm+16m2+81-18B-72m

3B2+14Bm+21m2+107-30B-94m

SBm

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

Risolvere

B=(15-7m)/30=7(15-7m)/3+21m-4747-35=(-49/3+21)mm=(47-35)/(21-49/3)=18/7

R dice che questo è davvero 2.571429 ...

Sulla base di questo link sembra provenire da un corso di Coursera ...? Forse c'è stata una trascrizione errata dei dati da qualche parte?

Σ(y-y¯)(X-X¯)Σ(X-X¯)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}quindi la pendenza verrebbe fuori a 8/3 ...


2
Wow. Si hai ragione. Viene da un corso di Coursera ed è dal video, non dalla trascrizione. Quindi immagino che l'abbia semplificato per rendere i calcoli più semplici per il video e non si aspettava che nessuno provasse a ripeterlo. Mi è capitato di essere il primo video che ho visto, quindi ho cercato di seguirlo. È chiaro che ho bisogno di migliorare la mia competenza in matematica. Penso che abbia trovato l'errore però. Il termine costante, che dici non importa, è probabilmente il valore corretto che attraverso i suoi calcoli. Guarderò più volte la tua risposta per insegnare a me stesso. Lo apprezzo molto!
post-hoc,

Non credo che il termine costante eliminerà i calcoli. Non influenzerà le stime della pendenza e dell'intercettazione (scompare quando prendiamo la derivata), solo le stime della SSQ residua / deviazione standard.
Ben Bolker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.