Lorsqu'il s'agit de données avec des facteurs, R peut être utilisé pour calculer les moyennes pour chaque groupe avec la fonction lm (). Cela donne également les erreurs types pour les moyennes estimées. Mais cette erreur standard diffère de ce que j'obtiens d'un calcul à la main.
Voici un exemple (tiré d'ici Prédire la différence entre deux groupes dans R )
Calculez d'abord la moyenne avec 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
L'ordonnée à l'origine est la moyenne du premier groupe, les voitures à 4 cylindres. Pour obtenir les moyens par calcul direct, j'utilise ceci:
with(mtcars, tapply(mpg, cyl, mean))
4 6 8
26.66364 19.74286 15.10000
Pour obtenir les erreurs standard pour les moyennes, je calcule la variation standard de l'échantillon et je divise par le nombre d'observations dans chaque groupe:
with(mtcars, tapply(mpg, cyl, sd)/sqrt(summary(mtcars$cyl)) )
4 6 8
1.3597642 0.5493967 0.6842016
Le calcul direct donne la même moyenne mais l'erreur standard est différente pour les 2 approches, je m'attendais à obtenir la même erreur standard. Qu'est-ce qui se passe ici? Il est lié à lm () ajustant la moyenne pour chaque groupe et un terme d'erreur?
Modifié: Après la réponse de Svens (ci-dessous), je peux formuler ma question de manière plus concise et plus claire.
Pour les données catégorielles, nous pouvons calculer la moyenne d'une variable pour différents groupes en utilisant lm () sans interception.
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
On peut comparer cela avec un calcul direct des moyennes et de leurs erreurs types:
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
Les moyennes sont exactement les mêmes mais les erreurs standard sont différentes pour ces 2 méthodes (comme Sven le remarque également). Ma question est pourquoi sont-ils différents et pas les mêmes?
(lors de la modification de ma question, dois-je supprimer le texte d'origine ou ajouter mon édition comme je l'ai fait)
la source
La
lm
fonction n'évalue pas les moyennes et les erreurs-types des niveaux de facteurs mais des contrats associés aux niveaux de facteurs.Si aucun contraste n'est spécifié manuellement, les contrastes de traitement sont utilisés dans R. Il s'agit de la valeur par défaut pour les données catégorielles.
Le facteur
mtcars$cyl
a trois niveaux (4,6 et 8). Par défaut, le premier niveau, 4, est utilisé comme catégorie de référence. L'ordonnée à l'origine du modèle linéaire correspond à la moyenne de la variable dépendante dans la catégorie de référence. Mais les autres effets résultent d'une comparaison d'un niveau de facteur avec la catégorie de référence. Par conséquent, l'estimation et l'erreur-type decyl6
sont liées à la différence entrecyl == 6
etcyl == 4
. L'effetcyl8
est lié à la différence entrecyl == 8
etcyl == 4
.Si vous voulez que la
lm
fonction calcule la moyenne des niveaux de facteur, vous devez exclure le terme d'interception (0 + ...
):Comme vous pouvez le voir, ces estimations sont identiques aux moyennes des niveaux des facteurs. Mais notez que les erreurs-types des estimations ne sont pas identiques aux erreurs-types des données.
Soit dit en passant: les données peuvent être agrégées facilement avec la
aggregate
fonction:la source
En plus de ce que Sven Hohenstein a dit, les
mtcars
données ne sont pas équilibrées . Habituellement, on utiliseaov
pour lm avec des données catégorielles (qui sont juste un wrapper pourlm
) qui dit spécifiquement sur?aov
:Je pense que vous pouvez également le voir sur les corrélations étranges de la matrice du modèle:
Par conséquent, les erreurs standard obtenues à partir de
aov
(oulm
) seront probablement fausses (vous pouvez le vérifier si vous comparez aveclme
ou aveclmer
des erreurs standard.la source
la source