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!
fuente
mod.m=8/3
. Porque si configurasmod.m=2.5714
, entonces parecen ser idénticos.lm
función en R, literalmente decenas de miles de personas han verificado los resultados comparándolos con otras cosas, y la salida delm
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).Respuestas:
Parece que el autor cometió un error matemático en alguna parte.
Si expande la desviación de la suma de cuadrados
Resolver
R says this is indeed 2.571429 ...
Based on this link this seems to be from a Coursera course ... ? Maybe there was a mis-transcription of the data somewhere?
The other, independent way to do this calculation is to know that the estimated regression slope is equal to the sum of cross products (∑(y−y¯)(x−x¯) ) divided by the sum of squares (∑(x−x¯)2 ).
If think if the shoe sizes were{1,11/3,9} instead of {1,5,9} then the slope would come out to 8/3 ...
fuente