Comment exécuter l'ANOVA bidirectionnelle sur des données sans normalité ni égalité de variance dans R?

16

Je travaille actuellement sur ma thèse de master et je prévoyais de faire des statistiques avec SigmaPlot. Cependant, après avoir passé un peu de temps avec mes données, je suis arrivé à la conclusion que SigmaPlot n'était peut-être pas adapté à mon problème (je peux me tromper), alors j'ai commencé mes premières tentatives en R, ce qui ne m'a pas vraiment facilité la tâche.

Le plan était d'exécuter une simple ANOVA BIDIRECTIONNELLE sur mes données qui résulte de 3 protéines différentes et de 8 traitements différents sur celles-ci, donc mes deux facteurs sont les protéines et les traitements. J'ai testé la normalité en utilisant les deux

> shapiro.test(time)

et

> ks.test(time, "norm", mean=mean(time), sd=sqrt(var(time)))

Dans les deux cas (ce qui n'est peut-être pas surprenant), je me suis retrouvé avec une distribution non normale.

Ce qui m'a laissé avec les premières questions de quel test utiliser pour l'égalité des variances. Je suis venu avec

> chisq.test(time)

et le résultat a été que je n'ai pas non plus l'égalité de variance dans mes données.

J'ai essayé différentes transformations de données (log, centre, standardisation), qui n'ont pas toutes résolu mes problèmes avec les variances.

Maintenant, je ne sais plus comment conduire l'ANOVA pour tester quelles protéines et quels traitements diffèrent considérablement les uns des autres. J'ai trouvé quelque chose à propos d'un test Kruskal-Walis, mais seulement pour un facteur (?). J'ai aussi trouvé des choses sur le classement ou la randamisation, mais pas encore comment implémenter ces techniques dans R.

Quelqu'un a-t-il une suggestion à faire?

Edit: merci pour vos réponses, je suis un peu dépassé par la lecture (ça semble de plus en plus au lieu de moins), mais je vais bien sûr continuer.

Voici un exemple de mes données, comme suggéré (je suis désolé pour le format, je n'ai pas pu trouver une autre solution ou un autre endroit pour mettre un fichier. Je suis encore nouveau à tout cela.):

protein treatment   time  
A   con 2329.0  
A   HY  1072.0  
A   CL1 4435.0  
A   CL2 2971.0  
A   CL1-HY sim  823.5  
A   CL2-HY sim  491.5  
A   CL1+HY mix  2510.5  
A   CL2+HY mix  2484.5  
A   con 2454.0  
A   HY  1180.5  
A   CL1 3249.7  
A   CL2 2106.7  
A   CL1-HY sim  993.0  
A   CL2-HY sim  817.5  
A   CL1+HY mix  1981.0  
A   CL2+HY mix  2687.5  
B   con 1482.0  
B   HY  2084.7  
B   CL1 1498.0  
B   CL2 1258.5  
B   CL1-HY sim  1795.7  
B   CL2-HY sim  1804.5  
B   CL1+HY mix  1633.0  
B   CL2+HY mix  1416.3  
B   con 1339.0  
B   HY  2119.0  
B   CL1 1093.3  
B   CL2 1026.5  
B   CL1-HY sim  2315.5  
B   CL2-HY sim  2048.5  
B   CL1+HY mix  1465.0  
B   CL2+HY mix  2334.5  
C   con 1614.8  
C   HY  1525.5  
C   CL1 426.3  
C   CL2 1192.0  
C   CL1-HY sim  1546.0  
C   CL2-HY sim  874.5  
C   CL1+HY mix  1386.0  
C   CL2+HY mix  364.5  
C   con 1907.5  
C   HY  1152.5  
C   CL1 639.7  
C   CL2 1306.5  
C   CL1-HY sim  1515.0  
C   CL2-HY sim  1251.0  
C   CL1+HY mix  1350.5  
C   CL2+HY mix  1230.5
Sabine
la source
2
Il semblerait que vous soyez sur la bonne voie avec R, mais je pense que vos difficultés ne sont pas du tout liées à R. Peut-être que vous devez d'abord consulter un statisticien pour comprendre le problème, c'est seulement ensuite que vous vous y attaquerez pratiquement. Votre question actuelle est assez élaborée et peut dissuader les gens de se taper dessus. Pour la partie technique, voici quelques sites: ats.ucla.edu/stat/R/seminars/Repeated_Measures/... et personality-project.org/R/r.anova.html
Luštrik Roman
4
Une très bonne alternative aux tests de classement consiste à utiliser les ANOVA de permutation ( uvm.edu/~dhowell/StatPages/More_Stuff/Permutation%20Anova/… ). Avec cette approche, l'hétéroscédasticité n'a pas d'importance. La raison principale pour laquelle les gens utilisent les tests de classement est qu'ils sont beaucoup plus faciles à calculer. Cela n'a plus d'importance. Nous avons des ordinateurs R et efficaces ...
Mikko
1
Qu'est-ce que la réponse? Notez que nous ne nous soucions pas vraiment si la réponse est normalement une distribution - nous voulons vérifier si les résidus de l'analyse sont approximativement normaux avec des variances similaires. Mais s'il y a effectivement un effet de traitement, nous ne nous attendrions pas à ce que la réponse soit normalement distribuée de manière marginale.
Dason
1
Je noterai que je viens de saisir les données que vous avez publiées et d'exécuter l'anova bidirectionnelle et de faire un test de shapiro wilks sur les résidus, ce qui a donné une valeur de p de 0,5022, ce qui n'implique pas trop de souci.
Dason
1
La normalité @Sabine n'est souvent pas une grande préoccupation en ce qui concerne l'ANOVA, mais vos échantillons doivent provenir de la même population, ce qui signifie que l'égalité de variance est la plus importante, hypothèse après randomisation, bien sûr. Vous devriez faire quelque chose, si vos écarts ne sont pas à peu près égaux (essayez ?bartlett.test)
Mikko

Réponses:

12

Cela peut être plus un commentaire qu'une réponse, mais cela ne correspondra pas à un commentaire. Nous pouvons peut-être vous aider ici, mais cela peut prendre quelques itérations; nous avons besoin de plus d'informations.

D'abord, quelle est votre variable de réponse?

Deuxièmement, notez que la distribution marginale de votre réponse ne doit pas être normale, mais plutôt la distribution conditionnelle au modèle (c.-à-d. Les résidus) - il n'est pas clair que vous ayez examiné vos résidus. De plus, la normalité est l' hypothèse la moins importante d'un modèle linéaire (par exemple, une ANOVA); les résidus peuvent ne pas avoir besoin d'être parfaitement normaux. Les tests de normalité ne valent généralement pas la peine (voir ici pour une discussion sur le CV), les graphiques sont bien meilleurs. Je voudrais essayer un qq-plot de vos résidus. Dans Rcela se fait avec qqnorm(), ou essayez qqPlot()dans lecarpaquet. Il convient également de considérer la manière dont les résidus ne sont pas normaux: l'asymétrie est plus dommageable que l'excès de kurtosis, en particulier si les asymétries alternent les directions entre les groupes.

S'il y a vraiment un problème qui mérite d'être inquiété, une transformation est une bonne stratégie. Prendre le journal de vos données brutes est une option, mais pas la seule. Notez que le centrage et la standardisation ne sont pas vraiment des transformations dans ce sens. Vous voulez vous pencher sur la famille de transformations de puissance Box & Cox . Et rappelez-vous, le résultat ne doit pas être parfaitement normal, juste assez bon.

Ensuite, je ne suis pas d'accord avec votre utilisation du test du chi carré pour l'homogénéité de la variance, bien qu'il puisse être parfaitement correct. Je vous suggère d'utiliser le test de Levene (utiliser leveneTest()dans car). L'hétérogénéité est plus dommageable que la non-normalité, mais l'ANOVA est assez robuste si l'hétérogénéité est mineure. Une règle empirique standard est que la plus grande variance de groupe peut être jusqu'à quatre fois la plus petite sans poser de problèmes graves. Une bonne transformation devrait également tenir compte de l'hétérogénéité.

Si ces stratégies sont insuffisantes, j'explorerais probablement une régression robuste avant d'essayer une approche non paramétrique.

Si vous pouvez modifier votre question et en dire plus sur vos données, je pourrai peut-être la mettre à jour pour fournir des informations plus spécifiques.

gung - Réintégrer Monica
la source
Concernant mon deuxième point, j'ai récemment écrit une réponse ici qui pourrait aider à clarifier ce problème. Vous voudrez peut-être le lire.
gung - Rétablir Monica
8

( note: cette réponse a été publiée avant la migration et la fusion de la question depuis SO, donc des détails ont été ajoutés à la question qui ne sont pas abordés ici. Beaucoup sont abordés dans les commentaires et la réponse par @gung).

Il existe de nombreuses approches différentes, et cette question a été abordée ailleurs sur ce site. Voici une liste de quelques approches, avec des liens vers d'autres questions sur le site et quelques références:

  1. La transformation de puissance de Box-Cox peut normaliser les résidus qui sont sur une échelle non linéaire
  2. L'ANOVA sur les données classées est très facile mais a une puissance réduite et est difficile à interpréter. Voir Conover et Iman, (1981)
  3. Modèle logistique ordinal des cotes proportionnelles
  4. Tests de permutation ( Anderson et ter Braak 2003 ), implémentés et décrits par Anderson et comme adonisfonction dans le package R Vegan
  5. Bootstrapping
  6. Modélisation bayésienne hiérarchique ( Gelman 2005 )
David LeBauer
la source
+1, voici une belle liste de quelques options disponibles à explorer.
gung - Rétablir Monica
Vous trouverez ci-dessous les commentaires initialement échangés sur Stack Overflow, perdus d'une manière ou d'une autre lors de la migration. Voir meta.stats.stackexchange.com/q/1157/930 .
chl
Savez-vous s'il y a une mise en œuvre des idées d'Anderson et Braak? - Henrik 16 mai à 15h15
chl
@Henrik il y a une implémentation dans FORTRAN Anderson 2005 qui est disponible via la fonction R adonisdans le Veganpackage R / David 16 mai à 16:20
chl
Merci. adonissemble fonctionner même avec des dvs univariés Cependant, j'ai le sentiment qu'il utilise quelque chose comme des sommes de carrés de type 1 lorsque je reçois le message Terms added sequentially (first to last)chaque fois qu'il est exécuté. L'avez-vous utilisé ou pouvez-vous en dire quelque chose? - Henrik 16 mai à
17h03