使用gtsummary处理aov()输出遇报错,求解决方案及结果美化
问题解答
1. 错误信息解读
tbl_summary()的核心功能是汇总原始数据集的描述性统计,仅接受数据框(data frame)作为输入。你传入的是aov()生成的模型对象(类为aov/lm),函数内部尝试调用ungroup()处理数据,但模型对象不支持该方法,因此抛出no applicable method for 'ungroup' applied to an object of class "c('aov', 'lm')"错误。
2. 实现发表级美观输出
gtsummary包针对模型结果提供了专门的函数,针对方差分析场景,推荐以下两种方案:
方案1:生成标准方差分析表格
使用tbl_anova()直接处理aov模型对象,输出包含自由度、F值、P值的专业格式表格,支持自定义美化:
library(tidyverse) library(gtsummary) # 拟合方差分析模型 aov_model <- aov(data = chickwts, formula = weight ~ feed) # 生成发表级表格 tbl_anova(aov_model) %>% modify_caption("表1:不同饲料对小鸡体重影响的单因素方差分析结果") %>% bold_labels() %>% # 加粗变量标签 modify_header(p.value = "**P值**") # 自定义表头
方案2:添加事后多重比较结果
如果需要展示组间两两对比的结果,结合emmeans包和tbl_emmeans()实现:
library(emmeans) # 拟合模型并执行事后多重比较 emmeans_model <- emmeans(aov_model, pairwise ~ feed) # 转换为美观表格 tbl_emmeans(emmeans_model) %>% modify_caption("表2:不同饲料组小鸡体重的事后多重比较结果") %>% adjust_pvalue(method = "tukey") # 指定校正方法
补充:正确使用tbl_summary()
如果需要生成不同饲料组的体重描述性统计表格(这才是tbl_summary()的适用场景),可以这样写:
chickwts %>% tbl_summary(by = feed, include = weight) %>% modify_caption("表3:不同饲料组小鸡体重的描述性统计") %>% add_p(test = weight ~ "aov") # 在描述表中附加方差分析P值
内容的提问来源于stack exchange,提问作者Indy
相关产品推荐
相关产品推荐

