Я пытаюсь прогнозировать временные ряды, используя VECM с одной эндогенной и одной экзогенной переменной (в идеале обе будут бывшими, но это не представляется возможным), но продолжаю сталкиваться с ошибками.У меня есть 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)
Запуск первого прогноза дает: Ошибка вgnett.vec2var.(varr, dumvar = dumvar [1:29, 1], n.ahead = 29): имена столбцов 'dumvar' не совпадают с именами столбцов в 'объекте $ datamat'.
Запуск второгодает: Ошибка вgnett.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