Contexte
J'essaie de comprendre le premier exemple d'un cours sur l'ajustement de modèles (cela peut donc sembler ridiculement simple). J'ai fait les calculs à la main et ils correspondent à l'exemple, mais quand je les répète en R, les coefficients du modèle sont désactivés. Je pensais que la différence peut être due au manuel utilisant la variance de la population ( ) tandis que R peut utiliser la variance de l'échantillon ( ), mais je ne vois pas où ceux-ci sont utilisés dans les calculs. Par exemple, si vous l'
lm()
utilisez var()
quelque part, la section d'aide sur les var()
notes:
Le dénominateur n - 1 est utilisé, ce qui donne un estimateur non biaisé de la (co) variance pour les observations iid.
J'ai regardé le code pour les deux lm()
et je ne m'en lm.fit()
sers pas var()
, mais lm.fit()
passe ces données au code C compilé ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)
) auquel je n'ai pas accès.
Question
Quelqu'un peut-il expliquer pourquoi R donne des résultats différents? Même s'il existe une différence dans l'utilisation de la variance échantillon vs population, pourquoi les estimations des coefficients diffèrent-elles?
Les données
Ajustez une ligne pour prédire la taille des chaussures à partir du niveau scolaire.
# 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
Éditer
Comme l' a montré Ben Bolker , il semble que les enseignants font parfois des erreurs. Il semble que les calculs de R soient corrects. Morale de l'histoire: ne croyez pas quelque chose simplement parce qu'un enseignant dit que c'est vrai. Vérifiez par vous-même!
la source
mod.m=8/3
. Parce que si vous définissezmod.m=2.5714
, ils semblent être identiques.lm
fonction dans R, des dizaines de milliers de personnes ont littéralement vérifié les résultats en les comparant à d'autres choses, et la sortie delm
est vérifiée par rapport à des exemples connus chaque fois que quelque chose change dans le code. Avec les réponses ici, au moins quelques personnes sont susceptibles de vérifier (votre question a été consultée 29 fois).Réponses:
Il semble que l'auteur ait fait une erreur mathématique quelque part.
Si vous augmentez l'écart de somme des carrés
Résoudre
R dit que c'est bien 2,571429 ...
Sur la base de ce lien, cela semble provenir d'un cours Coursera ...? Peut-être qu'il y a eu une mauvaise transcription des données quelque part?
la source