如何更便捷提取lm()系数并添加分组信息与调整R平方值
优化方案:自动添加分组信息与调整R方
不用手动输入向量,我们可以在分组建模的过程中直接整合分组信息和模型的调整R方,以下是几种更便捷的实现方式:
方法1:使用group_modify(推荐,更简洁)
group_modify会自动保留分组列,无需手动添加,同时可以在每个分组内完成模型拟合、系数提取和统计量整合:
library(dplyr) library(broom) models <- iris %>% group_by(Species) %>% group_modify(function(.x, .y) { # 拟合线性模型 mod <- lm(Petal.Length ~ Sepal.Length, data = .x) # 提取系数表,并添加调整R方 broom::tidy(mod) %>% mutate(Adjusted_R_squared = broom::glance(mod)$adj.r.squared) }) %>% ungroup() # 可选:取消数据框的分组状态
方法2:使用group_map结合分组键
group_map可以通过.y参数获取当前分组的键值,以此自动添加分组信息:
library(dplyr) library(broom) library(data.table) models <- iris %>% group_by(Species) %>% group_map(function(.x, .y) { mod <- lm(Petal.Length ~ Sepal.Length, data = .x) # 合并系数表、分组信息和调整R方 data.table( broom::tidy(mod), Species = .y$Species, Adjusted_R_squared = broom::glance(mod)$adj.r.squared ) }) %>% rbindlist()
核心优势
- 避免手动输入分组名和统计量的错误,尤其当分组数量较多时
- 代码更连贯,建模与结果整合一步完成
- 自动同步分组与模型结果,保证数据一致性
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

