统计学中有许多方法可用于比较不同组别之间的差异,而其中一种常见且强大的工具就是Tukey检验。当我们进行多组实验或研究时,常常需要了解哪些组别之间存在显著差异,而不仅仅是确定是否存在差异。在这个问题上,Tukey检验可以为我们提供确切的答案。
Tukey检验,也称为Tukey的事后多重比较方法,是方差分析(ANOVA)的后续分析中经常采用的一种统计方法。它的目标是通过比较各组均值之间的差异来揭示群体之间的显著性差异。无论是生物医学研究、社会科学调查还是工程实验,都可以借助Tukey检验来深入理解数据背后的故事。
想要了解其原理,请自行搜索,这里主要介绍,在R语言环境中如何实现
背景不再赘述,例子是最好的解释,简而言之,在R语言中,multcompView
包通过 TukeyHSD()
函数实现了 Tukey 检验。它还提供了一个图表,显示每个组合的均值差异情况:
# 加载工具
library(multcompView)
# 创建随机数据
set.seed(1)
treatment <- rep(c("A", "B", "C", "D", "E"), each=20)
value <- c( sample(2:5, 20 , replace=T) , sample(6:10, 20 , replace=T), sample(1:7, 20 , replace=T), sample(3:10, 20 , replace=T) , sample(10:20, 20 , replace=T) )
data <- data.frame(treatment,value)
# treat对value的影响
model <- lm( data$value ~ data$treatment )
# 先做个ANOVA
ANOVA <- aov(model)
# 用 Tukey test 研究每对 treat 和 value
TUKEY <- TukeyHSD(x=ANOVA, 'data$treatment', conf.level=0.95)
# 可视化(下图)
plot(TUKEY , las=1 , col="brown")
注意看!图中有代表不同配对分组的 “横线” ,和一个在本坐标系中,值为 0 的竖直虚线,若代表配对儿分组的横线和虚线相交,那么,则认为分组中成分的均值没有差异,就是A和C、B和D均值没差异。(反正我是大概理解了……)
上图显示了A组和C组之间以及D组和B组之间没有显著差异。可以使用箱线图来表示这些信息。A组和C组以相似的方式表示:相同的颜色和相同的字母’b’在顶部。对于B-D和E组也是如此。
先直接上代码:
# 把没有区别的组合放在一起
generate_label_df <- function(TUKEY, variable){
# Extract labels and factor levels from Tukey post-hoc
Tukey.levels <- TUKEY[[variable]][,4]
Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'])
#I need to put the labels in the same order as in the boxplot :
Tukey.labels$treatment=rownames(Tukey.labels)
Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
return(Tukey.labels)
}
LABELS <- generate_label_df(TUKEY , "data$treatment")
# 每一组用相同的颜色
my_colors <- c(
rgb(143,199,74,maxColorValue = 255),
rgb(242,104,34,maxColorValue = 255),
rgb(111,145,202,maxColorValue = 255)
)
# 一个基本箱线图
a <- boxplot(data$value ~ data$treatment , ylim=c(min(data$value) , 1.1*max(data$value)) , col=my_colors[as.numeric(LABELS[,1])] , ylab="value" , main="")
# 在每个box上边添加字母
over <- 0.1*max( a$stats[nrow(a$stats),] )
text( c(1:nlevels(data$treatment)) , a$stats[nrow(a$stats),]+over , LABELS[,1] , col=my_colors[as.numeric(LABELS[,1])] )
PS: Tukey test 也被称为 Tukey’s range test / Tukey method / Tukey’s honest significance test / Tukey’s HSD test / Tukey-Kramer method……名字有点多
Tukey检验的步骤如下:
Tukey检验是一种强大的多重比较方法,可以在实验设计和数据分析中揭示组别间的显著差异。然而,在应用时需要注意其适用性和局限性,并结合实际研究情况进行解释和判断。