如何从DataFrame批量创建多个线性回归模型?
批量创建单变量线性回归模型
示例数据
首先是你提供的模拟数据:
x1 <- rnorm(30, mean = 1, sd = 1) x2 <- rnorm(30, mean = 1, sd = 2) x3 <- rnorm(30, mean = 1, sd = 3) eps <- rnorm(30) y <- 2+x1+3*x2+x3+eps df <- data.frame(x1,x2,x3,y)
问题分析
你尝试用purrr::map或lapply直接遍历数据框列拟合模型,但这类写法存在问题:遍历列时传入的是单独的向量,lm无法在当前环境中关联到y,且会错误地对y列也拟合模型,达不到你想要的y~x1、y~x2、y~x3模型列表效果。
正确解法
方法1:tidyverse(purrr)风格
通过提取自变量列名,动态构建公式来拟合模型:
library(purrr) # 筛选出自变量列名(排除y) x_cols <- setdiff(names(df), "y") # 遍历列名,逐个拟合模型 model_list <- map(x_cols, ~lm(as.formula(paste("y ~", .x)), data = df)) # 给列表元素命名(可选,方便后续调用) names(model_list) <- x_cols
方法2:base R风格
用lapply结合匿名函数实现同样效果:
x_cols <- setdiff(names(df), "y") model_list <- lapply(x_cols, function(col) { lm(formula = paste("y ~", col), data = df) }) names(model_list) <- x_cols
验证结果
运行后model_list的结构和你手动创建的完全一致,比如可以通过model_list$x1查看第一个模型的结果。
内容的提问来源于stack exchange,提问作者AColoredReptile
相关产品推荐
相关产品推荐

