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

如何修改R语言滑动窗口CAPM代码以获取全部回归系数

修改滑动窗口多因子回归代码以获取全部系数

原代码基于tidy finance实现滑动窗口FF三因子模型(你标注为CAPM,但实际包含hml、smb因子)估计,但仅返回mkt_excess的单个系数。现需要修改代码,输出回归模型中的截距(alpha)、mkt_excess、hml、smb全部四个系数。

修改后的完整代码

# 单窗口FF三因子系数估计函数:返回所有系数
estimate_ff3 <- function(data, min_obs = 1) {
  if (nrow(data) < min_obs) {
    # 观测数不足时返回含NA的系数行,保证结构一致
    return(tibble(
      alpha = NA_real_,
      beta_mkt = NA_real_,
      beta_hml = NA_real_,
      beta_smb = NA_real_
    ))
  } else {
    fit <- lm(excess_returns ~ mkt_excess + hml + smb, data = data)
    # 提取所有系数并整理为结构化输出
    coefs <- coefficients(fit)
    return(tibble(
      alpha = coefs[1],
      beta_mkt = coefs[2],
      beta_hml = coefs[3],
      beta_smb = coefs[4]
    ))
  }
}

# 滚动窗口FF三因子估计函数
roll_ff3_estimation <- function(data, months, min_obs) {
  data <- data |>
    arrange(date)
  
  # 使用slide_period而非slide_period_vec,支持多列数据输出
  coefs_roll <- slide_period(
    .x = data,
    .i = data$date,
    .period = "month",
    .f = ~ estimate_ff3(., min_obs),
    .before = months - 1,
    .complete = FALSE
  ) |>
    bind_rows() # 将每个窗口的结果合并为完整数据框
  
  # 绑定日期列并返回最终结果
  return(tibble(
    month = unique(data$date),
    coefs_roll
  ))
}

关键修改说明

  • 单窗口函数输出结构化结果:不再返回单个数值,而是返回包含所有系数的tibble,观测数不足时返回对应NA值,确保每个窗口的输出结构统一
  • 替换滚动窗口工具:slide_period_vec仅支持返回向量,改用slide_period处理多列数据输出需求
  • 结果合并优化:通过bind_rows()将各窗口的系数结果合并为完整数据框,再与日期列绑定,生成时间序列格式的系数表

修改后输出示例

SectorsDatealphabeta_mktbeta_hmlbeta_smb
industrials2010-01-010.00521.20840.31200.1056
industrials2010-02-010.00481.20860.30920.1071
..................

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:54