2017-06-20 3 views
3

J'essaie d'effectuer une ANCOVA (mélange entre ANOVA et régression linéaire) entre différents modèles et je rencontre quelques problèmes. Je pense que je l'ai réduit à un problème (ou quelque chose que je ne comprends pas ou mal) à propos d'ANOVA: pour faire une comparaison entre deux modèles, ils doivent avoir un Df (degré de liberté) résiduel différent.Pourquoi la suppression d'une variable dans un Anova contenant des facteurs dans R ne réduit pas le degré de liberté?

À titre d'exemple, considérons les données de mtcars dans R:

library(car) 
test_data <- mtcars %>% mutate(factored_variable = as.factor(carb)) 

model_1 <- aov(drat ~ factored_variable , data = test_data) 
Anova(model_1, type = "III") 

    # Anova Table (Type III tests) 
    # 
    # Response: drat 
    # Sum Sq Df F value    Pr(>F)  
    # (Intercept)  94.870 1 313.3656 0.0000000000000005038 *** 
    # factored_variable 0.991 5 0.6546    0.6607  
    # Residuals   7.871 26         
    # --- 
    # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

model_2 <- aov(drat ~ factored_variable - 1, data = test_data) 
Anova(model_2, type = "III") 

    # Anova Table (Type III tests) 
    # 
    # Response: drat 
    # Sum Sq Df F value    Pr(>F)  
    # factored_variable 414.92 6 228.42 < 0.00000000000000022 *** 
    # Residuals   7.87 26         
    # --- 
    # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Alors, ce que je viens de faire est de créer deux modèles pour prédire la valeur de Zut. La première prend la variable avec facteur (Df = nombre de niveaux - 1 = 5) et une ordonnée à l'origine (Df = 1 toujours), donc 6 Df sont utilisés. J'ai supprimé l'interception dans le second modèle, donc j'ai juste la variable seule. Je m'attendrais alors à ce que seulement 5 Df soient utilisés par cette variable, mais ce n'est apparemment pas le cas comme le dit Anova. 6.

Ma question est donc la suivante: pourquoi ce dernier Df 6 et non 5? Je suppose que c'est lié au fait que la variable a des facteurs, mais je ne comprends pas pourquoi. Est-il impossible de comparer deux modèles impliquant ce type de variable?

edit: merci pour la réponse. Je pense que j'ai mal compris la théorie plutôt que R, c'est un peu plus clair maintenant

Répondre

2

Vos deux modèles sont essentiellement le même modèle, mais dans le second modèle, vous avez forcé l'interception à zéro. La suppression de l'ordonnée à l'origine ne modifie pas les degrés de liberté, car les 6 premiers niveaux du factored_variable sont estimés, au lieu de 6-1 = 5 niveaux de factored_variable plus l'interception. Pour voir que les modèles sont par ailleurs équivalents (et que chacun est équivalent à un modèle de régression), nous allons créer les modèles de régression linéaire équivalents, puis examiner les coefficients.

aov1 <- aov(drat ~ factored_variable , data = test_data) 
aov2 <- aov(drat ~ factored_variable - 1, data = test_data) 

lm1 = lm(drat ~ factored_variable , data = test_data) 
lm2 = lm(drat ~ factored_variable - 1 , data = test_data) 

Maintenant, regardez les coefficients pour les quatre modèles comme indiqué dans le code et la sortie ci-dessous. aov1 et lm1 estimer l'interception plus 5 coefficients pour factored_variable. Le coefficient pour la catégorie manquante factored_variable (la catégorie "référence") est l'interception. Les autres coefficients sont la différence entre cette catégorie et la catégorie de référence. aov2 et lm2 estimer un coefficient absolu pour chaque catégorie de factored_variable, plutôt qu'un coefficient qui est relatif à la catégorie de référence.

coefs = data.frame(aov1=coef(aov1), aov2=coef(aov2), lm1=coef(lm1), lm2=coef(lm2)) 
          aov1  aov2   lm1  lm2 
(Intercept)/factored_variable1  3.68142857 3.681429 3.68142857 3.681429 
factored_variable2     0.01757143 3.699000 0.01757143 3.699000 
factored_variable3    -0.61142857 3.070000 -0.61142857 3.070000 
factored_variable4    -0.08542857 3.596000 -0.08542857 3.596000 
factored_variable6    -0.06142857 3.620000 -0.06142857 3.620000 
factored_variable8    -0.14142857 3.540000 -0.14142857 3.540000 

Notez que les paires de modèle lm1/aov1 et lm2/aov2 ont chacun les mêmes coefficients. Pour les modèles aov1 et lm1, si vous ajoutez les coefficients pour chaque factored_variable à l'interception, vous verrez également que les coefficients sont les mêmes que les coefficients pour lm2 et aov2. Dans chaque cas, le modèle estime six paramètres.