rollapply lm 时可变长度不同的错误

问题描述

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

    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,数据 = 因子,: 可变长度不同(发现'MKT')”

我已尝试通过在线搜索解决该问题,但找不到包含类似问题的帖子。任何人都可以帮忙吗?谢谢!

解决方法

由于错误消息表明变量的长度不同,这意味着您在长度为 24 (x) 的函数中传递 width 而使用具有 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)))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...