Ошибка в прогнозе VAR с регрессорами, использующими svar :: VAR - PullRequest
0 голосов
/ 25 июня 2019

Я оцениваю модель VAR с регрессорами, полученными с помощью пакета tsoutliers, который реализует метод Cheng y Liu. Модель оценивается правильно, однако, когда я пытаюсь прогнозировать h шагов вперед (я использую h = 2), я получаю значения NA в качестве прогнозов.

Итак, мои регрессоры (матрица) являются фиктивными переменными, потому что они являются выбросами типа АО. Я также должен использовать матрицу регрессора для прогноза в аргументе dumvar, поэтому я создаю матрицу со строками, равными h (в примере равно 2).

Я пытался прогнозировать с разными периодами, а также менял матрицу регрессора, включенную в прогноз, с матрицей случайных равномерных значений (подозреваю, проблема в нулях).

# Usamos el método de Cheng y Liu
# Restringimos a encontrar outliers de tipo AO con valor de t mayor igual a 3.
agro18_out <- tsoutliers::tso(serie18_diff1[,"agro"], tsmethod = "auto.arima", 
                            args.tsmethod = list(ic = "aicc", seasonal = FALSE, approximation = FALSE,
                                                 stepwise = FALSE), types = c("AO"), cval = 2.0, 
                            discard.method = "en-masse", maxit.iloop = 100, maxit.oloop = 100)
industria18_out <- tsoutliers::tso(serie18_diff1[,"industria"], tsmethod = "auto.arima", 
                                 args.tsmethod = list(ic = "aicc", seasonal = FALSE, approximation = FALSE,
                                                      stepwise = FALSE), types = c("AO"), cval = 3.0,
                                 discard.method = "en-masse", maxit.iloop = 100, maxit.oloop = 100)
comercio18_out <- tsoutliers::tso(serie18_diff1[,"comercio"], tsmethod = "auto.arima", 
                                args.tsmethod = list(ic = "aicc", seasonal = FALSE, approximation = FALSE,
                                                     stepwise = FALSE), types = c("AO"), cval = 3.0,
                                discard.method = "en-masse", maxit.iloop = 100, maxit.oloop = 100)

# Estimación del VAR hasta 2018
# generamos los regresores hasta 2018-2
agro18_ao <- tsoutliers::outliers.effects(agro18_out$outliers, length(serie18_diff1[, "agro"]))
industria18_ao <- tsoutliers::outliers.effects(industria18_out$outliers, length(serie18_diff1[, "agro"]))
comercio18_ao  <- tsoutliers::outliers.effects(comercio18_out$outliers, length(serie18_diff1[, "agro"])) 
colnames(agro18_ao) <- paste("agr", colnames(agro18_ao), sep = "")
colnames(industria18_ao) <- paste("ind", colnames(industria18_ao), sep = "")
colnames(comercio18_ao) <- paste("com", colnames(comercio18_ao), sep = "")
xreg18 <- matrix(nrow = nrow(comercio18_ao), ncol = ncol(comercio18_ao) + ncol(industria18_ao) + ncol(agro18_ao))
xreg18 <- cbind(industria18_ao, comercio18_ao, agro18_ao) 
xreg18
sum(apply(xreg18, 1, sum) > 1) # No tienen AO en los mismos periodos

h = 2
xreg18_pred <- matrix(nrow = 2, ncol = ncol(comercio18_ao) + ncol(industria18_ao) + ncol(agro18_ao))
agro18_ao <- tsoutliers::outliers.effects(agro18_out$outliers, length(serie18_diff1[, "agro"]) + h)
industria18_ao <- tsoutliers::outliers.effects(industria18_out$outliers, length(serie18_diff1[, "agro"]) + h)
comercio18_ao  <- tsoutliers::outliers.effects(comercio18_out$outliers, length(serie18_diff1[, "agro"]) + h) 
colnames(agro18_ao) <- paste("agr", colnames(agro18_ao), sep = "")
colnames(industria18_ao) <- paste("ind", colnames(industria18_ao), sep = "")
colnames(comercio18_ao) <- paste("com", colnames(comercio18_ao), sep = "")


xreg18_pred <- cbind(industria18_ao, comercio18_ao, agro18_ao) 
xreg18_pred <- xreg18_pred[-seq_along(1:nrow(xreg18)),] 
xreg18_pred

# Estimamos inicialmente un var
var18 <- vars::VAR(serie18_diff1, ic = "AIC", type = "none", lag.max = 10, exogen = xreg18)

# predicciones

# Se genera error al usar el dumvar...Por qué??? 
pred18 <- predict(object = var18, n.ahead = 2, ci = 0.95, dumvar = xreg18_pred)

Это мой фактический вывод $ агро fcst нижний верхний CI [1,] NA NA NA 0.06412661 [2,] NA NA NA 0,06449499

$ промышл fcst нижний верхний CI [1,] NA NA NA 0.05815483 [2,] NA NA NA 0,05861298

$ Comercio fcst нижний верхний CI [1,] NA NA NA 0.07034564 [2,] NA NA NA 0,07128827

Это мой ожидаемый результат

$ агро fcst нижний верхний CI [1,] 0,0007866399 -0,07264581 0,0421909 0,07343245 [2,] -0,0007444915 -0,07810270 0,07661372 0,07735821

$ промышл fcst нижний верхний CI [1,] -0,0042103795 -0,07351935 0,06509859 0,06930897 [2,] -0,0003505954 -0,07081144 0,07011025 0,07046085

$ Comercio fcst нижний верхний CI [1,] -0,0050694363 -0,08668936 0,07655049 0,08161992 [2,] -0,0002143067 -0,08376733 0,08333872 0,08355302

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...