【问题标题】:variable lengths differ error when rollapply lmrollapply lm时可变长度不同错误
【发布时间】:2021-02-10 06:44:01
【问题描述】:

我正在尝试对多个时间序列运行滚动窗口回归,但遇到了这个奇怪的问题。以下代码重现了我的数据。我有一个包含名为“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 函数时,我收到了错误消息

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

“model.frame.default 中的错误(公式 = x ~ MKT + SMB + HML,数据 = 因子,: 可变长度不同(为 'MKT' 找到)"

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

【问题讨论】:

    标签: r lm rollapply


    【解决方案1】:

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

    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)))
    

    【讨论】:

    • 感谢 Ronak,它解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2015-06-08
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多