R中独立组之间的显着差异检验

时间:2012-09-05 21:09:48

标签: r anova

x   6.18    3.76    5.15    4.02    2.52    1.41    3.36    8.67    9.36
y   9.39    13.50   10.80   12.70   14.70   13.40   10.10   4.12    10.30
z   6.35    3.90    5.32    5.08    8.38    5.84    3.96    3.78    
b   1.15    2.26    1.47    1.93    1.25    2.87    4.19    2.55    

我想比较4组x,y,z,b,并得出哪些组有显着差异。

谢谢!

2 个答案:

答案 0 :(得分:4)

Kruskal-Wallis是一种非参数检验,可以比较多个群体,看是否有一个明显大于其他群体。它不会决定任何组中的特定值是否显着。

答案 1 :(得分:2)

您可以考虑首先查看均值(将此数据放入数据框“datm”之后):

> aggregate(datm$value, datm['variable'], mean, na.rm=TRUE)
  variable         x
1        x 0.9566667
2        y 1.4277778
3        z 2.3700000
4        b 0.0787500

或者在中位数:

> aggregate(datm$value, datm['variable'], median, na.rm=TRUE)
  variable     x
1        x 0.750
2        y 1.710
3        z 2.265
4        b 0.010

在包硬币中有一个基于排名的事后测试(如kruskal.test是。)它实际上是在LocationTests帮助页面的示例中,除了更改列的名称之外,无需修改即可复制在公式和数据集名称中。该页面没有引用的作者,但包裹作者在这里:Torsten Hothorn,Kurt Hornik,Mark A. van de Wiel和Achim Zeileis:

 ### Nemenyi-Damico-Wolfe-Dunn test (joint ranking)
  ### Hollander & Wolfe (1999), page 244 
  ### (where Steel-Dwass results are given)
  if (require("multcomp")) {

    NDWD <- oneway_test(value~variable, data = datm,
        ytrafo = function(data) trafo(data, numeric_trafo = rank),
        xtrafo = function(data) trafo(data, factor_trafo = function(x)
            model.matrix(~x - 1) %*% t(contrMat(table(x), "Tukey"))),
        teststat = "max", distribution = approximate(B = 90000))

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

    ### DWin note: prints pairwise p-value for comparison of rankings
    print(pvalue(NDWD, method = "single-step"))
  }
#-----------------------
[1] 0
99 percent confidence interval:
 0.000000e+00 5.886846e-05 


y - x 0.8287000
z - x 0.1039889
b - x 0.1107667
z - y 0.5421778
b - y 0.0053000
b - z 0.0000000

要回答评论中的问题,我就这样做了:

 dat <- read.table(text="x   y   z   b
 2.06    1.71    2.47    0.00
 1.08    2.73    1.75    0.00
 1.94    2.29    2.44    0.01
 1.32    1.71    2.50    0.01
 0.75    2.40    4.17    0.01
 0.18    0.45    2.09    0.20
 0.72    0.58    1.77    0.30
 0.22    0.35    1.77    0.10
 0.34    0.63  NA NA", header=TRUE)
 require(reshape2)
#Loading required package: reshape2
 datm <- melt(dat)  # then proceeded as above.