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

R语言中使用For循环实现CAPM模型回归并批量存储结果

CAPM模型批量回归实现方案

你需要拟合的CAPM回归公式为 Ri = α + β×(rmrf) + ε,对XS1到XS10共10个被解释变量分别完成回归并存储结果,可以参考以下两种主流开发语言的实现方案:


Python 实现(基于pandas + statsmodels)

先安装对应依赖:pip install pandas statsmodels numpy

  • 步骤1:导入依赖并加载数据
import pandas as pd
import statsmodels.api as sm
import numpy as np

# 替换为你的数据路径,数据需包含rmrf列和XS1~XS10共11列核心字段
df = pd.read_csv("你的本地数据路径.csv")
  • 步骤2:批量拟合回归并存储结果
# 为自变量添加常数项,对应公式中的截距α
X = sm.add_constant(df['rmrf'])
# 存储完整回归对象的字典,可随时调取单个回归的全部指标
reg_result_objs = {}
# 存储核心指标的汇总表,方便直接导出查看
summary_df = pd.DataFrame(columns=['被解释变量', '截距α', 'α显著性p值', 'β系数', 'β显著性p值', 'R平方', '调整R平方'])

for seq_id in range(1, 11):
    y_col = f"XS{seq_id}"
    y = df[y_col]
    # 拟合OLS回归
    model = sm.OLS(y, X).fit()
    # 存储完整回归对象
    reg_result_objs[y_col] = model
    # 提取核心指标写入汇总表
    summary_df.loc[len(summary_df)] = [
        y_col,
        round(model.params['const'], 6),
        round(model.pvalues['const'], 6),
        round(model.params['rmrf'], 6),
        round(model.pvalues['rmrf'], 6),
        round(model.rsquared, 6),
        round(model.rsquared_adj, 6)
    ]
  • 步骤3:导出结果到本地
# 导出核心指标汇总表
summary_df.to_csv("CAPM批量回归汇总结果.csv", index=False, encoding='utf-8-sig')
# 可单独导出单个序列的完整回归报告,例如下方导出XS1的完整回归结果
with open("XS1_CAPM回归详细报告.txt", "w") as f:
    f.write(reg_result_objs['XS1'].summary().as_text())

R 实现(基于tidyverse + broom)

  • 步骤1:导入依赖并加载数据
library(tidyverse)
library(broom)

# 替换为你的本地数据路径
df <- read.csv("你的本地数据路径.csv")
  • 步骤2:批量拟合回归并存储结果
# 构造10组回归公式
formula_list <- paste0("XS", 1:10, " ~ rmrf") %>% map(as.formula)
# 批量拟合回归,存储完整回归对象
reg_result_objs <- map(formula_list, ~ lm(.x, data = df))
names(reg_result_objs) <- paste0("XS", 1:10)

# 提取核心指标生成汇总表
summary_df <- map_dfr(reg_result_objs, ~ tidy(.x) %>% 
                        pivot_wider(names_from = term, values_from = estimate:p.value) %>% 
                        mutate(
                          rsquared = summary(.x)$r.squared,
                          adj_rsquared = summary(.x)$adj.r.squared
                        ),
                      .id = "被解释变量")
  • 步骤3:导出结果到本地
# 导出核心指标汇总表
write.csv(summary_df, "CAPM批量回归汇总结果.csv", row.names = FALSE, fileEncoding = "utf-8")
# 导出单个序列的完整回归报告,例如下方导出XS1的完整结果
sink("XS1_CAPM回归详细报告.txt")
summary(reg_result_objs[["XS1"]])
sink()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:03