¿Los modelos identificados por auto.arima () son parsimoniosos?


13

He estado tratando de aprender y aplicar los modelos ARIMA. He estado leyendo un excelente texto sobre ARIMA de Pankratz - Pronósticos con caja univariante - Modelos Jenkins: conceptos y casos . En el texto, el autor enfatiza especialmente el principio de parsimonia en la elección de los modelos ARIMA.

Empecé a jugar con la auto.arima()función en R paquete de pronóstico . Esto es lo que hice, simulé ARIMA y luego apliqué auto.arima(). A continuación hay 2 ejemplos. Como puede ver en ambos ejemplos auto.arima(), identificó claramente un modelo que muchos considerarían no parsimonioso. Especialmente en el ejemplo 2, donde se auto.arima()identificó ARIMA (3,0,3) cuando en realidad ARIMA (1,0,1) sería suficiente y parsimonioso.

A continuación están mis preguntas. Agradecería cualquier sugerencia y recomendación.

  1. ¿Hay alguna guía sobre cuándo usar / modificar los modelos identificados usando algoritmos automáticos tales como auto.arima()?
  2. ¿Hay algún problema con solo usar AIC (que es lo que creo que auto.arima()usa) para identificar modelos?
  3. ¿Se puede construir un algoritmo automático que sea parsimonioso?

Por cierto lo usé auto.arima()solo como ejemplo. Esto se aplicaría a cualquier algoritmo automático.

A continuación se muestra el Ejemplo # 1:

set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

A continuación se muestran los resultados de auto.arima(). Tenga en cuenta que todos los coeficientes son insignificantes. es decir, valor <2.t

ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1     ma1      ma2  intercept
      0.5395  0.2109  -0.3385    19.9850
s.e.  0.4062  0.4160   0.3049     0.0878

sigma^2 estimated as 1.076:  log likelihood=-728.14
AIC=1466.28   AICc=1466.41   BIC=1487.36

A continuación se muestran los resultados de la ejecución regular arima()con el pedido ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

Ejemplo 2

set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

A continuación se muestran los resultados de auto.arima():

ARIMA(3,0,3) with non-zero mean 

Coefficients:
         ar1      ar2     ar3     ma1     ma2     ma3  intercept
      0.7541  -1.0606  0.2072  0.1391  0.5912  0.5491    20.0326
s.e.  0.0811   0.0666  0.0647  0.0725  0.0598  0.0636     0.0939

sigma^2 estimated as 1.027:  log likelihood=-716.84
AIC=1449.67   AICc=1449.97   BIC=1483.39

A continuación se muestran los resultados que se ejecutan regularmente arima()con el pedido ARIMA (1,0,1)

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

Parece que está haciendo algo aquí, ya que el procedimiento AIC podría estar identificando erróneamente el modelo más simple. Además, las premisas del criterio AIC no tienen pulsos / no hay cambios de nivel / no hay pulsos estacionales / no hay tendencias de tiempo local / constancia de parámetros / constancia de varianza de error.
IrishStat

El AIC y el BIC son proporcionales a la varianza de los errores de un modelo adivinado. Este enfoque en mi experiencia es simple debido a algunos de los problemas que ya he planteado y los problemas de invertibilidad planteados aquí. No hay reemplazo para un sistema de identificación inteligente que construye modelos iterativos que concluyen cuando no quedan parámetros no necesarios y no hay información / estructura evidente en los residuos. En resumen, la identificación automática del modelo es un proceso iterativo, no un proceso de un solo paso, como lo es en todos los análisis estadísticos.
IrishStat

@Irishstat, ¿cuál es el signo del coeficiente ma? ¿Debe interpretarse como -0.1391 -0.5912 -0.5491?
pronosticador

en términos del Texto Pankratz ... ¡sí! . Puede verificar las raíces del polinomio ma para ver si cumplen con los requisitos de invertibilidad.
IrishStat

entonces el auto.arima anterior no es invertible, es decir, -0.1391-0.5912-0.5491 es <1, por lo tanto, el modelo está bien.
pronosticador

Respuestas:


17

