R语言匹配df1与df2列名批量运行线性回归的通用实现方法
通用化线性回归实现方案
以下提供两种常用的简洁实现方式,均可以自动匹配变量、批量拟合所有符合要求的回归模型:
基础R实现
不需要加载额外依赖,直接通过循环实现:
# 提取df1所有响应变量列名 resp_cols <- colnames(df1) # 初始化结果存储列表 lm_results <- list() for (resp in resp_cols) { # 筛选df2中列名包含当前响应变量名的所有预测列 pred_cols <- grep(resp, colnames(df2), value = TRUE) # 无匹配列则跳过 if (length(pred_cols) == 0) next # 逐个拟合线性回归 for (pred in pred_cols) { # 构造回归公式 fit_formula <- as.formula(paste0("df1[['", resp, "']] ~ df2[['", pred, "']]")) # 用回归关系作为结果的命名,方便后续查询 model_key <- paste0(resp, " ~ ", pred) lm_results[[model_key]] <- lm(fit_formula) } } # 示例:查看指定模型结果 lm_results[["Escuelas_Aguirre ~ Escuelas_Aguirre vs Retiro"]]
tidyverse风格实现
使用purrr包的迭代函数,代码更简洁易读:
library(purrr) lm_results <- set_names(colnames(df1)) %>% map(function(resp) { # 筛选匹配的预测列 pred_cols <- grep(resp, colnames(df2), value = TRUE) # 对每个匹配的预测列拟合回归 map(set_names(pred_cols), ~ lm(df1[[resp]] ~ df2[[.x]])) }) %>% # 扁平化列表,方便统一管理所有模型 flatten()
批量提取拟合指标
如果需要批量导出所有模型的系数、R方等指标,可以搭配broom包实现:
library(broom) library(dplyr) # 提取所有模型的系数显著性表 coef_table <- map_dfr(lm_results, tidy, .id = "model") # 提取所有模型的拟合优度等整体指标 fit_index_table <- map_dfr(lm_results, glance, .id = "model")
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

