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
矩阵其中的行。对于 运行,您需要 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)))
我正在尝试 运行 对多个时间序列进行滚动 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
矩阵其中的行。对于 运行,您需要 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)))