You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45