Ajustar un modelo ARIMAX con regularización o penalización (por ejemplo, con el lazo, la red elástica o la regresión de cresta)

29

Utilizo la función auto.arima () en el paquete de pronóstico para ajustar los modelos ARMAX con una variedad de covariables. Sin embargo, a menudo tengo una gran cantidad de variables para seleccionar y generalmente termino con un modelo final que funciona con un subconjunto de ellas. No me gustan las técnicas ad-hoc para la selección de variables porque soy humano y sujeto a sesgos, pero la validación cruzada de series de tiempo es difícil , por lo que no he encontrado una buena manera de probar automáticamente diferentes subconjuntos de mis variables disponibles, y Estoy atascado ajustando mis modelos usando mi propio mejor criterio.

Cuando me ajusto a los modelos glm, puedo usar la red elástica o el lazo para la regularización y la selección de variables, a través del paquete glmnet . ¿Existe un kit de herramientas existente en R para usar la red elástica en los modelos ARMAX, o tendré que enrollar el mío? ¿Es esta una buena idea?

editar: ¿Tendría sentido calcular manualmente los términos AR y MA (digamos hasta AR5 y MA5) y usar glmnet para ajustar el modelo?

editar 2: Parece que el paquete FitAR me hace parte, pero no todo, del camino hacia allí.

Zach
fuente
2
Me gustaría saber si alguna vez lograste hacer algo al respecto. Lo tenía marcado para cualquier actualización, así que solo tocaba la base aquí.
Vishal Belsare
Nunca conseguí resolver esto. Pensé en escribir mi propia implementación, pero no lo logré. ¿Tal vez podría calcular manualmente los términos AR y MA y luego aplicar glmnet a esos datos?
Zach
1
Hola Zach, me preguntaba si has llevado esto más lejos o si todavía está estacionado. Necesito un algoritmo así para pronosticar una gran cantidad de series.
Matt Weller
3
@MattWeller Hablé un poco con Rob Hyndman, el autor del excelente forecastpaquete para R. Dijo que sería difícil con el ARIMA completo, porque tendrías que envolver el lazo alrededor del optimizador no lineal ARIMA. Una solución parcial sería ajustar un modelo AR utilizando glmnetvariables rezagadas. Hasta donde yo sé, nadie ha hecho esto con un modelo ARIMA completo todavía.
Zach

Respuestas:

7

Esta no es una solución, sino algunas reflexiones sobre las posibilidades y dificultades que conozco.

Siempre que sea posible especificar un modelo de serie temporal como con computable a partir de covariables y observaciones con retraso de tiempo , también es posible calcular el estimador penalizado neto elástico de mínimos cuadrados de usando glmnet en R. Requiere que escriba un código para calcular para formar la matriz modelo que se especificará en glmnet. Esto funciona para los modelos AR pero no directamente para los modelos ARMA, por ejemplo. Además, los procedimientos de validación cruzada de glmnet no son sensibles per se para los datos de series temporales.

Yt+1=xtβ+ϵt+1
xtβxt

Para modelos más generales, una implementación de un algoritmo para calcular el estimador penalizado neto elástico de mínimos cuadrados no lineal de Se necesita . Que yo sepa, no existe tal implementación en R. Actualmente estoy escribiendo una implementación para resolver el caso donde el punto es que es primordial para la selección del modelo que la penalización del lazo esté en y no en . Si recuerdo correctamente la parametrización ARIMA, también toma esta forma pero no puedo ofrecer ningún código por el momento. Está (estará) basado en

Yt+1=f(xt,β)+ϵt+1
β
Yt+1=xtg(β)+ϵt+1
βg(β)Un método de descenso de gradiente coordinado para una minimización separable no lisa .

Otro problema es la selección de la cantidad de penalización (los parámetros de ajuste). Generalmente requerirá una forma de validación cruzada para series de tiempo, pero espero poder resolver algunos métodos menos exigentes computacionalmente para modelos específicos.

NRH
fuente
El paquete caret para R tiene una buena implementación de validación cruzada de series temporales que podría usarse para seleccionar los parámetros para glmnet. Gracias por la respuesta.
Zach
2

Un cliente me desafió a resolver este problema de forma automática, es decir, llave en mano. Implementé un enfoque que para cada par (es decir, y un candidato x), preblanquea, calcula las correlaciones cruzadas de la serie preblanqueada, identifica el PDL (O MODELO DE LAG DISTRIBUIDO DISTRIBUIDOR AUTORREGESIVO ADL incluyendo cualquier TIEMPO MUERTO) al incorporar la detección de intervención a producir estimaciones robustas, desarrollar una "medida" para esta estructura. Después de realizar esto para TODOS los regresores candidatos, clasifíquelos según la "medida" y luego seleccione los principales regresores K según la "medida". Esto a veces se conoce como filtrado lineal. Incorporamos con éxito esta heurística en nuestro paquete de series de tiempo disponible comercialmente. Deberías poder "RODAR TU PROPIO"

IrishStat
fuente
Específicamente quiero incorporar el lazo o la red elástica en un modelo ARIMA.
Zach
3
Realmente no estoy buscando un filtro lineal (aunque esto es útil). Específicamente, quiero una forma de incorporar el lazo, la regresión de cresta o la red elástica en un modelo ARIMAX.
Zach
2
Por el momento no me interesan los cambios de nivel, las tendencias de hora local, los cambios de coeficiente o la varianza de error no constante. Estoy muy específicamente interesado en aplicar la regularización de lazo, cresta o red elástica a los modelos ARIMAX.
Zach
2
Si puede incorporar la regularización de lazo, cresta o red elástica en la metodología anterior y publicar un código de ejemplo en un lenguaje de programación de código abierto, me complacería otorgarle la recompensa.
Zach
1
@frank está intentando identificar a través de la estimación (reducción) y eso no funciona porque hay demasiadas combinaciones de pulsos posibles, cambios de nivel, pulsos estacionales y tendencias de tiempo. Si estas estructuras son necesarias pero se ignoran, la estimación de parámetros está sesgada y las pruebas paramétricas de significación salen por la ventana.
IrishStat