Kruskal-Wallis测试与成对比较的详细信息

时间:2010-03-19 15:00:13

标签: r

标准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测试,该测试会返回每次比较的详细信息?你会如何处理这个问题?

4 个答案:

答案 0 :(得分:16)

除了马雷克提到的kruskal :: agricolae之外,另一种方法是在使用multcomp的硬币包中的oneway_test的帮助页面中实现的Nemenyi-Damico-Wolfe-Dunn测试。使用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值并增加用户的耐心。

Jan:2012:最近在R-help上发布了一个帖子,声称此方法出现意外结果,因此我将该电子邮件转发给维护者。 Mark Difford说他已经确认了这些问题并提供了使用nparcomp软件包的替代测试:https://stat.ethz.ch/pipermail/r-help/2012-January/300100.html

在同一周还有一些关于rhelp的其他建议,用于与KW测试的事后对比: kruskalmc suggested by Mario Garrido Escudero 和  rms::polr后跟弗兰克哈雷尔提出的rms::contrasts https://stat.ethz.ch/pipermail/r-help/2012-January/300329.html

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

答案 1 :(得分:2)

您可以使用PMCMR包。 There是有关它的更多信息。

Spelling_Grades <- c(90,87,89,90,75,88,97,99,78,85,72,76,77,79,70)
Methods <- c("A","A","A","A","B","B","B","B","B","B","C","C","C","C","C")
kruskalmc(Spelling_Grades~Methods)

#This method doesn't accept characters that's why I've changed the methods to integer
Methods <- c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3)
posthoc.kruskal.nemenyi.test(Spelling_Grades~Methods) 

上述两种方法给出了相同的结果。

答案 2 :(得分:1)

不幸的是我不知道这样的功能。如果还没有,那么构造一个返回带有所有成对处理比较的矩阵的函数将是一个有趣的任务。如果满足以下不等式,则认为对比度是显着的

alt text http://www.statsdirect.com/help/image/stat0199_wmf.gif

其中T是k样本的Kruskal-Wallis检验统计量,S ^ 2是T统计量的分母,N是总数(所有ni),Ri是等级的总和(来自所有样本的汇总)对于第i个样本,t是来自Nk自由度上的Student t分布的分位数。

我知道我没多大帮助:) 我也在等待更好的答案

答案 3 :(得分:1)

我原本以为你能够做到以下几点:

data(diamonds, package = "ggplot2")

library(coin)
library(multcomp)

kt <- kruskal_test(price ~ clarity, data = diamonds)
glht(kt, mcp(clarity = "Tukey"))

但似乎multcomp不支持coin个对象(还有?)。