R: Cálculo de la media y el error estándar de la media para factores con lm () versus cálculo directo editado

8

Cuando se trata de datos con factores, R puede usarse para calcular las medias para cada grupo con la función lm (). Esto también proporciona los errores estándar para las medias estimadas. Pero este error estándar difiere de lo que obtengo de un cálculo a mano.

Aquí hay un ejemplo (tomado de aquí Prediciendo la diferencia entre dos grupos en R )

Primero calcule la media con lm ():

    mtcars$cyl <- factor(mtcars$cyl)
    mylm <- lm(mpg ~ cyl, data = mtcars)
    summary(mylm)$coef

                Estimate Std. Error   t value     Pr(>|t|)
  (Intercept)  26.663636  0.9718008 27.437347 2.688358e-22
  cyl6         -6.920779  1.5583482 -4.441099 1.194696e-04
  cyl8        -11.563636  1.2986235 -8.904534 8.568209e-10

La intersección es la media para el primer grupo, los autos de 4 cilindros. Para obtener los medios por cálculo directo, uso esto:

  with(mtcars, tapply(mpg, cyl, mean))

         4        6        8 
    26.66364 19.74286 15.10000 

Para obtener los errores estándar para las medias, calculo la variación estándar de la muestra y la divido por el número de observaciones en cada grupo:

 with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )

         4         6         8 
   1.3597642 0.5493967 0.6842016 

El cálculo directo da la misma media pero el error estándar es diferente para los 2 enfoques, esperaba obtener el mismo error estándar. ¿Que esta pasando aqui? ¿Está relacionado con lm () ajustando la media para cada grupo y un término de error?

Editado: después de la respuesta de Svens (abajo) puedo formular mi pregunta de manera más concisa y clara.

Para datos categóricos, podemos calcular las medias de una variable para diferentes grupos usando lm () sin una intercepción.

  mtcars$cyl <- factor(mtcars$cyl)
  mylm <- lm(mpg ~ cyl, data = mtcars)
  summary(mylm)$coef

      Estimate Std. Error
  cyl4 26.66364  0.9718008
  cyl6 19.74286  1.2182168
  cyl8 15.10000  0.8614094

Podemos comparar esto con un cálculo directo de las medias y sus errores estándar:

  with(mtcars, tapply(mpg, cyl, mean))

         4        6        8 
    26.66364 19.74286 15.10000 

  with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )

         4         6         8 
   1.3597642 0.5493967 0.6842016 

Los medios son exactamente los mismos, pero los errores estándar son diferentes para estos 2 métodos (como también lo nota Sven). Mi pregunta es ¿por qué son diferentes y no son lo mismo?

(al editar mi pregunta, ¿debo eliminar el texto original o agregar mi edición como lo hice)

SRJ
fuente

Respuestas:

7

La diferencia en los errores estándar se debe a que en la regresión calculas una estimación combinada de la varianza, mientras que en el otro cálculo calculas estimaciones separadas de la varianza.

Glen_b -Reinstate a Monica
fuente
2
Gracias por aclarar esto. Acabo de encontrar una muy buena respuesta para una pregunta similar aquí, con un buen ejemplo trabajado: stats.stackexchange.com/questions/29479/…
SRJ
Sí, eso parece relevante. Bien descrito.
Glen_b -Reinstalar a Monica
5

La lmfunción no estima las medias y los errores estándar de los niveles de factores, sino de los contras asociados con los niveles de factores.

Si no se especifica ningún contraste manualmente, los contrastes de tratamiento se usan en R. Este es el valor predeterminado para los datos categóricos.

El factor mtcars$cyltiene tres niveles (4,6 y 8). Por defecto, el primer nivel, 4, se utiliza como categoría de referencia. La intersección del modelo lineal corresponde a la media de la variable dependiente en la categoría de referencia. Pero los otros efectos resultan de una comparación del nivel de un factor con la categoría de referencia. Por lo tanto, la estimación y el error estándar para cyl6están relacionados con la diferencia entre cyl == 6y cyl == 4. El efecto cyl8está relacionado con la diferencia entre cyl == 8y cyl == 4.

Si desea que la lmfunción calcule las medias de los niveles de factores, debe excluir el término de intercepción ( 0 + ...):

summary(lm(mpg ~ 0 + as.factor(cyl), mtcars))

