如何基于TukeyHSD检验输出生成CLD并整合到ggplot中
基于TukeyHSD输出直接生成CLD的实现方案
该方案完全基于你已生成的TukeyHSD结果计算CLD,和你已报告的p值完全匹配,无需调整原有分析结果。
实现步骤
- 加载依赖包
使用multcompView包完成CLD计算,首次使用需先安装:
install.packages("multcompView") library(multcompView)
- 提取TukeyHSD的两两比较p值
从你的tk_arbuscular结果中提取农药和施肥交互项的校正p值:
# 提取pesticide:fertilizer交互项的检验结果 tk_interact_res <- tk_arbuscular[["pesticide:fertilizer"]] # 提取校正后p值,保留两两组合的名称 adj_p <- tk_interact_res[, "p adj"] names(adj_p) <- rownames(tk_interact_res)
- 生成CLD分组字母
以0.05为显著性阈值生成分组字母:
# 生成CLD结果 cld_output <- multcompLetters(adj_p, threshold = 0.05) # 转换为数据框方便后续合并 cld_df <- data.frame( group = names(cld_output$Letters), cld = as.character(cld_output$Letters), stringsAsFactors = FALSE )
- 合并均值数据用于ggplot绘图
先计算各处理组的均值,再和CLD结果合并:
# 计算各交互组的均值 group_mean_df <- aggregate(arbuscular_count ~ pesticide + fertilizer, data = main_trial, FUN = mean) # 生成和CLD结果匹配的组名列 group_mean_df$group <- paste(group_mean_df$pesticide, group_mean_df$fertilizer, sep = ":") # 合并均值与CLD字母 plot_df <- merge(group_mean_df, cld_df, by = "group")
- ggplot整合CLD示例
library(ggplot2) ggplot(plot_df, aes(x = interaction(pesticide, fertilizer), y = arbuscular_count)) + geom_col(fill = "#80b1d3", width = 0.7) + geom_text(aes(label = cld), vjust = -0.3, size = 3.5) + labs(x = "农药×施肥处理", y = "丛枝结构计数") + theme_bw()
补充说明
你之前观察到的emmeans和TukeyHSD结果的微小差异,通常来自两者默认的自由度计算、边缘均值估计规则的细微区别,本方案完全基于你已输出的TukeyHSD校正p值计算,和你已撰写的结果部分完全一致。
内容的提问来源于stack exchange,提问作者Celina Steffani
相关产品推荐
相关产品推荐

