【发布时间】:2015-04-24 18:25:39
【问题描述】:
问题: 我想了解如何更改 Tukey 在 R 中的测试计算平均值并分配相应字母的样本顺序。非常简单的例子如下。
我玩过iris数据,发现不同物种之间的Sepal.Length存在差异。这是箱线图:
我进行了 ANOVA 测试,发现差异具有统计学意义。
> fit <- lm(Sepal.Length ~ Species, data = iris)
> summary(aov(fit))
Df Sum Sq Mean Sq F value Pr(>F)
Species 2 63.21 31.606 119.3 <2e-16 ***
Residuals 147 38.96 0.265
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
然后我进行了 Tukey 的测试,得到了以下结果:
> library(agricolae)
> HSD.test(fit, "Species", group=T, console=T)
Study: fit ~ "Species"
HSD Test for Sepal.Length
Mean Square Error: 0.2650082
Species, means
Sepal.Length std r Min Max
setosa 5.006 0.3524897 50 4.3 5.8
versicolor 5.936 0.5161711 50 4.9 7.0
virginica 6.588 0.6358796 50 4.9 7.9
alpha: 0.05 ; Df Error: 147
Critical Value of Studentized Range: 3.348424
Honestly Significant Difference: 0.2437727
Means with the same letter are not significantly different.
Groups, Treatments and means
a virginica 6.588
b versicolor 5.936
c setosa 5.006
HSD.test 函数根据组表将意思按降序排序,然后分配字母。因此,“virginica”具有最大的平均值,因此它是表中的第一个。
问题: 有什么方法可以更改字母的默认排序和分配? 我可以按均值升序对样本进行排序,然后分配字母吗? 预期输出如下:
a setosa 5.006
b versicolor 5.936
c virginica 6.588
可能的解决方案:在 multcomp 包中,有两个函数可以协同工作:
1 - glht 做 Tukey 的测试
> an <- aov(fit)
> library(multcomp)
> glht(an, linfct = mcp(Species = "Tukey"))
General Linear Hypotheses
Multiple Comparisons of Means: Tukey Contrasts
Linear Hypotheses:
Estimate
versicolor - setosa == 0 0.930
virginica - setosa == 0 1.582
virginica - versicolor == 0 0.652
2 - cld 可以根据iris$Species 因子的级别为我提供分配给Species 的字母
> cld(glht(an, linfct = mcp(Species = "Tukey")))
setosa versicolor virginica
"a" "b" "c"
不幸的是,glht 函数没有显示另一个对创建条形图有用和需要的数据(均值、标准、p 值)。当然,我可以单独使用其他特殊功能,或者同时使用HSD.test 和cld。但我更愿意解决HSD.test 函数中的方法排序问题,并且只使用这个。
【问题讨论】:
-
即使您无法在帖子中添加图片,我相信您也可以在图片分享网站上添加图片链接。
-
谢谢你,eirikdaude。这是数据的箱线图:i.stack.imgur.com/Zb44o.jpg
-
stats包中的TukeyHSD()将让您使用ordered=TRUE升序排列,但不分配字母...