13 votos

¿Son modelos identificados por auto.arima() parsimoniosa?

He estado tratando de aprender y aplicar los modelos ARIMA. He estado leyendo un texto excelente en ARIMA por Pankratz - Pronóstico con Univariante de Box - Jenkins Modelos: Conceptos y Casos. En el texto, el autor destaca especialmente la priciple de la parsimonia en la elección de los modelos ARIMA.

Comencé a jugar con el auto.arima() función en R paquete de previsión. Aquí es lo que yo hice, me simulado ARIMA y, a continuación, aplica auto.arima(). A continuación son 2 ejemplos. Como se puede ver en el ejemplo auto.arima() identificado claramente un modelo que muchos considerarían no parsimonioso. Especialmente en el ejemplo 2, donde auto.arima() identificado ARIMA(3,0,3) cuando en realidad ARIMA(1,0,1) sería suficiente y parsimonioso.

A continuación son mis preguntas. Agradecería cualquier sugerencia y recomendaciones.

  1. ¿Hay alguna orientación sobre cuándo utilizar/modificar los modelos identificados mediante algoritmos automáticos tales como auto.arima()?
  2. ¿Hay algún hoyo cae en sólo el uso de AIC (que es lo que creo auto.arima() usa) para identificar los modelos?
  3. Puede un algoritmo automático incorporado que es tacaño?

Por la forma en que solía auto.arima() sólo como un ejemplo. Esto se podría aplicar a cualquier algoritmo automático.

A continuación es un 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 presentamos los resultados de auto.arima(). Por favor, tenga en cuenta que todos los coeficientes son insignificantes. es decir, $t$ 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 son los resultados de la ejecución de regular arima() con el fin de 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 presentamos 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 son los resultados de la ejecución de regular arima() con el fin de 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

17voto

David J. Sokol Puntos 1730

Hay un par de cuestiones aquí. En primer lugar, no asumas que la simulación de la ARIMA es verdaderamente el orden que especifique; usted está tomando una muestra de que el modelo especificado y debido a la aleatoriedad, el mejor modelo de ajuste para la muestra tomada no puede ser el de que las simulaciones fueron dibujados.

Menciono esto porque de la segunda y la más importante de la cuestión: la auto.arima() función de la estimación de los modelos a través de una más eficiente algoritmo de ajuste, uso de condicionales sumas de cuadrados, para evitar el excesivo tiempo de cálculo para series largas o complejas modelos estacionales. Cuando este proceso de estimación está en uso, auto.arima() se aproxima a los criterios de información para un modelo (porque la probabilidad de registro del modelo no ha sido calculada). Un simple heurístico se utiliza para determinar si el condicional sumas de cuadrados de la estimación se activa, si el usuario no indica que el enfoque debe ser utilizado.

El comportamiento es controlado a través de argumento approximation y el simple heurística es (length(x)>100 | frequency(x)>12), por lo tanto approximation valor TRUE si la longitud de la serie es mayor que $n = 100$, o hay más de 12 observaciones dentro de cada año. Como usted simulado de la serie con $n = 500$ pero no especifica un valor para la approximation argumento, ejecutado auto.arima() con approximation = TRUE. Esto explica la aparentemente errónea selección de un modelo con mayor AIC, AICc, y BIC que el modelo más sencillo que instalar con arima().

Para el ejemplo 1, se debe 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 una más modelo parsimonioso que el modelo verdadero; un ARIMA(0, 0, 1) es elegido. Pero esto se basa en los criterios de información y ahora están en conformidad; el modelo seleccionado tiene menor AIC, AICc, y BIC, a pesar de las diferencias de la AIC y AICc son pequeños. Al menos ahora la selección es consistente con las normas para la elección de los modelos basados en los criterios de información.

La razón por la MA(1) ser elegido, creo, se refiere a la primera cuestión que antes he mencionado, a saber, que el mejor modelo de ajuste a una muestra tomada de un ARIMA(p, d, q) puede no ser del mismo orden que el modelo verdadero. Esto es debido a que el muestreo aleatorio. Tomando una serie más larga o más quemaduras en el período, puede ayudar a aumentar la probabilidad de que el verdadero modelo es seleccionado, pero no dinero en el banco.

Independientemente, la moraleja aquí es que cuando algo se ve, obviamente, mal, como en su pregunta, lea la asociada a la página del manual o la documentación para asegurarse de que usted entiende cómo funciona el software.

2voto

forecaster Puntos 3015

Muchas gracias@Gavin, @Irishstat y @Rob por responder a mi pregunta. Está claro que si necesito un modelo parsimonioso de un sistema automático de algoritmos, como el auto.arima BIC criterio de información debe ser utilizado como contraposición a la AIC, especialmente después de ver este post y @Gavin el post de arriba.

También estoy muy de acuerdo con @Irishstat que la elección de un modelo basado en el IC criterio tiene limitaciones en cuanto a que no elegir un mejor modelo de ajuste de datos con valores atípicos y nivel de turnos. En mi opinión, los valores atípicos + cambios + datos confusos = palabra real de negocios de datos, cualquier otra cosa es un libro de texto de los conjuntos de datos. Cualquier modelo automático que no considere los valores atípicos + nivel cambia, de nuevo, en mi opinión, debe ser utilizado con precaución.

Llegando a la código - auto.arima tiene una opción para elegir entre la AIC o BIC. Vea a continuación el código ha sido modificado a partir de teh preguntas anteriores.

Muchas gracias Cruz validado por la comunidad. Aprendo y intresting cosas cada día.

###############
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 MA(2) del modelo.

> 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

0voto

MattSayar Puntos 723

Akaike_information_criterion dice que $\ \exp^{(AIC_{min} − AIC_i)/2}$
"puede ser interpretado como la probabilidad relativa de que la i-ésima modelo minimiza el (estimado) pérdida de información".

SI esto es así, sería de ayuda a los usuarios a ver estos relativa de las probabilidades, junto con el AICs (?) de auto.arima( ... trace=TRUE ). Por ejemplo, los huevos de datos como esta pregunta da

                                # 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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X