如何解决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
矩阵它。为此,您需要使 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)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。