Hay un par de problemas aquí. En primer lugar, no presuma que el ARIMA simulado es realmente del orden que especifique; está tomando una muestra del modelo especificado y debido a la aleatoriedad, el mejor modelo de ajuste para la muestra particular extraída puede no ser el que se extrajo de las simulaciones.

Menciono esto debido a la segunda cuestión y más importante: la auto.arima()función puede estimar modelos a través de un algoritmo de ajuste más eficiente, utilizando sumas condicionales de cuadrados, para evitar un tiempo de cálculo excesivo para series largas o para modelos estacionales complejos. Cuando este proceso de estimación está en uso, auto.arima() aproxima los criterios de información para un modelo (porque no se ha calculado la probabilidad de registro del modelo). Se usa una heurística simple para determinar si las sumas condicionales de la estimación de cuadrados están activas, si el usuario no indica qué enfoque debe usarse .

approximation(length(x)>100 | frequency(x)>12)approximationTRUE norte=100norte=500 approximationauto.arima()approximation = TRUEarima()

Para su ejemplo 1, deberíamos tener

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

Por lo tanto auto.arima() ha seleccionado un modelo más parsimonioso que el modelo verdadero; Se elige un ARIMA (0, 0, 1). Pero esto se basa en los criterios de información y ahora están de acuerdo; el modelo seleccionado tiene AIC, AICc y BIC más bajos, aunque las diferencias para AIC y AICc son pequeñas. Al menos ahora la selección es consistente con las normas para elegir modelos basados ​​en criterios de información.

La razón por la que se eligió el MA (1), creo, se relaciona con el primer tema que mencioné; a saber, que el modelo que mejor se ajusta a una muestra extraída de un ARIMA establecido (p, d, q) puede no ser del mismo orden que el modelo verdadero. Esto se debe al muestreo aleatorio. Tomar una serie más larga o un período de grabación más largo puede ayudar a aumentar la posibilidad de que se seleccione el modelo verdadero, pero no cuente con él.

De todos modos, la moraleja aquí es que cuando algo parece obviamente mal, como en su pregunta, lea la página del manual o la documentación asociada para asegurarse de que comprende cómo funciona el software.


Gracias por la respuesta detallada. Utilicé su enfoque para el segundo ejemplo: set.seed (453) y <- arima.sim (n = 500, list (ar = 0.2, ma = 0.6), mean = 10) auto.arima (y, aproximación = FALSO) y esto es lo que obtengo, claramente está sobreajustando los datos: ARIMA (2,0,4) con coeficientes medios distintos de cero: ar1 ar2 ma1 ma2 ma3 ma4 intercepción 0.5369 -0.9627 0.3681 0.6799 0.7065 0.1701 20.0329 se 0.0278 0.0499 0.0533 0.0630 0.0793 0.0574 0.0927 sigma ^ 2 estimado como 1.024: probabilidad de registro = -716.17 AIC = 1448.33 AICc = 1448.63 BIC = 1482.05
pronosticador

Todavía no he leído el capítulo que tiene algo llamado "invertibilidad". ¿Auto.arima en el segundo caso viola la regla de "invertiblidad" en el diagnóstico del modelo ?, ¿puedo estar apagado?
pronosticador

1
@forecaster Suponga que no sabe la verdad, todo lo que tiene es la muestra a mano. En esa circunstancia, AIC, etc. están haciendo lo que usted les pide que hagan. Como dije anteriormente, las series simuladas pueden no ser las que usted solicitó, o más bien puede no ser posible identificar con éxito las series verdaderas de la pequeña muestra que tomó. No hay nada implícito aquí ni en ninguna otra parte en las estadísticas de que obtendrá el único modelo VERDADERO. Como estadístico, si cree que la serie está sobreajustada (digamos por conocimiento previo), coloque una restricción en el orden de los términos buscados. O use BIC como criterio de detención.
Restablecer Mónica - G. Simpson

No sé lo suficiente qué es la invertibilidad para poder responder esa pregunta. ¿Quizás hacer esto como una nueva pregunta aquí?
Restablecer Mónica - G. Simpson

@forecaster (Razón por la que digo BIC, es que impone una penalización adicional a la complejidad. En este caso, el BIC del ARIMA (1, 0, 1) tiene un BIC más bajo que el modelo auto.arima()establecido, así que si esos fueran los únicos dos modelos candidatos, el más simple habría sido seleccionado ...)
Restablecer Mónica - G. Simpson

