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!
lm
funzione in R, letteralmente decine di migliaia di persone hanno verificato i risultati confrontandoli con altre cose, e l'output di lm
viene 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.