我正在尝试使用具有一个内生变量和一个外生变量的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 = dumvar [1:29,1],n.ahead = 29): 'dumvar'的列名与'object $ datamat'中的列名不匹配。
运行第二个给出:predict.vec2var中的错误(varr,dumvar = dumvar1 [1:29,1],n.ahead = 29): 'dumvar'的行数不等于'n.ahead'。
但是,调用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
答案 0 :(得分:0)
试试这个:
predictions <- predict(varr, dumvar=as.matrix.data.frame(F140[1:140,1]), n.ahead=29)
它对我有用。