使用 R 的公式界面时如何解释 Mann-Whitney U

机器算法验证 r 非参数 wilcoxon-mann-whitney 检验
2022-03-29 17:51:11

假设我们有以下数据:

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

这会产生以下箱线图 ( boxplot(data$x ~ data$y)):

箱形图

现在假设我想测试两个样本是否具有相同的位置参数(中值和/或平均值)。在我的真实案例中,数据显然不正常,所以我决定运行 Wilcoxon-Mann-Whitney 检验,如下所示:

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

但是,我希望替代假设是 Bdata$y的“第二”因素来自具有更高位置参数的分布。我尝试将alternative参数设置为“更大”和“更少”,但显然替代假设不是我想要的。例如,alternative = "greater"告诉我“替代假设:真实位置偏移大于 0”;alternative = "less"告诉我“替代假设:真实位置偏移小于 0”。

如何调整wilcox.test()函数以获得我想要的替代假设(B 来自具有比 A 更高位置参数的分布)?还是我应该改用另一个测试?

1个回答

从技术上讲,参考类别和测试方向取决于因子变量的编码方式。使用您的玩具数据:

> 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 

请注意,两种情况下的 W 统计量是相同的,但测试使用的是采样分布的相反尾部。现在让我们看一下因子变量:

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

我们可以对其进行重新编码以使“B”成为第一级:

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

现在我们有:

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

请注意,我们并没有更改数据本身,只是在“幕后”对分类变量进行编码:

> 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

但是现在测试的方向颠倒了:

> 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 

W 统计量不同,但palternative="less"与具有原始顺序的类别的测试相同。对于原始数据,可以解释为“从 B 到 A 的位置偏移小于 0”,对于重新编码的数据,它可以解释为“从 A 到 B 的位置偏移大于 0”,但这实际上是相同的假设(但请参阅 Glen_b 对问题的评论以获得正确的解释)。

因此,在您的情况下,您想要的测试似乎是alternative="less"(或者,等效地,alternative="greater"使用重新编码的数据)。这有帮助吗?