Veuillez fournir le code R qui permet d'effectuer une ANOVA entre sujets avec -3, -1, 1, 3 contrastes. Je comprends qu'il y a un débat concernant le type de somme de carrés (SS) approprié pour une telle analyse. Cependant, comme le type par défaut de SS utilisé dans SAS et SPSS (Type III) est considéré comme la norme dans ma région. J'aimerais donc que les résultats de cette analyse correspondent parfaitement à ce qui est généré par ces programmes statistiques. Pour être acceptée, une réponse doit appeler directement aov (), mais d'autres réponses peuvent être votées (surtout si elles sont faciles à comprendre / à utiliser).
sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
Edit: Veuillez noter que le contraste que je demande n'est pas un simple contraste linéaire ou polynomial mais est un contraste dérivé d'une prédiction théorique, c'est-à-dire le type de contrastes discuté par Rosenthal et Rosnow.
la source
Réponses:
La somme des carrés de type III pour l'ANOVA est facilement disponible via la
Anova()
fonction du package de voiture .Le codage de contraste peut être effectué de plusieurs manières, en utilisant
C()
lacontr.*
famille (comme indiqué par @nico) ou directement lacontrasts()
fonction / l'argument. Ceci est détaillé au §6.2 (pp. 144-151) de Modern Applied Statistics with S (Springer, 2002, 4e éd.). Notez queaov()
c'est juste une fonction wrapper pour lalm()
fonction. C'est intéressant quand on veut contrôler le terme d'erreur du modèle (comme dans une conception intra-sujet), mais sinon ils donnent tous les deux les mêmes résultats (et quelle que soit la façon dont vous ajustez votre modèle, vous pouvez toujours générer ANOVA ou LM- comme des résumés avecsummary.aov
ousummary.lm
).Je n'ai pas SPSS pour comparer les deux sorties, mais quelque chose comme
vaut la peine d'essayer en première instance.
À propos du codage factoriel dans R par rapport à SAS: R considère le niveau de référence ou de référence comme le premier niveau dans l'ordre lexicographique, tandis que SAS considère le dernier. Donc, pour obtenir des résultats comparables, vous devez utiliser
contr.SAS()
ou utiliserrelevel()
votre facteur R.la source
Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")
devrait être mieux. Veuillez me faire savoir si cela vous convient.Cela peut ressembler à un peu d'auto-promotion (et je suppose que oui). Mais j'ai développé un package lsmeans pour R (disponible sur CRAN) qui est conçu pour gérer exactement ce genre de situation. Voici comment cela fonctionne pour votre exemple:
Vous pouvez spécifier des contrastes supplémentaires dans la liste si vous le souhaitez. Pour cet exemple, vous obtiendrez les mêmes résultats avec le contraste polynomial linéaire intégré:
Pour confirmer cela, notez que la
"poly"
spécification lui ordonne d'appelerpoly.lsmc
, ce qui produit ces résultats:Si vous souhaitez effectuer un test conjoint de plusieurs contrastes, utilisez la
test
fonction avecjoint = TRUE
. Par exemple,Cela produira un essai de "type III". Contrairement à
car::Anova()
cela, il le fera correctement quel que soit le codage de contraste utilisé dans l'étape d'ajustement du modèle. En effet, les fonctions linéaires testées sont spécifiées directement plutôt qu'implicitement via la réduction de modèle. Une caractéristique supplémentaire est qu'un cas où les contrastes testés sont linéairement dépendants est détecté et que les statistiques de test et les degrés de liberté corrects sont produits.la source
Vous voudrez peut-être consulter ce billet de blog:
L'obtention des mêmes résultats ANOVA en R qu'en SPSS - les difficultés avec les sommes de carrés de type II et de type III
( Spoiler: ajoutez
options(contrasts=c("contr.sum", "contr.poly"))
au début de votre script)la source
Lorsque vous effectuez des contrastes, vous effectuez une combinaison linéaire spécifique et indiquée de moyennes de cellules dans le contexte du terme d'erreur approprié. En tant que tel, le concept de "Type de SS" n'a pas de sens avec les contrastes. Chaque contraste est essentiellement le premier effet utilisant un SS de type I. Le «type de SS» a à voir avec ce qui est séparé ou pris en compte par les autres termes. Pour les contrastes, rien n'est parti ni pris en compte. Le contraste tient tout seul.
la source
Le fait que les tests de type III soient utilisés sur votre lieu de travail est la raison la plus faible pour continuer à les utiliser. SAS a gravement endommagé les statistiques à cet égard. L'exégèse de Bill Venables, mentionnée ci-dessus, est une excellente ressource à ce sujet. Dites simplement non au type III; il est basé sur une notion erronée d'équilibre et a une puissance inférieure en raison de la pondération stupide des cellules dans le cas déséquilibré.
Un moyen plus naturel et moins sujet aux erreurs d'obtenir des contrastes généraux et de pouvoir décrire ce que vous avez fait est fourni par la fonction de
rms
package R.contrast.rms
Les contrastes peuvent être très complexes, mais pour l'utilisateur, ils sont très simples car ils sont exprimés en termes de différences de valeurs prédictives. Les tests et les contrastes simultanés sont pris en charge. Cela gère les effets de régression non linéaire, les effets d'interaction non linéaire, les contrastes partiels, toutes sortes de choses.la source
Essayez la commande Anova dans la bibliothèque de voitures. Utilisez l'argument type = "III", car il est par défaut de type II. Par exemple:
la source
Aussi auto-promotionnel, j'ai écrit une fonction pour exactement cela: https://github.com/samuelfranssens/type3anova
Installez comme suit:
Vous devrez également
car
installer le package.la source