À 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
ezPerm
fonction deez
car cela me permet de le fairedv ~ 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)+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 .
la source
clmm()
dans le package ordinal.