Cómo usar DLM con filtrado de Kalman para pronosticar

19

¿Podría alguien explicarme un ejemplo sobre cómo usar el filtrado DLM Kalman en R en una serie temporal? Digamos que tengo estos valores (valores trimestrales con estacionalidad anual); ¿Cómo usaría DLM para predecir los siguientes valores? Y por cierto, ¿tengo suficientes datos históricos (cuál es el mínimo)?

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

Estoy buscando un tipo de respuesta paso a paso de estilo de libro de cocina de código R. La precisión de la predicción no es mi objetivo principal, solo quiero aprender la secuencia de código que me da un número para 2011Q2, incluso si no tengo suficientes datos.

datayoda
fuente
3
Esto puede obtener mejores respuestas en stats.stackexchange.com
Joshua Ulrich
Golpe ... Todavía no puedo entender cómo hacer esto. ¿Alguno de los que respondieron la publicación original?
datayoda
2
Con un DLM no tiene el estilo de un libro de cocina como te gustaría. Tomaría la respuesta de RockScience (la viñeta de DLM) y la analizaría. Un DLM es más como diseñar un programa que otras técnicas que simplemente requieren conectar algunos datos y ajustar algunos parámetros. En última instancia, está diseñando un conjunto de matrices que implementan algo como un modelo oculto de Markov, y el dlmpaquete lo hace lo más fácil posible.
Wayne
¿Tienes solución a tu problema? Estoy buscando una solución para un tipo similar de problema de serie temporal, pero no puedo encontrar una solución.
¿Has trabajado en el artículo sugerido por @RockScience? ¿Has mirado el dlmpaquete? Como dije en mi respuesta, los DLM se parecen mucho más a crear un programa que conectar algunas variables a una llamada de función. datayoda nunca aceptó una respuesta, por lo que no estoy seguro de que hayan superado esta observación.
Wayne

Respuestas:

16

El documento en JSS 39-02 compara 5 paquetes de filtrado R de Kalman diferentes y proporciona un código de muestra.

G. Grothendieck
fuente
16

Los DLM son geniales, pero no son tan simples como, por ejemplo, ARIMA u otros métodos. En otros métodos, conecta sus datos y luego modifica algunos parámetros del algoritmo, tal vez refiriéndose a varios diagnósticos para guiar su configuración.

Con un DLM, está creando una máquina de espacio de estado, que consta de varias matrices que básicamente implementan algo como un modelo oculto de Markov. Algunos paquetes ( sspircreo, entre otros) esperan que comprenda el concepto y lo que hacen las matrices. Recomiendo encarecidamente que comience con el dlmpaquete y, como recomienda @RockScience, recorra la viñeta.

Con dlmvas a básicamente tomar varias medidas:

  1. ¿Qué tipo de componentes describen mi serie? ¿Una tendencia? Estacionalidad? Variables exógenas? Utilizará dlmherramientas como dlmModPolyimplementar estos componentes, utilizando el +operador para unirlos en un solo modelo.

  2. Cree una subrutina R que tome todos los parámetros requeridos por este modelo, cree los componentes con esos parámetros, luego los sume y devuelva el modelo resultante.

  3. Use dlmMLEpara hacer una búsqueda / optimización para encontrar los parámetros apropiados (usando MLE, que es básicamente optimización, con las dificultades que pueden ocurrir en la optimización). dlmMLEllama repetidamente a su subrutina R con parámetros candidatos para crear modelos, luego los prueba.

  4. Cree su modelo final, utilizando la subrutina R que creó más los parámetros que encontró en el paso 3.

  5. Filtre sus datos con dlmFilter, luego quizás con suavidad dlmSmooth.

  6. Si usa dlmModRego hace algo que hace que el modelo tenga parámetros variables en el tiempo, no puede usar dlmForecastpara pronosticar su serie. Si termina con un modelo de variante de tiempo, deseará completar sus datos de entrada con NA y dejar que dlmFiltercomplete los NA por usted (el pronóstico de un hombre pobre), ya dlmForecastque no funciona con parámetros que varían en el tiempo.

  7. Si desea examinar los componentes individualmente (digamos la tendencia, por separado de la temporada), necesitará comprender las matrices y lo que hay en cada columna, además de comprender un poco cómo dlmlos une (¡el orden importa!).

Hay otro paquete, cuyo nombre se me escapa, que intenta crear un front-end que puede usar varios de estos paquetes (incluso dlmcomo el back-end). Desafortunadamente, nunca he conseguido que funcione bien, pero ese podría ser yo.

Realmente recomiendo conseguir un libro sobre DLM. Conseguí un par de ellos y jugué mucho dlmpara llegar a donde estoy, y no soy el experto de ninguna manera.

Wayne
fuente
Gracias Wayne, creo que mi caso es bastante simple de una manera que no vi ninguna tendencia clara o estacionalidad en la inspección visual. (Sin embargo, si conoce alguna prueba en R, hágamelo saber, intentaré ejecutarla). Mi problema es que no sé cómo completar los argumentos como (FF, V, GG, W, m0, C0, dV, etc.) en las funciones dlm para mis datos. Este es el problema principal para mí. Si tengo datos de una serie bivariada (y = X1 + X2), por ejemplo (precio = demanda + oferta), ¿cómo podría calcular estos argumentos para mis datos? FF, V, GG, W, m0, C0, dV, etc.que se requieren en las funciones
dlm
1
@nclfinance Lea las preguntas frecuentes y no trate este lugar como un foro.
@nclfinance: analice dlmla viñeta del paquete. Aprenderás lo que necesitas saber. Por eso lo recomiendo dlm, porque no creas FF, etc., tú mismo.
Wayne