首页 > 解决方案 > wilcox_test 为 MWU 返回错误的 U 值

问题描述

当我使用 wilcox.test 运行 Mann Whitney U 非参数测试时,返回的 W 值是两个 U 值中较大的一个。这对我来说似乎很奇怪,因为 MWU 测试使用两个 U 值中较小的一个作为测试统计量,所以我希望看到该值来报告数据。下面是一个例子。如果我在 R 中运行代码,W 值列在 214。

wilcox.test(disp ~ am, data = mtcars)

但是如果我使用另一个程序或网站计算这个(我喜欢这个计算器:https ://www.socscistatistics.com/tests/mannwhitney/ ),我得到两个 U 值是 33 和 214。然后我们使用 33 来检查对临界值,并会报告该值。

是否有任何软件包以更用户友好的方式计算 MWU,它显示正确/较小的 U 值作为测试统计?我尝试了 rstatix 的版本,它做同样的事情。另外,有谁知道为什么这将是默认行为?这似乎违反直觉。

标签: rstatistics

解决方案


如果您的数据是宽格式的,请使用wilcox.test它的两个参数格式,而不是它的公式格式。切换参数将提供两个U值。

转向mtcars宽:

library(dplyr)
library(magrittr)

mtcars_wide<- mtcars %>%
  pivot_wider(names_from = "am", values_from = "disp", names_prefix = "am_")

使用两个参数格式wilcox.test获取每个U

mtcars_wide %$% wilcox.test(am_0, am_1, data = .)$statistic # 214

mtcars_wide %$% wilcox.test(am_1, am_0, data = .)$statistic # 33

注意:如何将数据移动到宽格式并不重要——我使用 tidyverse 包,但它们不是必需的。关键是您可以U通过在运行测试时交换列名来获得每个。


推荐阅读