2

Muchas gracias @ Gavin, @Irishstat y @Rob por responder a mi pregunta. Está claro que si necesito un modelo parsimonioso de algoritmos automáticos como el criterio de información BIC de auto.arima, debería usarse en lugar de AIC, especialmente después de mirar esta publicación y la @ Gavin anterior.

También estoy muy de acuerdo con @Irishstat en que elegir un modelo basado en el criterio de IC tiene limitaciones, ya que no elige un mejor modelo para ajustar los datos con valores atípicos y cambios de nivel. En mi opinión, valores atípicos + cambios de nivel + datos desordenados = datos comerciales de palabras reales , cualquier otra cosa son conjuntos de datos de libros de texto. Cualquier modelo automático que no considere valores atípicos + cambios de nivel, nuevamente, en mi opinión, debe usarse con precaución.

Al llegar al código, auto.arima tiene una opción para elegir entre AIC o BIC. Vea a continuación el código ha sido modificado de las preguntas anteriores.

Muchas gracias Comunidad con validación cruzada. Aprendo cosas nuevas e interesantes todos los días.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC IC elige un modelo MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

Tomé los 500 valores en AUTOBOX (un software comercial que he ayudado a desarrollar) y recibí el siguiente aviso ingrese la descripción de la imagen aquíbasado en la Prueba de Chow para la constancia de los parámetros. Un error muy básico que se comete en el estudio de una serie temporal es suponer que los datos son conducidos por un modelo particular con parámetros constantes. AUTOBOX detectó un punto de interrupción en el período 246 que podría reflejar una simulación que no se había "calentado". Al simular datos, una buena práctica es eliminar los primeros valores "n" y luego estudiar los restantes. Tomé los datos y los dividí en dos secciones; los primeros 245 y los 255 restantes. Aquí están las dos ingrese la descripción de la imagen aquítramas de acf muy diferentes ingrese la descripción de la imagen aquí.

Volviendo al análisis: Aquí está el modelo que se identificó para los últimos 246 valores ingrese la descripción de la imagen aquíy aquí ingrese la descripción de la imagen aquícon las siguientes estadísticas ingrese la descripción de la imagen aquí. El real / ajuste y pronóstico está aquí ingrese la descripción de la imagen aquícon el gráfico residual aquí ingrese la descripción de la imagen aquí. El ACF de los residuos sugiere suficiencia.ingrese la descripción de la imagen aquí. Tenga en cuenta que los 5 pulsos que se identificaron tuvieron un efecto muy pequeño y podrían ser fácilmente ignorados (¡en este caso!). En resumen, la lección aprendida aquí es que a veces tenemos demasiados datos y necesitamos considerar coeficientes de cambio de tiempo. En este caso, estamos identificando un cambio en los parámetros que (aparentemente) no tiene un impacto importante en el modelo / parámetros resultantes, pero señala una mejora del proceso generalmente necesaria en el análisis de series de tiempo. Mi experiencia con auto.arima sugiere que, dado que no trata / soluciona explícitamente las violaciones gaussianas, tiende a sobremodelar al apoyarse demasiado en los valores históricos en lugar de extraer la estructura de los datos. En este caso, dado que era una simulación estrictamente controlada sin violaciones gaussianas, funcionó, pero generalmente sospecharía de un enfoque tan limitado y de un solo paso para la identificación del modelo ARIMA. Confiar pero verificar !


0

Akaike_information_criterion dice que  Exp(UNyoCmetroyonorte-UNyoCyo)/ /2
"puede interpretarse como la probabilidad relativa de que el i-ésimo minimice la pérdida de información (estimada)".

Si esto es así, ayudaría a los usuarios a ver estas probabilidades relativas, junto con los AIC (?) De auto.arima( ... trace=TRUE ). Por ejemplo, los datos de huevos ejecutados como en esta pregunta dan

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
Esta es una respuesta o una pregunta?
Tim

@Tim, soy tan tentador porque no sé si estos problemas relativos son "reales" o al menos comunes.
denis
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.