Прогнозирование с помощью пакета `midasr`: включение нового высокочастотного значения

Я пытаюсь рассчитать прогноз на один шаг вперед, используя так называемую концепцию MIDAS. В рамках этой концепции вычисляются прогнозы в зависимости от данных более высокой частоты. Например, зависимая переменная y может быть записан ежегодно и объяснен с помощью независимой переменной x, который может быть выбран, например, ежеквартально.

Есть пакет под названием midasr который предлагает много функций. Я могу рассчитать прогноз на один шаг вперед, используя функцию select_and_forecast из упомянутого пакета следующим образом (с имитацией данных, которая является упрощенной версией примера из руководства пользователя к пакету midasr):

Генерация данных:

library(midasr)
set.seed(1001)
n <- 250
trend <- c(1:n)
x <- rnorm(4 * n)
z <- rnorm(12 * n)
fn.x <- nealmon(p = c(1, -0.5), d = 8)
y <- 2 + 0.1 * trend + mls(x, 0:7, 4) %*% fn.x + rnorm(n)

Расчет прогнозов (горизонт прогноза вне выборки контролируется аргументом outsampleтак что в моем примере я рассчитываю 10 прогнозов, от 240 до 250)

select_and_forecast(y~trend+mls(y,1,1,"*")+mls(x,0,4),
                          from=list(x=c(4)),
                          to=list(x=rbind(c(14,19))),
                          insample=1:250,outsample=240:250,
                          weights=list(x=c("nealmon","almonp")),
                          wstart=list(nealmon=rep(1,3),almonp=rep(1,3)),
                          IC="AIC",
                          seltype="restricted",
                          ftype="recursive",
                          measures=c("MSE"),
                          fweights=c("EW","BICW")
)$forecasts[[1]]$forecast

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

select_and_forecast(y~trend+mls(y,1,1,"*")+mls(x,0,4),
                          from=list(x=c(3)),   # The only change is the reduction of the lower bound of the range of the lags of the regeressor from 4 to 3
                          to=list(x=rbind(c(14,19))),
                          insample=1:250,outsample=240:250,
                          weights=list(x=c("nealmon","almonp")),
                          wstart=list(nealmon=rep(1,3),almonp=rep(1,3)),
                          IC="AIC",
                          seltype="restricted",
                          ftype="recursive",
                          measures=c("MSE"),
                          fweights=c("EW","BICW")
)$forecasts[[1]]$forecast

Теоретически одно включает новые наблюдения высокочастотной переменной посредством уменьшения временного индекса, но я не знаю, правильно ли использовать эту функцию таким образом.

Этот вопрос для тех, кто знаком с пакетом. Может кто-нибудь дать комментарий к этому?

Формула, на которой я думаю:

y_t=\beta_0 + \beta_1B(L^{1/m};\theta)x_{t-h+1/m}^{(m)} + \epsilon_t^{(m)}

С h=1 в моем случае и добавление 1/m включить новое высокочастотное наблюдение

1 ответ

Решение

Я не уверен, что правильно понял ваш вопрос, поэтому приведу пример, который, я надеюсь, ответит на ваш вопрос.

Предположим, ваша переменная ответа y наблюдается с ежегодной частотой и переменной предиктор x наблюдается ежеквартально (что соответствует моделируемым данным). Скажите, что вы заинтересованы в прогнозировании на следующий год y значение с использованием данных за предыдущий год. Тогда модельное уравнение в pacakge midasr выглядит следующим образом:

y~mls(x,4:7,4)

Ценности 4:7 лаги x используется для прогнозирования и 4 указывает на то, что есть 4 наблюдения x за каждое наблюдение y,

Пакет midasr использует соглашение, что для периода низкой частоты t=l мы наблюдаем периоды высокой частоты m*(l-1)+1:m, Так за год 1 у нас есть кварталы 1,2,3,4, на год 2 у нас есть кварталы 5,6,7,8, Это соглашение предполагает, что мы соблюдаем y в год 1 вместе с 4 четверть x, y в год 2 вместе с кварталом 8 из x и так далее.

Модель MIDAS сформулирована с точки зрения лагов, которые начинаются с нуля. Так что, если мы хотим объяснить y в год 1 (как в нашем примере низкая частота является годовой частотой) со значениями x с того же года, то есть кварталы 4,3,2,1 мы используем лаги 0,1,2,3, Если наша цель состоит в том, чтобы объяснить y в год 2 со значениями x в год 1 мы используем лаги 4,5,6,7 которые соответствуют кварталам 4,3,2,1,

Теперь предположим, что мы находимся в год 3, но мы еще не наблюдали y значение, но мы уже наблюдали первый квартал года 3квартал 9, Предположим, мы хотим использовать эту информацию для прогнозирования. четверть 9 три года отстают от года 3следовательно, спецификация модели сейчас

y~mls(x,3:7,4)

где мы также включаем всю информацию о предыдущем году тоже.

Так что, если мой пример соответствует тому, что вы спрашиваете, то да, включение нового высокочастотного наблюдения - это только вопрос изменения значения from аргумент, как вы сделали. Однако я настоятельно рекомендую начать с одной простой модели, чтобы полностью понять, как работает пакет.

Другие вопросы по тегам