代码之家  ›  专栏  ›  技术社区  ›  dalloliogm

Kruskal-Wallis检验及其成对比较的细节

r
  •  11
  • dalloliogm  · 技术社区  · 14 年前

    标准的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
    

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

    我找到了 kruskalmc 从允许我做我想做的事情的包pgirmess:

    > 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包的任何信息,不管它是否维护,或者是否测试过。

    4 回复  |  直到 13 年前
        1
  •  16
  •   IRTFM    9 年前

    除了Marek提到的kruskal::agricolae之外,还有一种方法是Nemenyi Damico Wolfe Dunn测试,该测试在使用multcomp的coin包的One-way\u测试的帮助页中实现。使用hadley的设置并减少approximate()函数的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"))
    

    2012年1月:最近在R-help上有一个帖子声称这个方法产生了意外的结果,所以我把这封邮件转发给了维护人员。马克·迪福德说,他已经确认了这些问题,并提供了一个nparcomp软件包的替代测试: https://stat.ethz.ch/pipermail/r-help/2012-January/300100.html

    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 帮助页已将其早期实现替换为usng上面的代码 independence_test

        2
  •  2
  •   Ä°zzet KILIÇ    9 年前

    您可以使用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) 
    

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

        3
  •  1
  •   hadley    14 年前

    我以为你能做到以下几点:

    data(diamonds, package = "ggplot2")
    
    library(coin)
    library(multcomp)
    
    kt <- kruskal_test(price ~ clarity, data = diamonds)
    glht(kt, mcp(clarity = "Tukey"))
    

    multcomp 不支持 coin 对象(还没有?)。

        4
  •  1
  •   Glorfindel DataWraith    5 年前

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

    alt text
    (来源: statsdirect.com )

    其中T是k个样本的Kruskal-Wallis检验统计量,S^2是T统计量的分母,N是第i个样本的总数(所有ni),Ri是第i个样本的秩(来自所有样本集合)之和,T是N-k个自由度上学生T分布的分位数。

    我知道我帮不了什么忙:)
    我也在等待一个更好的答案