13 votos

¿Por qué R lm() devuelven los diferentes coeficientes estimados de mi libro de texto?

De fondo

Estoy tratando de comprender el primer ejemplo en un curso de montaje de los modelos (por lo que esto puede parecer ridículamente simple). He hecho los cálculos a mano y que coincide con el ejemplo, pero cuando me las repita en R, el modelo de coeficientes están apagados. Pensé la diferencia puede ser debido a que el libro de texto utilizando la varianza de la población ( $\sigma^2$ ), mientras que R puede ser el uso de la varianza de muestra ($S^2$), pero yo no puede ver donde estas se utilizan en los cálculos. Por ejemplo, si lm() utiliza var() en algún lugar, en la sección de ayuda en var() notas:

El denominador n - 1 se utiliza lo que le da un estimador imparcial de la (co)varianza para el yo.yo.d. observaciones.

He mirado el código para lm() y lm.fit() y ni hacer uso de var(), pero lm.fit() pasa que los datos compilados de C código (z <- .Call(C_Cdqrls, x, y, tol, FALSE)) que no tengo el acceso a la.

Pregunta

¿Alguien puede explicar por qué R está dando resultados diferentes? Incluso si hay una diferencia en el uso de muestra frente a la varianza de la población, ¿por qué la los coeficientes estimados son diferentes?

Datos

Ajuste de 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 Ben Bolker ha demostrado, parece que los profesores hacen que los errores a veces. Parece que R cálculos son correctos. Moraleja de la historia: no creer en algo sólo porque el maestro dice es cierto. Comprobar por ti mismo!

26voto

Ben Bolker Puntos 8729

Parece que el autor hizo de un error matemático en algún lugar.

Si expande la suma de cuadrados de la desviación

$$ S = ((b+m)-1)^2+ (b+2m)-5)^2 + (b+4m)-9)^2 $$ usted obtener $$ \begin{split} S = & b^2+2 b m+ m^2 + 1 - 2 b - 2 m \\ + & b^2+4 b m+ 4 m^2 + 25 - 10 b -20 m \\ + & b^2+8 b m+16 m^2 + 81 - 18 b -72 m \end{split} $$

lo que se reduce a $$ 3 b^2 + 14 b m + 21 m^2 + 107 - 30 b - 94 m $$ que es la misma como la expresión del autor, excepto el término constante, que no importa de todos modos).

Ahora tenemos que intentar minimizar mediante la configuración de los derivados de la $S$ con respecto al $b$ $m$ a cero y resolver el sistema. $$ dS/db = 6 b + 14 m -30 \a 3 b +7 m-15 = 0 $$ $$ dS/dm = 14 b +42 m -94 \a 7 b + 21 m -47 = 0 $$

Solve

$$ \begin{split} b & = (15-7m)/3 \\ 0 & = 7 (15-7m)/3 + 21 m-47 \\ 47 - 35 & = (-49/3 + 21) m \\ m & = (47-35)/(21-49/3) = 18/7 \end{split} $$

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 ($\sum (y-\bar y) (x-\bar x)$) divided by the sum of squares ($\sum (x-\bar x)^2$).

g <- c(1,2,4)
g0 <- g - mean(g)
s <- c(1,5,9)
s0 <- s- mean(s)
sum(g0*s0)/(sum(g0^2))
## [1] 2.571429

If think if the shoe sizes were $\{1,11/3,9\}$ instead of $\{1,5,9\}$ a continuación, la pendiente sería salir a 8/3 ...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X