Ao lidar com dados com fatores R, pode ser usado para calcular as médias de cada grupo com a função lm (). Isso também fornece os erros padrão para as médias estimadas. Mas esse erro padrão difere do que recebo de um cálculo manualmente.
Aqui está um exemplo (retirado daqui Prevendo a diferença entre dois grupos em R )
Primeiro calcule a média com 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
A interceptação é a média para o primeiro grupo, os 4 carros com cilindros. Para obter os meios por cálculo direto, uso o seguinte:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
Para obter os erros padrão das médias, calculo a variação padrão da amostra e divido pelo número de observações em cada grupo:
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
O cálculo direto dá a mesma média, mas o erro padrão é diferente para as duas abordagens, eu esperava obter o mesmo erro padrão. O que está acontecendo aqui? Está relacionado ao lm () ajustar a média para cada grupo e um termo de erro?
Editado: Após a resposta de Svens (abaixo), posso formular minha pergunta de forma mais concisa e clara.
Para dados categóricos, podemos calcular a média de uma variável para diferentes grupos usando lm () sem interceptação.
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 isso com um cálculo direto das médias e seus erros padrão:
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
Os meios são exatamente os mesmos, mas os erros padrão são diferentes para esses 2 métodos (como Sven também observa). Minha pergunta é por que eles são diferentes e não são os mesmos?
(ao editar minha pergunta, devo excluir o texto original ou adicionar minha edição como fiz)
fonte
A
lm
função não estima médias e erros padrão dos níveis de fator, mas dos controles associados aos níveis de fator.Se nenhum contraste for especificado manualmente, os contrastes de tratamento serão usados em R. Esse é o padrão para dados categóricos.
O fator
mtcars$cyl
possui três níveis (4,6 e 8). Por padrão, o primeiro nível, 4, é usado como categoria de referência. A interceptação do modelo linear corresponde à média da variável dependente na categoria de referência. Mas os outros efeitos resultam da comparação de um nível de fator com a categoria de referência. Portanto, a estimativa e o erro padrão paracyl6
estão relacionados à diferença entrecyl == 6
ecyl == 4
. O efeitocyl8
está relacionado à diferença entrecyl == 8
ecyl == 4
.Se você deseja que a
lm
função calcule as médias dos níveis de fator, você deve excluir o termo de interceptação (0 + ...
):Como você pode ver, essas estimativas são idênticas às médias dos níveis dos fatores. Mas observe que os erros padrão das estimativas não são idênticos aos erros padrão dos dados.
A propósito: Os dados podem ser facilmente agregados com a
aggregate
função:fonte
Além do que Sven Hohenstein disse, os
mtcars
dados não são equilibrados . Normalmente, é usadoaov
para lm com dados categóricos (que são apenas um invólucrolm
) que diz especificamente sobre?aov
:Eu acho que você também pode ver isso nas correlações estranhas da matriz do modelo:
Portanto, os erros padrão obtidos de
aov
(oulm
) provavelmente serão falsos (você pode verificar isso se compararlme
ou comlmer
erros padrão.fonte
fonte