如何单独获取每个物种对应的ANOVA方差分析检验的汇总统计结果
解决方案
首先你现有代码存在一个逻辑问题:do()函数内调用aov()时指定的data = Isotopes是全局未分组的数据集,会导致每个物种对应的模型都用了全量数据,分组失效,需要先把这里改为data = . 调用分组后的子集。
方法1:使用broom包输出结构化汇总结果(推荐,方便后续导出/分析)
broom是tidyverse生态下专门整理统计模型输出的包,可以直接把ANOVA结果转为规整的数据框:
# 加载所需包 library(dplyr) library(broom) # 修正分组建模逻辑 Anova <- Isotopes %>% group_by(Species) %>% do(model = aov(d15N~Season+Location, data = .)) # 提取每个物种的ANOVA方差分析表 anova_result <- Anova %>% summarize( Species = Species, tidy(model) ) # 提取每个物种的模型整体拟合指标(如R方、p值等) model_fit <- Anova %>% summarize( Species = Species, glance(model) )
你可以直接查看anova_result得到每个物种对应每个自变量的自由度、F值、p值等统计量,查看model_fit得到每个物种模型的整体拟合结果。
方法2:使用基础R函数直接打印每个物种的汇总结果
如果你不想安装额外包,可以直接遍历模型列表调用基础R的summary()函数:
# 先修正建模代码 Anova <- Isotopes %>% group_by(Species) %>% do(model = aov(d15N~Season+Location, data = .)) # 逐个打印每个物种的ANOVA汇总 species_list <- unique(Isotopes$Species) for (i in seq_along(species_list)) { cat("===== 物种:", species_list[i], "的ANOVA结果 =====\n") print(summary(Anova$model[[i]])) cat("\n") }
内容的提问来源于stack exchange,提问作者Suusie
相关产品推荐
相关产品推荐

