我正在尝试计算宽度为过去12个月的多个股票的滚动Beta回归 .

我有following dataset

好像:

enter image description here

我正在搜索很多帖子,但不知怎的,我没有让它为我的数据框架工作 .

func1 <- . %>% {
roll_regres.fit(x = cbind(1, .$MKT_ex),
              y = .$r_rf, width = 12L)$coefs }
out <- dt %>%
group_by(Stkcd) %>%
# make it explicit that data needs to be sorted
arrange(Date, .by_group = TRUE) %>%
do(cbind(reg_col = select(., MKT_ex, r_rf) %>% func1,
       date_col = select(., Date))) %>%
ungroup

我收到错误消息:

Error in roll_cpp(Y = y, X = x, window = width, do_compute_R_sqs = 
do_compute_R_sqs,  :     'dchdd' failed with code -1

我的目标是获得一个输出,其中包含Date,Stkcd(Stocknumber)和计算β(r_rf在MKT_ex上回归) . 我在代码中错过了什么?

我在论坛中发现了这段代码

G.格洛腾迪克

,遗憾的是它不适用于我的数据集,我无法找到原因 .

rolli <- function(ix) {
data.frame(coef = rollapplyr(ix, width = 12, function(ix) { 
     coef(lm(y ~ x, data = dat, subset = ix))[2]
  }, by = 1), Date = dt$Date[ix][1], Stkcd = dt$Stkcd[ix][1])
}
do.call("rbind", by(1:nrow(dt), dat[c("Date", "Stkcd")], rolli)