如何在R中循环使用CLD函数处理多变量ANOVA与Tukey结果?
批量生成CLD并绘制带标记的箱线图
假设你已经有了对应每个变量的aov_res(ANOVA结果列表)和tukey_res(Tukey HSD检验结果列表),可以通过以下步骤批量生成CLD并整合到绘图数据中:
1. 批量生成CLD标记
使用mapply配对处理aov_res和tukey_res的对应元素,调用multcompView::multcompLetters4生成每个变量的CLD:
library(multcompView) library(dplyr) library(tidyr) # 批量生成CLD并整理为数据框 cld_list <- mapply(function(aov_obj, tukey_obj) { # 生成CLD cld_result <- multcompLetters4(aov_obj, tukey_obj) # 提取字母标记并转换为数据框 as.data.frame(cld_result[[1]]) %>% rownames_to_column("Treat") %>% rename(CLD = Letters) }, aov_res, tukey_res, SIMPLIFY = FALSE) # 合并所有变量的CLD结果,添加变量名标识 cld_all <- bind_rows(cld_list, .id = "Variable")
2. 绘制带CLD的箱线图
将原始宽格式数据转换为长格式,结合CLD数据绘制分面箱线图:
library(ggplot2) # 原始数据转长格式 df_long <- pivot_longer(df, -Treat, names_to = "Variable", values_to = "Value") # 绘制箱线图并添加CLD标记 ggplot(df_long, aes(x = Treat, y = Value)) + geom_boxplot(fill = "#69b3a2", alpha = 0.7) + facet_wrap(~ Variable, scales = "free_y") + # 将CLD标记放在箱线图顶部 geom_text(data = cld_all, aes(x = Treat, y = Inf, label = CLD), vjust = 1.2, size = 4, fontface = "bold") + theme_bw() + labs(x = "处理组", y = "指标值")
关键说明
mapply会同步遍历aov_res和tukey_res的对应元素,确保每个变量的ANOVA和Tukey结果正确配对。multcompLetters4返回的结果中,第一个元素是各处理组的字母标记,需提取后整理为数据框格式。- 绘图时通过
geom_text将CLD标记定位在箱线图的顶部,vjust参数可调整标记与箱线图的距离。
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

