Antecedentes
Estoy tratando de entender el primer ejemplo en un curso sobre modelos de adaptación (por lo que esto puede parecer ridículamente simple). He hecho los cálculos a mano y coinciden con el ejemplo, pero cuando los repito en R, los coeficientes del modelo están desactivados. Pensé que la diferencia puede deberse a que el libro de texto usa la varianza de la población ( ), mientras que R puede estar usando la varianza de la muestra ( S 2 ), pero no puedo ver dónde se usan en los cálculos. Por ejemplo, si se
usa en alguna parte, la sección de ayuda sobre notas:lm()
var()
var()
Se utiliza el denominador n - 1 que proporciona un estimador imparcial de la (co) varianza para las observaciones de iid.
He mirado el código para ambos lm()
y lm.fit()
como tampoco hacer uso devar()
, pero lm.fit()
pasa esos datos al código C compilado ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)
) al que no tengo acceso.
Pregunta
¿Alguien puede explicar por qué R está dando resultados diferentes? Incluso si hay una diferencia en el uso de la varianza muestra versus población, ¿por qué difieren las estimaciones de coeficientes?
Datos
Ajuste una línea para predecir el tamaño del zapato de grado en la escuela.
# 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
Editar
Como ha demostrado Ben Bolker , a veces parece que los maestros cometen errores. Parece que los cálculos de R son correctos. Moraleja de la historia: no creas algo solo porque un maestro dice que es verdad. ¡Compruébalo por ti mismo!
lm
función en R, literalmente decenas de miles de personas han verificado los resultados comparándolos con otras cosas, y la salida de lm
se compara con ejemplos conocidos cada vez que algo cambia en el código. Con las respuestas aquí, es probable que al menos algunas personas verifiquen (su pregunta se ha examinado 29 veces).
mod.m=8/3
. Porque si configurasmod.m=2.5714
, entonces parecen ser idénticos.