Non paramétrique pour ANOVA bidirectionnelle (3x3)

8

Ma variable dépendante est continue, non normale (asymétrique à gauche selon le test de Shapiro-Wilk). J'ai deux variables indépendantes (groupe de traitement par couleur, type d'aliment). Il y a 3 niveaux dans chaque variable indépendante. Le nombre d'observations pour chaque variable indépendante n'est pas égal.

J'ai recherché des tests non paramétriques tels que le test de Friedman et le test de Scheirer-Ray-Hare, qui ne semblent pas adaptés (en raison du nombre inégal d'observations).

Existe-t-il des tests alternatifs que quelqu'un pourrait suggérer? J'utilise SAS.

mbee
la source

Réponses:

8

À quelle question essayez-vous de répondre?

Si vous voulez un test global de tout ce qui se passe, le nul est que les effets principaux et l'interaction sont tous à 0, alors vous pouvez remplacer tous les points de données avec leurs rangs et faire juste une ANOVA régulière pour comparer avec une moyenne d'interception / grande seul modèle. C'est essentiellement le nombre de tests non paramétriques qui fonctionnent.L'utilisation des rangs transforme les données en une distribution uniforme (sous la valeur nulle) et vous obtenez une bonne approximation en la traitant comme normale (le théorème de la limite centrale s'applique à l'uniforme pour l'échantillon). tailles supérieures à environ 5 ou 6).

Pour d'autres questions, vous pouvez utiliser des tests de permutation. Si vous souhaitez tester l'un des effets principaux et l'interaction ensemble (mais permettre à l'autre effet principal d'être différent de zéro), vous pouvez permuter le prédicteur testé. Si vous souhaitez tester l'interaction tout en permettant aux deux effets principaux d'être différents de zéro, vous pouvez ajuster le modèle réduit des effets principaux uniquement et calculer les valeurs ajustées et les résidus, puis permuter au hasard les résidus et ajouter les résidus permutés à la ajusté les valeurs et adapter le modèle anova complet, y compris l'interaction. Répétez cela plusieurs fois pour obtenir la distribution nulle de la taille de l'effet d'interaction à comparer avec la taille de l'effet d'interaction à partir des données d'origine.

Il peut y avoir du code SAS existant pour faire des choses comme ça, j'ai vu des tutoriels de base sur l'utilisation de SAS pour les tests d'amorçage et de permutation (le moyen le plus rapide semble utiliser l'étape de données pour créer tous les jeux de données dans une grande table, puis en utilisant par traitement pour faire les analyses). Personnellement, j'utilise R pour ce type de chose, je ne peux donc pas être plus utile pour utiliser SAS.


Éditer

Voici un exemple utilisant le code R:

> fit1 <- aov(breaks ~ wool*tension, data=warpbreaks)
> summary(fit1)
             Df Sum Sq Mean Sq F value   Pr(>F)    
wool          1    451   450.7   3.765 0.058213 .  
tension       2   2034  1017.1   8.498 0.000693 ***
wool:tension  2   1003   501.4   4.189 0.021044 *  
Residuals    48   5745   119.7                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
> 
> fit2 <- aov(breaks ~ wool + tension, data=warpbreaks)
> 
> tmpfun <- function() {
+   new.df <- data.frame(breaks = fitted(fit2) + sample(resid(fit2)),
+                        wool = warpbreaks$wool,
+                        tension = warpbreaks$tension)
+   fitnew <- aov(breaks ~ wool*tension, data=new.df)
+   fitnew2 <- update(fitnew, .~ wool + tension)
+   c(coef(fitnew), F=anova(fitnew2,fitnew)[2,5])
+ }
> 
> out <- replicate(10000, tmpfun())
> 
> # based on only the interaction coefficients
> mean(out[5,] >= coef(fit1)[5])
[1] 0.002
> mean(out[6,] >= coef(fit1)[6])
[1] 0.0796
> 
> # based on F statistic from full-reduced model
> mean(out[7,] >= anova(fit2,fit1)[2,5])
[1] 0.022
Greg Snow
la source
1
+1. Le vernis médian de Tukey fonctionne bien pour adapter le modèle lorsque c'est tout ce dont vous avez besoin. Il serait intéressant (mais peut-être un peu intensif en calcul) de coupler cela à un test de permutation.
whuber
Merci pour les réponses. Il s'agit plus d'une étude exploratoire - juste pour examiner s'il y a des différences dans la variable dépendante en fonction des deux variables indépendantes.
mbee
@GregSnow, quel package utilisez-vous dans R pour cela? J'utilise la ezPermfonction de ezcar cela me permet de le faire dv ~ iv1 * iv2 | subj. Cela me donne une valeur de p, mais l'auteur déconseille son interprétation (je sais que vous expliquez comment effectuer manuellement cela, mais, bien que ma formation en programmation soit solide, ma connaissance des termes de statistiques commence tout juste à s'améliorer)
toto_tico
1
@toto_tico, je n'utilise aucun module complémentaire. Les tests de permutation sont assez faciles à faire avec du code R ordinaire. J'ai inclus un exemple ci-dessus en utilisant un ensemble de données intégré.
Greg Snow
@GregSnow, pourquoi échantillonnez-vous sur l'échantillon de résidus (resid (fit2))? Je pensais que l'échantillonnage était effectué dans le dv (warpbreaks $ breakl). Mon intuition me dit que ce que j'ai lu sur les tests de permutation était pour un facteur, et les choses se compliquent pour plusieurs facteurs.
toto_tico
3

+1 à @Greg Snow. Conformément à sa stratégie de rangs d'utilisation non paramétrique, vous pouvez utiliser la régression logistique ordinale . Cela vous permettra d'adapter un modèle avec plusieurs facteurs et interactions entre eux. La documentation SAS pertinente est ici . Il y a un tutoriel sur la façon de le faire dans SAS sur l'excellent site Web d'aide aux statistiques de l'UCLA ici , et un autre tutoriel de l'Université d'Indiana ici .

gung - Réintégrer Monica
la source
Mais cette approche ne répond-elle pas à une question différente? Dans le cadre de l'ANOVA, la variable continue est le résultat, et nous testons les sommes des carrés à l'intérieur / entre les facteurs. Dans une régression logistique ordinale, vous essayez de prédire l'appartenance à un facteur en fonction des valeurs de cette variable continue. Bien qu'il y ait certainement des situations où celles-ci vous donneront une inférence similaire, il n'est pas clair pour moi qu'il s'agit de procédures équivalentes en GÉNÉRAL. De la même manière que la régression de Y = BX ne sera pas toujours la même que X = BY.
Ryan Simmons
Essentiellement, je pense que les questions "Ces groupes sont-ils différents selon X?" et "Comment X peut-il être utilisé pour classer des individus parmi ces groupes?" ne sera le même que dans des circonstances très spécifiques, et que vous ne pouvez pas nécessairement substituer l'ANOVA à la régression logistique et obtenir des résultats comparables.
Ryan Simmons
@RyanSimmons, vous n'avez pas nécessairement besoin de classer quoi que ce soit. Le test du modèle OLR est un test si certains groupes sont associés à des valeurs Y généralement plus élevées que d'autres groupes. Vous utilisez simplement la composante ordinale des valeurs Y. Des tests comme Kruskal-Wallis, Mann-Whitney, etc. sont des cas particuliers d'OLR.
gung - Rétablir Monica
@gung, qu'en est-il de la partie design du problème? Est-ce possible avec une régression logistique ordinale?
toto_tico
1
@toto_tico, je viens de vous répondre sur l'autre fil. Vous devez utiliser clmm()dans le package ordinal.
gung - Rétablir Monica