如何对多变量dataframe列表使用for循环逐份执行回归分析
R语言多DataFrame批量回归实现方案
前置语法修正
你现有的代码存在两处语法错误,先修正后再执行回归:
- 存储多个dataframe需要使用
list()而非c(),修正后的列表创建代码:
可选操作:给列表元素添加对应股票名,方便后续匹配回归结果:dflist = list(cvx,csco,trv,unh,gs,nke,v,aapl,wba)names(dflist) = c("cvx","csco","trv","unh","gs","nke","v","aapl","wba") - lm函数的多变量回归公式需要用
+拼接自变量,而非逗号分隔,正确的公式写法:ri_rf ~ smb + hml + capm
方案1:for循环实现
适合需要自定义每轮回归附加操作的场景:
# 初始化结果存储列表 lm_results = list() # 遍历所有股票数据执行回归 for (i in seq_along(dflist)) { lm_results[[i]] = lm(ri_rf ~ smb + hml + capm, data = dflist[[i]]) # 可选:实时打印回归结果概览 cat("股票", names(dflist)[i], "回归结果:\n") print(summary(lm_results[[i]])) }
执行完成后所有回归结果存在lm_results列表中,可通过下标提取单只股票的回归结果。
方案2:lapply批量实现(推荐)
更符合R语言语法风格的简洁写法:
# 批量执行回归,结果直接存入列表 lm_results = lapply(dflist, function(df) lm(ri_rf ~ smb + hml + capm, data = df)) # 批量查看所有回归的摘要结果 lapply(lm_results, summary)
后续可直接通过sapply批量提取需要的回归指标,示例如下:
# 提取所有股票回归的调整R² sapply(lm_results, function(x) summary(x)$adj.r.squared) # 提取所有股票回归的自变量系数 sapply(lm_results, coef)
内容的提问来源于stack exchange,提问作者Melody
相关产品推荐
相关产品推荐

