如何在R中遍历dataframe按分组运行多元回归?
R 分组多元回归实现方案
两种常用实现方式如下,核心逻辑均为先按指定字段拆分数据集,再对每个子集迭代拟合回归,无需手动编写for循环处理分组逻辑:
方案1:tidyverse 生态实现(代码简洁,结果易规整)
该方案使用purrr包的map函数实现迭代(本质是优化版的lapply),配合broom包可直接输出规整的回归结果数据框:
# 加载依赖包 library(tidyverse) library(broom) # 分组拟合回归 reg_results <- your_data %>% group_by(Category, Zone, Season) %>% nest() %>% mutate( # 对每个分组拟合多元回归 reg_model = map(data, ~ lm(Value ~ P1 + P2 + P3, data = .x)), # 提取回归系数、p值、标准误等指标 coef_info = map(reg_model, tidy), # 提取R方、F值、残差自由度等模型拟合指标 fit_info = map(reg_model, glance) ) # 展开为系数结果数据框 coef_df <- reg_results %>% unnest(coef_info) # 展开为拟合指标数据框 fit_df <- reg_results %>% unnest(fit_info)
方案2:base R 原生lapply实现(无需额外安装依赖包)
# 按三个分组字段拆分数据集为列表,drop=TRUE自动过滤不存在的空分组 group_list <- split(your_data, list(your_data$Category, your_data$Zone, your_data$Season), drop = TRUE) # 迭代每个分组拟合回归 model_list <- lapply(group_list, function(sub_df) { lm(Value ~ P1 + P2 + P3, data = sub_df) }) # 查看指定分组的回归结果示例 summary(model_list[["Blue.D1.Winter"]])
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

