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

如何对数据框按公司分组取各日期[-50,-10]区间计算回归截距和beta

滚动窗口回归实现方案

你需要的是按公司分组的偏移滚动窗口回归,我们可以结合data.table的分组运算和zoo的rollapply函数实现需求,完整操作步骤如下:

首先先确保数据按公司和日期排序,避免时序错乱:

# 按公司、日期排序,保证时序正确
setkey(stocks, Company, date)

然后自定义回归函数,处理窗口长度不足的边界情况:

# 自定义回归函数,输入对应窗口的Return和indexfactor,返回截距和beta
roll_reg <- function(data) {
  # data是两列的矩阵,第一列Return,第二列indexfactor
  fit <- lm(Return ~ indexfactor, data = as.data.frame(data))
  return(coef(fit))
}

最后执行分组滚动计算,把结果写入新列:

# 按公司分组执行滚动回归
stocks[, c("intercept", "beta") := {
  # 合并当前组的Return和indexfactor为矩阵
  mat <- cbind(Return, indexfactor)
  # 滚动窗口设置:取当前行之前偏移-50到-10的观测,共41个样本点
  res <- rollapply(mat, width = list(seq(-50, -10)), FUN = roll_reg, 
                   by.column = FALSE, align = "right", fill = NA)
  as.data.table(res)
}, by = Company]

关键参数说明

  • width = list(seq(-50, -10)):指定窗口取当前行的前50个到前10个观测,刚好匹配你要求的区间
  • by.column = FALSE:表示把整段窗口的多列数据一起传入自定义函数,而不是按列单独计算
  • fill = NA:如果当前行之前的观测数不足50个,无法取到有效回归区间时,对应字段返回NA
  • 回归结果的两列会自动映射到新增的intercept(截距)和beta(indexfactor系数)字段

内容的提问来源于stack exchange,提问作者thomas.diridondo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:24:05