标准 stats::kruskal.test 模块允许计算数据集上的 kruskal-wallis 测试:

>>> data(diamonds)
>>> kruskal.test(price~carat, data=diamonds)

Kruskal-Wallis rank sum test

data:  price by carat by color
Kruskal-Wallis chi-squared = 50570.15, df = 272, p-value < 2.2e-16

这是正确的,它给了我一个概率,即数据中的所有组都具有相同的平均值。

但是,我想了解每对比较的详细信息,例如颜色 D 和 E 的钻石是否具有相同的平均价格,就像其他一些软件 (SPSS) 在您要求进行 Kruskal 测试时所做的那样。

我从 pgirmess 包中找到了 kruskalmc,它允许我做我想做的事情:
> kruskalmc(diamonds$price, diamonds$color)
Multiple comparison test after Kruskal-Wallis
p.value: 0.05
Comparisons
      obs.dif critical.dif difference
D-E  571.7459     747.4962      FALSE
D-F 2237.4309     751.5684       TRUE
D-G 2643.1778     726.9854       TRUE
D-H 4539.4392     774.4809       TRUE
D-I 6002.6286     862.0150       TRUE
D-J 8077.2871    1061.7451       TRUE
E-F 2809.1767     680.4144       TRUE
E-G 3214.9237     653.1587       TRUE
E-H 5111.1851     705.6410       TRUE
E-I 6574.3744     800.7362       TRUE
E-J 8649.0330    1012.6260       TRUE
F-G  405.7470     657.8152      FALSE
F-H 2302.0083     709.9533       TRUE
F-I 3765.1977     804.5390       TRUE
F-J 5839.8562    1015.6357       TRUE
G-H 1896.2614     683.8760       TRUE
G-I 3359.4507     781.6237       TRUE
G-J 5434.1093     997.5813       TRUE
H-I 1463.1894     825.9834       TRUE
H-J 3537.8479    1032.7058       TRUE
I-J 2074.6585    1099.8776       TRUE

然而,这个包只允许一个分类变量(例如,我不能像 kruskal.test 那样研究按颜色和克拉聚类的价格),而且我对 pgirmess 包一无所知,无论是是否维护,或者是否经过测试。

你能给我推荐一个包来执行 Kruskal-Wallis 测试,它会返回每次比较的详细信息吗?你会如何处理这个问题?

最佳答案

除了 Marek 提到的 kruskal::agricolae 之外的另一种方法是 Nemenyi-Damico-Wolfe-Dunn 测试,该测试在使用 multcomp 的硬币包中 oneway_test 的帮助页面中实现。使用 hadley 的设置并减少近似()函数的 B= 值,使其在有限时间内完成:

#updated translation of help page implementation of NDWD
NDWD <-
    independence_test(dv ~ iv, data = sum_codings1, distribution = approximate(B = 10000),
                          ytrafo = function(data) trafo(data, numeric_trafo = rank_trafo),
                          xtrafo = mcp_trafo(iv = "Tukey"))


    ### global p-value
    print(pvalue(NDWD))

    ### sites (I = II) != (III = IV) at alpha = 0.01 (page 244)
    print(pvalue(NDWD, method = "single-step"))

在更大的数据集上获得更稳定的结果可能需要增加 B 值并增加用户的耐心。

一月:2012 年:最近在 R-help 上发布了一个帖子,声称这种方法会产生意外的结果,所以我将该电子邮件转发给了维护者。 Mark Diffford 说他已经确认了这些问题,并提供了 nparcomp 包的替代测试:https://stat.ethz.ch/pipermail/r-help/2012-January/300100.html

在同一周,还有一些关于 rhelp 与 KW 测试的事后对比的其他建议:
kruskalmc suggested by Mario Garrido Escudero
rms::polr 后跟 rms::contrasts 由 Frank Harrell 建议 https://stat.ethz.ch/pipermail/r-help/2012-January/300329.html

2015 年 11 月:同意 toto_tico 币包的帮助页面代码在此期间已更改。 ?independence_test 帮助页面现在提供多变量 KW 测试,?oneway_test 帮助页面已将其早期实现替换为上面使用 independence_test 函数的代码。

关于r - Kruskal-Wallis 检验与成对比较的详细信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2478272/

10-12 18:00