rollapply lm 时可变长度不同错误

variable lengths differ error when rollapply lm

我正在尝试 运行 对多个时间序列进行滚动 window 回归,但遇到了这个奇怪的问题。以下代码重现我的数据。我有一个包含名为“rt”的 returns 的数据框和一个包含名为“因素”的因素的数据框。然后我生成一个函数来获取回归常数变量。

    mat<-as.data.frame(matrix(runif(88*6), nrow = 88, ncol = 6))



    colnames(mat)<-c("MKT","SMB","HML","AA","BB","CC")
    rt<-mat[,c(4,6)]
    factors<-mat[,c(1:3)]

    coeffstat_alpha<-function(x){
      fit<-lm(x~MKT+SMB+HML,data=factors,na.action=na.omit)
      nn<-c(t(coeftest(fit)))[1]

      return(nn)

    }

当我运行这个函数在整个样本上时,它起作用了。

    apply(rt,2,FUN=coeffstat_alpha)

但是当我滚动应用函数时,我收到了错误信息

    rollapply(reg[,1],width=24,FUN=coeffstat_alpha,by=1,align="left")

”错误 model.frame.default(公式 = x ~ MKT + SMB + HML, data = factors, : 可变长度不同(为 'MKT' 找到)"

我试图通过在线搜索解决问题,但找不到 post 有类似问题的人。谁能帮忙?谢谢!

由于错误消息表明变量的长度不同,这意味着您在长度为 24 (width) 的函数中传递 x,而使用具有 88 的 factors 矩阵其中的行。对于 运行,您需要 xfactor 的长度相等。您可以将函数更改为

library(lmtest)

coeffstat_alpha<-function(x){
  fit<-lm(rt[x, 1]~MKT+SMB+HML,data=factors[x, ],na.action=na.omit)
  nn<-c(t(coeftest(fit)))[1]
  return(nn)
}

并使用 sapply 作为 :

sapply(1:(nrow(rt)-23), function(x) coeffstat_alpha(x:(x+23)))