如何在数据集列表上拟合R语言lm()函数并获取各自系数?
批量拟合回归并提取系数方案
完全可以用apply系列函数解决这个问题,其中lapply最适合处理列表对象,能对拆分后的每个子数据框批量执行回归拟合和系数提取操作。
具体步骤:
- 定义自定义函数,输入单个数据框,拟合指定回归方程后返回系数
- 用
lapply遍历拆分后的列表Splitted_df,对每个子数据框应用该函数 - 可选:将返回的系数列表整理成结构化数据框,方便后续分析
完整代码示例:
# 你的模拟数据代码 α <- 6 ß_1 <- 0.5 ß_2 <- 0.1 X_i <- rnorm(n = 100000, mean = 5, sd = 2) X_i_squared <- X_i^2 e_i <- rnorm(n = 100000, mean = 0, sd = 1) Y_i <- α + ß_1*X_i + ß_2*X_i_squared + e_i df <- data.frame(Y_i, X_i, X_i_squared, e_i) Splitted_df <- split(df, rep(1:1000, each = 100)) # 定义提取回归系数的函数 get_reg_coefs <- function(sub_df) { # 拟合回归方程 model <- lm(Y_i ~ X_i + X_i_squared, data = sub_df) # 提取系数(包含截距项) coef(model) } # 批量处理所有子数据框 coefs_list <- lapply(Splitted_df, get_reg_coefs) # 可选:将系数列表转换为数据框,每行对应一个子数据框的系数 coefs_df <- do.call(rbind, coefs_list) # 给列名重命名更清晰 colnames(coefs_df) <- c("截距项", "X_i系数", "X_i_squared系数")
补充说明:
- 如果追求更快运算速度,可考虑
purrr包的map系列函数(语法更简洁)或data.table包的分组操作,但lapply是基础R里最直接的方案 coefs_df的每一行对应拆分后第k个数据框的回归系数,可直接查看、统计系数的分布情况
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

