我正在尝试使用具有一个内生变量和一个外生变量的VECM来预测时间序列(理想情况下,两个变量都是ex。但这似乎是不可能的),但仍然会遇到错误。我有169个时间序列,我试图用前140周来预测后29周。请看下面的代码:
#VECM with exogenous F
#read F and W matrix
Ffactor <- read_excel("FFactor.xlsx", col_names = FALSE)
Wfactor <- read_excel("Wmatrix.xlsx", col_names = FALSE)
Sales<-read_excel("SALES.xlsx")
Wfactor$mean <- rowMeans(Wfactor)
KC_model <- cbind(Sales$UnitSalesKC[1:169], Wfactor$mean)
F140 <- as.data.frame(Ffactor[1:140,])
for (i in 1:1000)
{
colnames(F140)[i]<-"f"
}
KC140 <- as.data.frame(KC_model[1:140,])
vecm <- ca.jo(KC140,type = "eigen", ecdet = "const", K = 2, dumvar = F140[1:140,1])
varr <- vec2var(vecm, r=1)#should be 2 because of 2nd order cointegration but it had to be 1
dumvar <- Ffactor[141:169,]
dumvar1 <- as.matrix(dumvar)
predictions <- predict(varr, dumvar=dumvar1[1:29], n.ahead=29)
predictions <- predict(varr, dumvar=dumvar1[1:29], n.ahead=29)运行第一个预测结果: predict.vec2var(varr,dumvar = dumvar1:29,1,n.ahead = 29)中的错误:'dumvar‘的列名与'object$datamat’中的列名不匹配。
运行第二个命令会给出: predict.vec2var(varr,dumvar = dumvar11:29,1,n.ahead = 29)中的错误:'dumvar‘的行数不等于’n.head‘。
但是,调用nrow(dumvar)会产生29。
我之前得到的错误告诉我dumvar应该是一个矩阵,数字或向量,这就是为什么我把它转换成一个矩阵。以下是运行上述代码所需的所有数据的示例。
#head of KC_model
1 125489.0 -0.427423755
2 115475.0 -0.590675518
3 124298.0 -0.561800218
4 128443.0 -0.785542240
5 120610.0 -0.750909402
#head of FFactor
1 -0.251
2 -0.0169
3 -0.0434
4 -0.0643
5 0.0215发布于 2021-04-12 16:34:10
试试这个:
predictions <- predict(varr, dumvar=as.matrix.data.frame(F140[1:140,1]), n.ahead=29)这对我很管用。
https://stackoverflow.com/questions/50723952
复制相似问题