Call:
lm(formula = mpg ~ 0 + as.factor(cyl), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2636 -1.8357  0.0286  1.3893  7.2364 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
as.factor(cyl)4  26.6636     0.9718   27.44  < 2e-16 ***
as.factor(cyl)6  19.7429     1.2182   16.21 4.49e-16 ***
as.factor(cyl)8  15.1000     0.8614   17.53  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 3.223 on 29 degrees of freedom
Multiple R-squared: 0.9785, Adjusted R-squared: 0.9763 
F-statistic: 440.9 on 3 and 29 DF,  p-value: < 2.2e-16 

Como puede ver, estas estimaciones son idénticas a las medias de los niveles de factores. Pero tenga en cuenta que los errores estándar de las estimaciones no son idénticos a los errores estándar de los datos.

Por cierto: los datos se pueden agregar fácilmente con la aggregatefunción:

aggregate(mpg ~ cyl, mtcars, function(x) c(M = mean(x), SE = sd(x)/sqrt(length(x))))

  cyl      mpg.M     mpg.SE
1   4 26.6636364  1.3597642
2   6 19.7428571  0.5493967
3   8 15.1000000  0.6842016
Sven Hohenstein
fuente
Gracias por la respuesta. Ya sé que los coeficientes no son las medias, como escribí la intersección es la media del primer nivel, los otros coeficientes son la diferencia en la media de los otros niveles a ese nivel. También observa que con su comentario "los errores estándar de las estimaciones no son idénticos a los errores estándar de los datos". ¿Eso significa que lm () estima las medias y calcula los errores estándar para esas estimaciones
SRJ
Vaya, quería editar ese comentario para mayor claridad, pero no sabía que solo podía editar durante 5 minutos, ¿puedo eliminar un comentario? No me di cuenta de que podía obtener estimaciones medias directamente omitiendo la intercepción, gracias por ese consejo. Si lo entiendo correctamente, los errores estándar de las medias estimadas no son los mismos que los errores estándar calculados directamente a partir de los datos. ¿Es un conjunto diferente de ecuaciones usadas en cada caso? ¿Y cuáles son estas ecuaciones? Me gustaría tener más detalles para entender mejor la diferencia
SRJ
1

Además de lo que dijo Sven Hohenstein, los mtcarsdatos no están equilibrados . Por lo general, se usa aovpara lm con datos categóricos (que es solo un contenedor lm) que dice específicamente sobre ?aov:

aov está diseñado para diseños equilibrados, y los resultados pueden ser difíciles de interpretar sin equilibrio: tenga en cuenta que los valores faltantes en las respuestas probablemente perderán el equilibrio.

Creo que también puedes ver esto en las extrañas correlaciones de la matriz del modelo:

mf <- model.matrix(mpg ~ cyl, data = mtcars)
cor(mf)
            (Intercept)       cyl6       cyl8
(Intercept)           1         NA         NA
cyl6                 NA  1.0000000 -0.4666667
cyl8                 NA -0.4666667  1.0000000
Warning message:
In cor(mf) : the standard deviation is zero

Por lo tanto, los errores estándar obtenidos a partir de aov(o lm) probablemente será falso (se puede comprobar esto si se compara con el lmeo lmerlos errores estándar.

Henrik
fuente
¿Cómo aplicarías lme aquí?
SRJ
Las correlaciones de los valores de la matriz del modelo no son raras. Dado que la constante (intercepción) es inherentemente igual a uno, no hay variación entre sus valores. Debido a esto, no puede calcular un coeficiente de correlación entre una variable y la constante.
Sven Hohenstein
-1
Y = matrix(0,5,6)
Y[1,] = c(1250, 980, 1800, 2040, 1000, 1180)
Y[2,] = c(1700, 3080,1700,2820,5760,3480)
Y[3,] = c(2050,3560,2800,1600,4200,2650)
Y[4,] = c(4690,4370,4800,9070,3770,5250)
Y[5,] = c(7150,3480,5010,4810,8740,7260)

n = ncol(Y)
R = rowMeans(Y)
M = mean(R)

s = mean(apply(Y,1,var))

v = var(R)  -s/n


#z = n/(n+(E(s2)/var(m)))
Q = 6/(6+(s/v))
t = Q*R[1] + (1-Z)*M
usuario257426
fuente
Esto es ilegible y no tiene ningún tipo de comentario sobre lo que significa o hace. ¿Puedes editarlo para dar más claridad?
mdewey
No es posible entender la respuesta. Requiere algún comentario para explicar lo que está haciendo.
Michael R. Chernick