基于嵌套数据框(nested dataframe/tibble)运行多组simple linear regression提取系数问询
没问题!我来帮你搞定嵌套数据框里的多组简单线性回归,还能用tidy()把系数整理成整洁的数据框。咱们用tidyverse家族的工具(dplyr、purrr、broom)来实现,一步步来:
1. 先加载需要的包
首先得把要用的包装上并加载,这些包能帮我们处理嵌套数据、运行回归、整理结果:
library(tidyverse) library(broom)
2. 准备并嵌套你的数据
咱们用经典的mtcars数据集做演示——假设我们想按气缸数(cyl)分组,然后在每个组里,分别用disp、hp、drat这几个自变量和因变量mpg做简单线性回归。先把数据按cyl嵌套:
nested_data <- mtcars %>% group_by(cyl) %>% nest()
运行完后,nested_data会是一个嵌套 tibble:每一行对应一个cyl组,data列里是该组对应的子数据框。
3. 在嵌套数据中运行多组回归并整理结果
核心步骤来了!我们要遍历每个嵌套的子数据框,对每个自变量分别跑回归,再用tidy()把模型系数转成数据框:
reg_results <- nested_data %>% mutate( # 对每个嵌套的子数据框,生成多组回归的tidy结果 regression_results = map(data, function(sub_df) { # 定义要用来做回归的自变量列表 predictors <- c("disp", "hp", "drat") # 遍历每个自变量,跑回归并整理结果 map_dfr(predictors, function(pred_col) { # 动态生成回归公式(比如 mpg ~ disp) lm_formula <- as.formula(paste("mpg ~", pred_col)) # 运行回归 + 用tidy()转成数据框 + 标记自变量名称 lm(lm_formula, data = sub_df) %>% tidy() %>% mutate(predictor = pred_col) }) }) ) %>% # 把嵌套的回归结果展开成普通列 unnest(regression_results) %>% # 调整列顺序,让结果更易读 select(cyl, predictor, term, estimate, std.error, statistic, p.value)
代码解释:
map(data, ...):遍历每个嵌套的子数据框,对每个子框单独处理。map_dfr(predictors, ...):遍历每个自变量,为每个自变量生成一个回归模型,并用map_dfr把所有结果合并成一个数据框。as.formula(paste("mpg ~", pred_col)):动态构建回归公式,避免手动写多个重复的lm(mpg ~ disp, ...)、lm(mpg ~ hp, ...)。tidy():把lm模型的系数、标准误、p值等统计量转换成整洁的 tibble 格式。unnest():把嵌套在regression_results里的结果展开,变成一行一个回归系数的结构。
4. 查看最终结果
运行完上面的代码后,reg_results就是你要的整洁数据框啦!它会包含每个分组(cyl)、每个自变量(predictor)、回归项(截距/自变量)、系数估计值、标准误等信息,示例输出大概是这样:
# A tibble: 18 × 7 cyl predictor term estimate std.error statistic p.value <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> 1 6 disp (Intercept) 19.1 3.11 6.14 0.00129 2 6 disp disp -0.0196 0.0101 -1.94 0.0938 3 6 hp (Intercept) 28.4 4.29 6.62 0.000864 4 6 hp hp -0.0821 0.0290 -2.83 0.0296 5 6 drat (Intercept) 5.08 10.1 0.503 0.633 6 6 drat drat 2.78 2.47 1.12 0.302 ...
小技巧
如果你的自变量很多,不想手动列出来,可以用代码自动获取所有自变量列:
# 假设因变量是mpg,分组变量是cyl,剩下的都是自变量 predictors <- names(sub_df)[!names(sub_df) %in% c("mpg", "cyl")]
这样不管有多少个自变量,都能自动批量处理。
内容的提问来源于stack exchange,提问作者Balamurali N.R
相关产品推荐
相关产品推荐

