当测试的平均数大时,如何报告ANOVA结果

时间:2015-06-11 16:02:16

标签: r anova

我有来自5个发行版的5种方法:           意思 A组33 B组5500 C组33 D组32223 E组80

我想确定平均值的差异是否显着,因此我运行anova并且p值< .05因此至少存在2种方式的差异。

n=500
value<- stack(data.frame(x= rnorm(n,33,7),y=rnorm(n,5500,5), z=rnorm(n,33,7) , a=rnorm(n,32223,7) , b=rnorm(n,80,4)    )   )
ex =  rep(LETTERS[1:5],each=n)
dat = data.frame(value= value$values,ex)
results = aov(value ~ ex, data=dat) #NULL is EQUAL MEANS FOR ALL GROUPS, alternative is at least 2 means different. p-value < .05 means reject null and have difference in means
summary(results)

然后我想确定哪些差异是显着的,所以我运行TukeyHSD测试并报告这些结果

t=TukeyHSD(results, conf.level = 0.95) #p-value<.05 means difference are significant
t

  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = value ~ ex, data = dat)

$ex
             diff           lwr           upr     p adj
B-A   5467.316931  5.466280e+03   5468.353394 0.0000000
C-A      0.591297 -4.451667e-01      1.627761 0.5251299
D-A  32190.195837  3.218916e+04  32191.232301 0.0000000
E-A     47.576884  4.654042e+01     48.613347 0.0000000
C-B  -5466.725634 -5.467762e+03  -5465.689170 0.0000000
D-B  26722.878907  2.672184e+04  26723.915370 0.0000000
E-B  -5419.740047 -5.420777e+03  -5418.703583 0.0000000
D-C  32189.604540  3.218857e+04  32190.641004 0.0000000
E-C     46.985587  4.594912e+01     48.022050 0.0000000
E-D -32142.618953 -3.214366e+04 -32141.582490 0.0000000

我的问题是如何向观众报告TUKEYHSD的结果。 有10个不同,只有C-A不重要,但我向观众报告的只是手段

          Mean
Group A   33
Group B   5500
Group C   33
Group D   32223
Group E   80

实际上我有50个手段而不是10个因此Tukey HSD测试将返回(50 ^ 2-50)/ 2 = 1225个差异!我如何报告这1225个差异?

我知道这个问题更多的是关于报道,但这似乎是一个真正的问题。如何判断一些差异是否显着,而其他差异不是在测试的手段数量很大的时候?

谢谢。

1 个答案:

答案 0 :(得分:1)

考虑使用热图:

# the unique values of `ex`
uex = unique(ex) 

# create a matrix to told the comparisons
mat  <- matrix(NA,length(uex),length(uex))
dimnames(mat)  <-  list(uex,uex)

# fill it with the differences (or p-values)
mat[lower.tri(mat)]  <-  t$ex[,'diff']

# plot a heat map using image()
image(t(mat),
        breaks= c(-1,.01,.5,2),# break points for significance
        col = c('red','green','white'),# colors to indicate significance
        axes=FALSE)

# make nice labels
box()
axis(1,at=(seq(length(uex))-1)/(length(uex)-1),labels=uex)
axis(2,at=(seq(length(uex))-1)/(length(uex)-1),labels=uex)

您也可以使用heatmap(mat),但根据显着性水平分配颜色会变得很难。