R语言agricolae包HSD.test分组与非分组结果差异疑问
HSD.test分组与非分组结果矛盾的原因分析
我在PlantGrowth数据集上执行HSD.test时遇到了矛盾的结果:设置group=TRUE后三组被分配了不同的显著性字母;但设置group=FALSE再次运行时,对照组(ctrl)与其他处理组(trt1、trt2)无显著差异。为何会出现这种情况?这是否意味着HSD.test的字母分组并不总是代表组间存在显著差异?
测试代码
Anova<-aov(PlantGrowth$weight~PlantGrowth$group) summary.aov(Anova) HSD.1<-HSD.test(Anova, "PlantGrowth$group", alpha = .95, group=TRUE) HSD.1 HSD.2<-HSD.test(Anova, "PlantGrowth$group", alpha = .95, group=FALSE) HSD.2
分组测试结果
> HSD.1<-HSD.test(Anova, "PlantGrowth$group", alpha = .95, group=TRUE) > HSD.1 $statistics MSerror Df Mean CV MSD 0.3885959 27 5.073 12.28809 0.0851231 $parameters test name.t ntr StudentizedRange alpha Tukey PlantGrowth$group 3 0.4318156 0.95 $means PlantGrowth$weight std r se Min Max Q25 Q50 Q75 ctrl 5.032 0.5830914 10 0.1971284 4.17 6.11 4.5500 5.155 5.2925 trt1 4.661 0.7936757 10 0.1971284 3.59 6.03 4.2075 4.550 4.8700 trt2 5.526 0.4425733 10 0.1971284 4.92 6.31 5.2675 5.435 5.7350 $comparison NULL $groups PlantGrowth$weight groups trt2 5.526 a ctrl 5.032 b trt1 4.661 c attr(,"class") [1] "group"
非分组测试结果
> HSD.2<-HSD.test(Anova, "PlantGrowth$group", alpha = .95, group=FALSE) > HSD.2 $statistics MSerror Df Mean CV MSD 0.3885959 27 5.073 12.28809 0.0851231 $parameters test name.t ntr StudentizedRange alpha Tukey PlantGrowth$group 3 0.4318156 0.95 $means PlantGrowth$weight std r se Min Max Q25 Q50 Q75 ctrl 5.032 0.5830914 10 0.1971284 4.17 6.11 4.5500 5.155 5.2925 trt1 4.661 0.7936757 10 0.1971284 3.59 6.03 4.2075 4.550 4.8700 trt2 5.526 0.4425733 10 0.1971284 4.92 6.31 5.2675 5.435 5.7350 $comparison difference pvalue signif. LCL UCL ctrl - trt1 0.371 0.3909 0.2858769 0.4561231 ctrl - trt2 -0.494 0.1980 -0.5791231 -0.4088769 trt1 - trt2 -0.865 0.0120 * -0.9501231 -0.7798769 $groups NULL attr(,"class") [1] "group"
我原本预期根据分组测试结果,trt1和trt2均与ctrl组存在显著差异,但非分组测试结果显示仅trt1与trt2之间存在显著差异。
核心原因:alpha参数设置完全颠倒
你调用HSD.test时错误地将alpha设为.95,但agricolae包的HSD.test中,alpha代表的是显著性水平(常规取值为0.05),而非置信水平。这个参数错误直接导致了两组结果的矛盾:
1. group=TRUE时的错误分组
当设置group=TRUE,函数基于错误的alpha=0.95进行字母分组——此时几乎所有组间差异的p值都远小于0.95,会被错误判定为"显著",因此三组被分配了完全不同的字母a、b、c,这是不符合真实差异的错误结果。
2. group=FALSE时的真实差异展示
当设置group=FALSE,函数输出了真实的组间p值:
- ctrl vs trt1: 0.3909
- ctrl vs trt2: 0.1980
- trt1 vs trt2: 0.0120
只有trt1和trt2的p值(0.0120)小于你设置的0.95,因此被标记为显著;另外两组的p值虽然也小于0.95,但因未达到常规的0.05显著性阈值,实际不存在统计学差异,这才是符合数据真实情况的结果。
修正后的正确操作
将alpha参数改为常规的0.05,重新运行代码:
library(agricolae) Anova <- aov(weight ~ group, data = PlantGrowth) summary.aov(Anova) # 正确设置显著性水平alpha=0.05 HSD.1 <- HSD.test(Anova, "group", alpha = 0.05, group = TRUE) HSD.1 HSD.2 <- HSD.test(Anova, "group", alpha = 0.05, group = FALSE) HSD.2
修正后的结果解释
- 分组结果(group=TRUE):trt2标记为a,ctrl和trt1标记为b(两者p值>0.05,无显著差异),trt1和trt2因p值<0.05,被分配不同字母,代表存在显著差异。
- 非分组结果(group=FALSE):ctrl与trt1、ctrl与trt2的p值均大于0.05,无显著标记;仅trt1与trt2的p值<0.05,显示显著标记。
此时两组结果完全一致,说明HSD.test的字母分组逻辑是可靠的:相同字母的组间无显著差异,不同字母的组间存在显著差异——前提是你正确设置了参数。
内容的提问来源于stack exchange,提问作者jtpugs
相关产品推荐
相关产品推荐

