R语言批量对多个dataframe执行回归的for循环问题求解
原代码错误点
- 不需要用
lapply遍历dataframe每一列做回归,每个dataframe仅需拟合1次三因子模型即可 - R中
append()函数不会修改原列表,需要将执行结果重新赋值给存储列表才会生效 - 建议给列表设置对应名称,方便后续快速匹配每只标的的回归结果
修改后可运行代码
dflist <- list(cvx,csco,trv,unh,gs,nke,v,aapl,wba) # 给列表元素命名,后续直接用标的名调取结果 names(dflist) <- c("cvx","csco","trv","unh","gs","nke","v","aapl","wba") # 初始化两个存储列表,分别存完整回归摘要、系数结果 fama_summaries <- list() fama_coefs <- list() for (name in names(dflist)) { df <- dflist[[name]] # 计算回归所需变量 ri_rf <- df[,1] - df[,5] capm <- df[,2] - df[,5] # 拟合三因子模型 fama_model <- lm(ri_rf ~ smb + hml + capm, data = df) # 分别存储摘要和系数 fama_summaries[[name]] <- summary(fama_model) fama_coefs[[name]] <- coef(fama_model) }
结果调用方式
- 查看单标的完整回归结果:
fama_summaries[["aapl"]] - 提取单标的显著性检验系数矩阵:
fama_summaries[["aapl"]]$coefficients - 合并所有标的的系数为统一数据框:
do.call(rbind, fama_coefs)
内容的提问来源于stack exchange,提问作者Melody
相关产品推荐
相关产品推荐

