Test de somme de rang de Wilcoxon en R

13

J'ai les résultats du même test appliqués à deux échantillons indépendants:

x <- c(17, 12, 13, 16, 9, 19, 21, 12, 18, 17)
y <- c(10, 6, 15, 9, 8, 11, 8, 16, 13, 7, 5, 14)

Et je veux calculer un test de somme de rang de Wilcoxon.

Lorsque je calcule la statistique à la main, j'obtiens: TW

TW=rang(Xje)=156,5

Quand je laisse R effectuer un wilcox.test(x, y, correct = F), j'obtiens:

W = 101.5

Pourquoi donc? La statistique ne doit-elle pas être retournée uniquement lorsque j'effectue un test de classement signé avec ? Ou est-ce que je comprends mal le test de somme de rang?W+paired = T

Comment puis-je dire à R de sortirTW


Dans le cadre des résultats du test, pas par le biais de quelque chose comme:

dat <- data.frame(v = c(x, y), s = factor(rep(c("x", "y"), c(10, 12))))
dat$r <- rank(dat$v)
T.W <- sum(dat$r[dat$s == "x"])

J'ai posé une question de suivi sur la signification des différentes façons de calculer la statistique de test pour le test de somme de rang de Wilcoxon

Communauté
la source

Réponses:

15

L' Noteaide de la wilcox.testfonction explique clairement pourquoi la valeur de R est plus petite que la vôtre:

Remarque

La littérature n'est pas unanime sur les définitions de la somme de rang de Wilcoxon et des tests de Mann-Whitney. Les deux définitions les plus courantes correspondent à la somme des rangs du premier échantillon avec la valeur minimale soustraite ou non: R soustrait et S-PLUS non, donnant une valeur plus grande de m (m + 1) / 2 pour un premier échantillon de taille m. (Il semble que l'article original de Wilcoxon ait utilisé la somme non ajustée des classements, mais les tableaux suivants ont soustrait le minimum.)

Autrement dit, la définition utilisée par R est plus petite que la version que vous utilisez, où est le nombre d'observations dans le premier échantillon.n1(n1+1)/2n1

En ce qui concerne la modification du résultat, vous pouvez affecter la sortie de wilcox.testdans une variable, par exemple a, puis manipuler a$statistic- en ajoutant le minimum à sa valeur et en changeant son nom. Ensuite, lorsque vous imprimez a(par exemple en tapant a), il se présente comme vous le souhaitez.

Pour voir où je veux en venir, essayez ceci:

a <- wilcox.test(x,y,correct=FALSE)
str(a) 

Par exemple, si vous faites cela:

n1 <- length(x)
a$statistic <- a$statistic + n1*(n1+1)/2
names(a$statistic) <- "T.W"
a

alors vous obtenez:

        Wilcoxon rank sum test with continuity correction

data:  x and y 
T.W = 156.5, p-value = 0.006768
alternative hypothesis: true location shift is not equal to 0 

n1(n1+1)/2WwUW

Glen_b -Reinstate Monica
la source