如何修改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()将各窗口的系数结果合并为完整数据框,再与日期列绑定,生成时间序列格式的系数表
修改后输出示例
| Sectors | Date | alpha | beta_mkt | beta_hml | beta_smb |
|---|---|---|---|---|---|
| industrials | 2010-01-01 | 0.0052 | 1.2084 | 0.3120 | 0.1056 |
| industrials | 2010-02-01 | 0.0048 | 1.2086 | 0.3092 | 0.1071 |
| ... | ... | ... | ... | ... | ... |
内容的提问来源于stack exchange,提问作者MANDAR PHATAK
相关产品推荐
相关产品推荐

