You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中批量将多列与单一向量回归并提取系数及R平方值

批量线性回归实现(适配含全NA列的数据集)

需求说明

需要对数据集中的Fund1至Fund4(包含全NA的Fund4)分别与peer_average执行线性回归,输出每个回归对应的beta系数矩阵、alpha系数矩阵、R平方矩阵,同时自动处理NA值,且支持大规模数据集的扩展。

解决方案代码

先定义单列回归处理函数过滤无效样本,再通过批量遍历实现可扩展的回归分析:

# 定义单变量回归处理函数
run_regression <- function(fund_col, peer_col) {
  # 筛选两列均非NA的有效行
  valid_rows <- !is.na(fund_col) & !is.na(peer_col)
  # 有效样本不足2时无法拟合,返回NA
  if (sum(valid_rows) < 2) {
    return(list(alpha = NA, beta = NA, r_squared = NA))
  }
  # 执行线性回归
  model <- lm(fund_col[valid_rows] ~ peer_col[valid_rows])
  # 提取回归结果
  alpha <- coef(model)[[1]]
  beta <- coef(model)[[2]]
  r_squared <- summary(model)$r.squared
  return(list(alpha = alpha, beta = beta, r_squared = r_squared))
}

# 批量执行所有Fund列的回归
fund_cols <- setdiff(colnames(test_data), "peer_average")
reg_results <- lapply(test_data[fund_cols], function(col) {
  run_regression(col, test_data$peer_average)
})

# 整理成目标输出矩阵
output_matrix1 <- matrix(sapply(reg_results, function(x) x$beta), 
                         ncol = 1, dimnames = list(fund_cols, "Beta"))
output_matrix2 <- matrix(sapply(reg_results, function(x) x$alpha), 
                         ncol = 1, dimnames = list(fund_cols, "Alpha"))
output_matrix3 <- matrix(sapply(reg_results, function(x) x$r_squared), 
                         ncol = 1, dimnames = list(fund_cols, "R_Squared"))

代码说明

  1. NA值处理:函数会先筛选出Fund列和peer_average均非NA的行,确保回归仅使用有效重叠样本;如果某列全为NA(如Fund4),有效样本数不足2,会返回NA结果,避免报错。
  2. 可扩展性:通过lapply遍历所有Fund列,无论数据集新增多少Fund列,代码都能自动适配,无需修改核心逻辑。
  3. 结果整理:最终将所有回归结果提取并整理成带列名的矩阵,方便后续分析或导出。

内容的提问来源于stack exchange,提问作者Jak Carty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:17:09