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.
- ¿Hay alguna guía sobre cuándo usar / modificar los modelos identificados usando algoritmos automáticos tales como
auto.arima()
? - ¿Hay algún problema con solo usar AIC (que es lo que creo que
auto.arima()
usa) para identificar modelos? - ¿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.
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
fuente
Respuestas:
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)
approximation
TRUE
approximation
auto.arima()
approximation = TRUE
arima()
Para su ejemplo 1, deberíamos tener
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.
fuente
auto.arima()
establecido, así que si esos fueran los únicos dos modelos candidatos, el más simple habría sido seleccionado ...)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.
BIC IC elige un modelo MA (2).
fuente
Tomé los 500 valores en AUTOBOX (un software comercial que he ayudado a desarrollar) y recibí el siguiente aviso 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 tramas de acf muy diferentes .
Volviendo al análisis: Aquí está el modelo que se identificó para los últimos 246 valores y aquí con las siguientes estadísticas . El real / ajuste y pronóstico está aquí con el gráfico residual aquí . El ACF de los residuos sugiere suficiencia.. 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 !
fuente
Akaike_information_criterion dice que Exp( A ICm i n - A I Cyo) / 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 danfuente