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

如何以y1为因变量、y2/y3等为自变量执行多滚动回归?

嘿,我来帮你把滚动回归扩展到多组自变量上!你已经搞定了y1和y2的单组情况,接下来只需要把逻辑改成循环遍历每个目标自变量就行,不用重复写冗余代码啦。

多组滚动回归实现方案

1. 完整可运行代码

基于你提供的示例数据结构,直接用这段代码就能实现y1分别和y2-y6的独立滚动回归:

library(xts)
library(zoo)

# 生成可复现的示例数据
set.seed(123)
df <- data.frame(y1=rnorm(300),y2=rnorm(300),y3=rnorm(300),y4=rnorm(300),y5=rnorm(300),y6=rnorm(300))
data <- xts(df, Sys.Date()-300:1)

# 提取需要循环的自变量列表(排除因变量y1)
independents <- colnames(df)[-1]

# 创建列表存储每组回归的滚动系数结果
rolling_results <- list()

# 循环处理每个自变量
for (var in independents) {
  # 动态构建回归公式:y1 ~ 当前自变量
  formula_str <- paste("y1 ~", var)
  # 执行滚动回归,注意设置by.column=FALSE(需要整行数据拟合模型)
  rolling_coefs <- rollapply(zoo(data), 
                             width=20, 
                             FUN = function(Z) {
                               model <- lm(formula = formula_str, data = as.data.frame(Z), na.rm = TRUE)
                               return(model$coef)
                             },
                             by.column = FALSE)
  # 用自变量名作为键,把结果存入列表
  rolling_results[[var]] <- rolling_coefs
}

# 查看y2的滚动系数前几行验证结果
head(rolling_results[["y2"]])

2. 关键细节说明

  • 动态公式构建:用paste()拼接公式字符串,自动生成y1~y2、y1~y3等不同的回归公式,避免手动重复编写。
  • by.column=FALSE:这个参数一定要设置!rollapply默认按列处理数据,但我们需要每次取20行的完整数据框来拟合lm模型,不设置会直接报错。
  • 结果存储:用列表保存每组回归的系数,后续你可以随时提取任意一组的结果,比如rolling_results[["y4"]]就能拿到y1和y4的滚动回归系数。

3. 可选:合并结果为统一数据框

如果想把所有滚动系数整合到一个直观的xts对象里,加这段代码即可:

# 合并所有结果并对齐日期
combined_results <- do.call(cbind, rolling_results)
# 重命名列,让含义更清晰
colnames(combined_results) <- paste(rep(independents, each=2), c("截距", "系数"), sep="_")
# 查看合并后的结果
head(combined_results)

这样你会得到一个每列对应“自变量_截距”“自变量_系数”的数据集,日期完全对齐,方便后续分析或可视化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:59