R中的Wilcoxon秩和检验

机器算法验证 r wilcoxon-mann-whitney 检验 威尔克森符号秩
2022-02-15 03:56:40

我将相同测试的结果应用于两个独立样本:

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)

我想计算一个 Wilcoxon 秩和检验。

当我计算统计TW手动,我得到:

TW=rank(Xi)=156.5

当我让 R 执行 awilcox.test(x, y, correct = F)时,我得到:

W = 101.5

这是为什么?不应该统计W+仅当我使用 ? 执行签名等级测试时才返回paired = T还是我误解了秩和检验?

我如何告诉 R 输出TW


作为测试结果的一部分,而不是通过以下方式:

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"])

我问了一个关于计算 Wilcoxon 秩和检验的检验统计量的不同方法的含义的后续问题

1个回答

该函数Note的帮助wilcox.test清楚地解释了为什么 R 的值小于你的值:

笔记

文献对 Wilcoxon 秩和和 Mann-Whitney 检验的定义并不一致。两个最常见的定义对应于第一个样本的秩和减去或不减去最小值:R 减去而 S-PLUS 不减去,给出一个大于 m(m+1)/2 的值第一个大小为 m 的样本。(似乎 Wilcoxon 的原始论文使用了未经调整的排名总和,但随后的表格减去了最小值。)

也就是说,R使用的定义是n1(n1+1)/2小于您使用的版本,其中n1是第一个样本中的观察数。

至于修改结果,您可以将输出分配wilcox.test到一个变量中,比如a,然后进行操作a$statistic- 将最小值添加到其值并更改其名称。然后,当您打印a(例如,通过键入a)时,它会按照您想要的方式显示。

要看看我在做什么,试试这个:

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

例如,如果你这样做:

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

然后你得到:

        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)/2或不)作为W或者w或一些接近的变体(例如herehere)。它也经常被称为'U' 因为曼与惠特尼。有很多使用的先例W,所以对我自己来说,我不会为更改统计信息名称的行而烦恼,但如果它适合您这样做,那么您也没有理由不这样做。