Comment interpréter le Mann-Whitney U lors de l'utilisation de l'interface de formule de R

9

Disons que nous avons les données suivantes:

set.seed(123)
data <- data.frame(x = c(rnorm(50, 1, 1), rnorm(50, 5, 2)),
                   y = c(rep('A', 50),    rep('B', 50)))

Ce qui donne le boxplot suivant ( boxplot(data$x ~ data$y)):

boxplot

Supposons maintenant que je souhaite tester si les deux échantillons ont les mêmes paramètres de localisation (médiane et / ou moyenne). Dans mon cas réel, les données ne sont clairement pas normales , j'ai donc décidé d'exécuter le test de Wilcoxon-Mann-Whitney, comme ceci:

wilcox.test(data$x ~ data$y)

Cependant, je voudrais que l'hypothèse alternative soit que data$yle "deuxième" facteur de B , provient d'une distribution avec des paramètres de position plus élevés. J'ai essayé de régler le alternativeparamètre sur "supérieur" et "inférieur", mais apparemment, les hypothèses alternatives ne sont pas ce que je recherche. Par exemple, alternative = "greater"me dit "hypothèse alternative: le vrai décalage d'emplacement est supérieur à 0"; alternative = "less"me dit "hypothèse alternative: le vrai décalage de position est inférieur à 0".

Comment puis-je modifier la wilcox.test()fonction afin d'avoir l'hypothèse alternative que je veux (B provient d'une distribution avec des paramètres de position plus élevés que A)? Ou devrais-je simplement utiliser un autre test à la place?

Waldir Leoncio
la source
3
Réfléchissez à ce que signifie «changement de lieu».
Roland
1
Dans quel sens vos données ne sont-elles pas normales. Sur la base des boxplots (peut-être pas la meilleure façon de décider, mais ce qui est là), ils ont certainement l'air assez normaux. De plus, vous avez généré vos données avec rnorm(), elles doivent donc être normales . Je me demande si vous êtes confus quant à la nature de l'hypothèse de normalité; cela peut vous aider à lire ce fil: Que faire si les résidus sont normalement distribués mais y ne l'est pas .
gung - Réintégrer Monica
1
Je développe simplement le point de @ Roland, mais pourquoi pensez-vous qu'il y a un problème? Cela semble vous donner exactement ce que vous voulez.
Gala du
3
Le test de Wilcoxon-Mann-Whitney est sensible à des différences plus générales qu'un changement de position direct; par exemple, avec des valeurs positives, il est également sensible à un changement d'échelle (la prise de journaux convertit le changement d'échelle en un changement d'emplacement, mais la statistique WMW est la même). Vous pouvez même traiter une alternative unilatérale aussi générale queP(X>Y)>12par exemple (voir par exemple les statistiques pratiques non paramétriques de Conover ).
Glen_b -Reinstate Monica
2
(ctd) ... D'un autre côté, vous avez dit à un moment donné "* Je veux tester si les deux échantillons proviennent de la même distribution *"; car il y a plus de façons que cela soit faux qu'une tendance à une variable d'être plus élevée (par exemple, un changement de variabilité avec des emplacements similaires ou un changement d'asymétrie ou de pic), si vous voulez vraiment juste tester l'égalité des distributions vs l'inégalité d'entre eux, vous devriez probablement considérer deux échantillons Kolmogorov-Smirnov. Si vous êtes intéressé par une alternative «a tendance à être plus grande», alors WMW devrait être correct.
Glen_b -Reinstate Monica

Réponses:

9

Techniquement, la catégorie de référence et la direction du test dépendent de la façon dont la variable de facteur est codée. Avec vos données de jouets:

> wilcox.test(x ~ y, data=data, alternative="greater")

    Wilcoxon rank sum test with continuity correction

data:  x by y 
W = 52, p-value = 1
alternative hypothesis: true location shift is greater than 0 

> wilcox.test(x ~ y, data=data, alternative="less")

    Wilcoxon rank sum test with continuity correction

data:  x by y 
W = 52, p-value < 2.2e-16
alternative hypothesis: true location shift is less than 0 

Notez que la statistique W est la même dans les deux cas, mais le test utilise des queues opposées de sa distribution d'échantillonnage. Examinons maintenant la variable facteur:

> levels(data$y)
[1] "A" "B"

On peut le recoder pour faire de "B" le premier niveau:

> data$y <- factor(data$y, levels=c("B", "A"))

Maintenant nous avons:

> levels(data$y)
[1] "B" "A"

Notez que nous n'avons pas modifié les données elles - mêmes , juste la façon dont la variable catégorielle est encodée «sous le capot»:

> head(data)
          x y
1 0.4395244 A
2 0.7698225 A
3 2.5587083 A
4 1.0705084 A
5 1.1292877 A
6 2.7150650 A

> aggregate(data$x, by=list(data$y), mean)
  Group.1        x
1       B 5.292817
2       A 1.034404

Mais les directions du test sont désormais inversées:

> wilcox.test(x ~ y, data=data, alternative="greater")

    Wilcoxon rank sum test with continuity correction

data:  x by y 
W = 2448, p-value < 2.2e-16
alternative hypothesis: true location shift is greater than 0 

La statistique W est différente mais la valeur p est la même que pour le alternative="less"test avec les catégories dans l'ordre d'origine. Avec les données d'origine, cela pourrait être interprété comme «le décalage de localisation de B vers A est inférieur à 0» et avec les données recodées, il devient «le décalage de localisation de A vers B est supérieur à 0» mais c'est vraiment la même hypothèse (mais voir les commentaires de Glen_b à la question pour l'interprétation correcte).

Dans votre cas, il semble donc que le test que vous souhaitez soit alternative="less"(ou, de manière équivalente, alternative="greater"avec les données recodées). Est ce que ça aide?

Gala
la source
Mm, on dirait que tu es sur quelque chose là-bas, Gaël. J'étudierai votre réponse et reviendrai, merci pour l'aide!
Waldir Leoncio
Ok, donc je suppose que "supérieur" dans ce cas est toujours en référence au "premier" niveau, non? Ok, ça aide et je pense que ça résout le cas. Merci encore!
Waldir Leoncio
Je viens de rencontrer ce problème précis. Merci pour l'excellente explication!
Davy Kavanagh