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 ( ) mentre R potrebbe usare la varianza del campione ( ), 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!
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).
mod.m=8/3. Perché se si impostamod.m=2.5714, allora sembrano identici.