Как использовать DLM с фильтрацией Калмана для прогнозирования

19

Может ли кто-нибудь рассказать мне, как использовать фильтрацию Калмана по DLM в R для временного ряда. Скажем, у меня есть эти значения (квартальные значения с годовой сезонностью); Как бы вы использовали DLM для прогнозирования следующих значений? И кстати, у меня достаточно исторических данных (каков минимум)?

89  2009Q1  
82  2009Q2  
89  2009Q3  
131 2009Q4  
97  2010Q1  
94  2010Q2  
101 2010Q3  
151 2010Q4  
100 2011Q1  
?   2011Q2

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

datayoda
источник
3
Это может получить лучшие ответы на stats.stackexchange.com
Джошуа Ульрих
Удар ... Я до сих пор не могу понять, как это сделать. Кто-нибудь отвечает на оригинальный пост?
датайода
2
С DLM это не такой стиль поваренной книги, как хотелось бы. Я бы взял ответ RockScience (виньетка DLM) и прошел через него. DLM больше похож на разработку программы, чем на другие методы, которые просто требуют подключения некоторых данных и настройки некоторых параметров. В конечном счете, вы разрабатываете набор массивов, которые реализуют что-то вроде скрытой модели Маркова, и dlmпакет делает это максимально простым.
Уэйн
У вас есть решение вашей проблемы? Я ищу решение проблемы с подобным типом временных рядов, но не могу найти решение.
Вы работали с бумагой, предложенной @RockScience? Вы смотрели на dlmпакет? Как я сказал в своем ответе, DLM гораздо больше похожи на создание программы, чем на включение некоторых переменных в вызов функции. Датайода никогда не принимал ответ, поэтому я не уверен, что они прошли это наблюдение.
Уэйн

Ответы:

16

В документе JSS 39-02 сравниваются 5 различных пакетов фильтрации Kalman R и приводится пример кода.

Г. Гротендик
источник
16

DLM - это круто, но они не так просты, как, скажем, ARIMA или другие методы. В других методах вы вставляете свои данные, а затем настраиваете некоторые параметры алгоритма, возможно, обращаясь к различным диагностикам, чтобы управлять вашими настройками.

С DLM вы создаете машину пространства состояний, которая состоит из нескольких матриц, которые в основном реализуют что-то вроде скрытой модели Маркова. Некоторые пакеты ( sspirя думаю, среди прочих) ожидают, что вы понимаете концепцию и то, что делают матрицы. Я настоятельно рекомендую вам начать с dlmпакета и, как рекомендует @RockScience, пройтись по виньетке.

При этом dlmвы собираетесь в основном сделать несколько шагов:

  1. Какие компоненты описывают мою серию? Тенденция? Сезонность? Экзогенные переменные? Вы будете использовать dlmтакие инструменты, как dlmModPolyдля реализации этих компонентов, с помощью +оператора, чтобы объединить их в одну модель.

  2. Создайте подпрограмму R, которая принимает столько параметров, сколько требуется для этой модели, создает компоненты с этими параметрами, затем складывает их вместе и возвращает полученную модель.

  3. Используйте dlmMLEдля поиска / оптимизации, чтобы найти подходящие параметры (используя MLE, который в основном является оптимизацией, с подводными камнями, которые могут возникнуть при оптимизации). dlmMLEнесколько раз вызывает вашу подпрограмму R с параметрами-кандидатами для создания моделей, а затем проверяет их.

  4. Создайте свою окончательную модель, используя подпрограмму R, которую вы создали, плюс параметры, которые вы нашли в шаге 3.

  5. Отфильтруйте данные с помощью dlmFilter, а затем, возможно, сглаживайте dlmSmooth.

  6. Если вы используете dlmModRegили делаете что-либо, что приводит к тому, что модель имеет изменяющиеся во времени параметры, вы не можете использовать ее dlmForecastдля прогнозирования ряда. Если вы в конечном итоге получите модель, изменяющуюся во времени, вы захотите заполнить свои входные данные с помощью NA и разрешить dlmFilterзаполнение NA для вас (прогноз плохого человека), так dlmForecastкак не работает с изменяющимися во времени параметрами.

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

Есть еще один пакет, имя которого избегает меня, который пытается создать внешний интерфейс, который может использовать несколько из этих пакетов (в том числе dlmв качестве внутреннего). К сожалению, я никогда не делал так, чтобы это работало хорошо, но это может быть только я.

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

Wayne
источник
Спасибо Уэйн, я думаю, что мой случай довольно прост, так что я не заметил четких тенденций или сезонности при визуальном осмотре. (Однако, если вам известны какие-либо тесты в R, пожалуйста, дайте мне знать, я постараюсь их запустить). Моя проблема в том, что я не знаю, как заполнить аргументы типа (FF, V, GG, W, m0, C0, dV и т. Д.) В функциях dlm для моих данных? Это главный вопрос для меня. Если у меня есть данные двумерного ряда (y = X1 + X2), например (цена = спрос + предложение), как я могу рассчитать эти аргументы для моих данных? FF, V, GG, W, m0, C0, dV и т. Д., Которые требуются в функциях
dlm
1
@nclfinance Пожалуйста, прочитайте FAQ и не рассматривайте это место как форум.
@nclfinance: проработка dlmвиньетки пакета. Вы узнаете, что вам нужно знать. Вот почему я рекомендую dlm, потому что вы сами не создаете FF и т. Д.
Уэйн