如何在 R 中获得 Kruskal-Wallis 检验的精确 p 值?

Posted

技术标签:

【中文标题】如何在 R 中获得 Kruskal-Wallis 检验的精确 p 值?【英文标题】:How to obtain the exact p-value of a Kruskal-Wallis test in R? 【发布时间】:2020-09-09 21:51:50 【问题描述】:

如何在 R 中获得 Kruskal-Wallis(例如 3 组)检验的准确 p 值?

数据示例:

df <- data.frame(
    dv = c(0.80, 0.83, 1.89, 1.04, 1.45, 1.38, 1.91, 1.64, 0.73, 1.46,
           1.15, 0.88, 0.90, 0.74, 1.21),
    group = factor(rep(c("A", "B", "C"), c(5, 5, 5))))

我使用kruskal_test函数尝试了coin

kruskal_test(dv ~ group, data = df,distribution= "exact")

虽然产生了错误:

Error in .local(object, ...) : ‘object’ is not a two-sample problem

如果我将"exact" 更改为"approximate",它会运行,但它不是确切的分布...

有什么想法吗?

【问题讨论】:

也许你需要一个配对测试 试试combn(levels(df$group), 2, FUN = function(x) kruskal_test(dv ~ group, data = subset(df, group %in% x), distribution = 'exact'), simplify = FALSE) 你试过stats::kruskal.test(dv ~ group, data = df)吗? @duckmayr,是的,对不起,你是对的,我不知何故在kruskal.testks.test 之间感到困惑。我的kruskal.test 方法也取得了成功。 不用担心@IanCampbell!我们都会时不时转身 【参考方案1】:

您收到错误的原因是您只能准确计算两个样本问题的分布。

来自help("kruskal_test")

...分布可以通过蒙特卡洛重采样来近似,或者通过将分布分别设置为“近似”或“精确”来精确计算单变量双样本问题。

【讨论】:

好吧,如果我设置为"approximate" 它确实有效。所以这仅适用于 "exact" 选项。 @Sinval 我发现了一些关于 SAS 精确方法的论文,但我找不到在 R 中实现的任何东西。如果这个答案没有帮助,我可以删除它。 谢谢,我知道IBM SPSS Statistics Exact Tests 模块也设法获得那些精确的 p 值。我真的很想使用 R,因为我和我的学生一起使用了 exams 包。我希望他们检查确切的 p 值表,然后将它们插入 Moodle 考试平台。将这些值与使用 R 生成的值进行比较之后...

以上是关于如何在 R 中获得 Kruskal-Wallis 检验的精确 p 值?的主要内容,如果未能解决你的问题,请参考以下文章

R中列表子列表之间的Kruskal-Wallis测试

使用 Kruskal-Wallis 秩和检验的 kruskalmc 的 R pgirmess 替代方案

显示 Kruskal-Wallis 测试等级

带有调整 p 值的 R 的 Kruskal-Wallis 检验

R - stat_compare_means 从 Kruskal-Wallis 测试返回不同的值

[R报错] Kruskal-wallis test 所有组的层次都必需是有限的