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)
fuente
La
lm
funció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$cyl
tiene 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 paracyl6
están relacionados con la diferencia entrecyl == 6
ycyl == 4
. El efectocyl8
está relacionado con la diferencia entrecyl == 8
ycyl == 4
.Si desea que la
lm
función calcule las medias de los niveles de factores, debe excluir el término de intercepción (0 + ...
):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
aggregate
función:fuente
Además de lo que dijo Sven Hohenstein, los
mtcars
datos no están equilibrados . Por lo general, se usaaov
para lm con datos categóricos (que es solo un contenedorlm
) que dice específicamente sobre?aov
:Creo que también puedes ver esto en las extrañas correlaciones de la matriz del modelo:
Por lo tanto, los errores estándar obtenidos a partir de
aov
(olm
) probablemente será falso (se puede comprobar esto si se compara con ellme
olmer
los errores estándar.fuente
fuente