I modelli identificati da auto.arima () sono parsimoniosi?


13

Ho cercato di imparare e applicare i modelli ARIMA. Ho letto un eccellente testo su ARIMA di Pankratz - Previsioni con scatola univariata - Modelli Jenkins: concetti e casi . Nel testo l'autore sottolinea in particolare il principio della parsimonia nella scelta dei modelli ARIMA.

Ho iniziato a giocare con auto.arima()la funzione di R pacchetto di previsione . Ecco cosa ho fatto, ho simulato ARIMA e poi applicato auto.arima(). Di seguito sono riportati 2 esempi. Come puoi vedere in entrambi gli esempi auto.arima()identificato chiaramente un modello che molti considererebbero non parsimonioso. Soprattutto nell'esempio 2, dove auto.arima()identificato ARIMA (3,0,3) quando in realtà ARIMA (1,0,1) sarebbe sufficiente e parsimonioso.

Di seguito sono le mie domande. Gradirei eventuali suggerimenti e raccomandazioni.

  1. Ci sono indicazioni su quando utilizzare / modificare i modelli identificati utilizzando algoritmi automatici come auto.arima()?
  2. Ci sono delle cadute nell'uso dell'AIC (che è quello che penso auto.arima()usi) per identificare i modelli?
  3. Può un algoritmo automatico creato parsimonioso?

A proposito, ho usato auto.arima()solo come esempio. Ciò si applicherebbe a qualsiasi algoritmo automatico.

Di seguito è riportato l'esempio n. 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

Di seguito sono riportati i risultati di auto.arima(). Si noti che tutti i coefficienti sono insignificanti. vale a dire, valore <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

Di seguito sono riportati i risultati della corsa regolare arima()con ordine 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

Esempio 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

Di seguito sono riportati i risultati di 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

Di seguito sono riportati i risultati che funzionano regolarmente arima()con ordine 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

Sembra che tu stia affrontando qualcosa qui perché la procedura AIC potrebbe identificare erroneamente il modello più semplice. Inoltre, i criteri AIC non prevedono impulsi / nessun cambiamento di livello / nessun impulso stagionale / nessuna tendenza all'ora locale / costanza dei parametri / costanza della varianza dell'errore.
IrishStat,

AIC e BIC sono proporzionali alla varianza degli errori rispetto a un modello indovinato. Questo approccio nella mia esperienza è semplicemente semplice a causa di alcuni dei problemi che ho già sollevato e dei problemi di invertibilità sollevati qui. Non vi è alcuna sostituzione per un sistema di identificazione intelligente che costruisce modelli iterativi che concludono quando non rimangono parametri non necessari e nessuna informazione / struttura è evidente nei residui. In sintesi, l'identificazione automatica del modello è un processo iterativo, non un processo in una sola fase, così come avviene in tutte le analisi statistiche.
IrishStat,

@Irishstat qual è il segno del coefficiente ma dovrebbe essere interpretato come -0.1391 -0.5912 -0.5491?
previsioni

in termini di testo Pankratz .. sì! . Puoi controllare le radici del polinomio ma per vedere se soddisfano i requisiti di invertibilità.
IrishStat,

quindi il precedente auto.arima non è invertibile cioè, -0.1391-0.5912-0.5491 è <1 quindi il modello va bene.
previsioni

Risposte:


17

Ci sono un paio di problemi qui. In primo luogo, non dare per scontato che l'ARIMA simulato sia veramente dell'ordine specificato; stai prendendo un campione dal modello specificato e, a causa della casualità, il modello più adatto per il particolare campione prelevato potrebbe non essere quello dal quale sono state tratte le simulazioni.

Ne parlo a causa del secondo e più importante problema: la auto.arima()funzione può stimare i modelli tramite un algoritmo di adattamento più efficiente, usando somme condizionate di quadrati, per evitare un eccessivo tempo di calcolo per lunghe serie o per complessi modelli stagionali. Quando viene utilizzato questo processo di stima, auto.arima() approssima i criteri di informazione per un modello (poiché la probabilità di log del modello non è stata calcolata). Una semplice euristica viene utilizzata per determinare se le somme condizionali della stima dei quadrati sono attive, se l'utente non indica quale approccio deve essere utilizzato .

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n=100n=500 ma non hai specificato un valore per l' approximationargomento, hai eseguito auto.arima()con approximation = TRUE. Questo spiega la scelta evidentemente erroneo di un modello con grande AIC, AICC, e BIC rispetto al modello più semplice che si Equipaggiata con arima().

Per il tuo esempio 1, dovremmo avere

> 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

Quindi auto.arima()ha selezionato un modello più parsimonioso rispetto al modello vero; viene scelto un ARIMA (0, 0, 1). Ma questo si basa sui criteri di informazione e ora sono conformi; il modello selezionato ha AIC, AICc e BIC inferiori, sebbene le differenze per AIC e AICc siano piccole. Almeno ora la selezione è coerente con le norme per la scelta dei modelli basati su criteri di informazione.

Credo che il motivo della scelta dell'Autorità di certificazione (1) sia legato al primo numero che ho citato; vale a dire che il modello migliore per un campione estratto da un ARIMA dichiarato (p, d, q) potrebbe non essere dello stesso ordine del modello reale. Ciò è dovuto al campionamento casuale. Prendere una serie più lunga o un periodo di masterizzazione più lungo può aiutare ad aumentare le probabilità che sia selezionato il modello vero, ma non puntare su di esso.

Indipendentemente da ciò, la morale qui è che quando qualcosa sembra evidentemente sbagliato, come nella tua domanda, leggi la pagina man o la documentazione associata per assicurarti di capire come funziona il software.


Grazie per la risposta dettagliata. Ho usato il tuo approccio per il secondo esempio: set.seed (453) y <- arima.sim (n = 500, list (ar = 0.2, ma = 0.6), mean = 10) auto.arima (y, approssimation = FALSO) e questo è quello che ottengo, sta chiaramente sovvertendo i dati - ARIMA (2,0,4) con coefficienti medi diversi da zero: ar1 ar2 ma1 ma2 ma3 ma4 intercetta 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 stimato come 1,024: log verosimiglianza = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
previsioni

Non ho ancora letto il capitolo che ha qualcosa chiamato "invertibilità". Auto.arima nel secondo caso viola la regola "invertiblity" nella diagnosi del modello? Potrei essere spento, puoi correggere se sbaglio?
previsioni

1
@forecaster Supponi di non conoscere la verità, tutto quello che hai è il campione a portata di mano. In tale circostanza, AIC ecc. Stanno facendo ciò che stai chiedendo loro di fare. Come ho detto sopra, la serie simulata potrebbe non essere quella richiesta, o piuttosto potrebbe non essere possibile identificare con successo la serie reale dal piccolo campione che hai preso. Non c'è niente di sottinteso qui o altro nelle statistiche che otterrai quello, VERO modello. Come statistico, se ritieni che la serie sia sovradimensionata (diciamo per conoscenza precedente), pone una limitazione sull'ordine dei termini cercati. Oppure usa BIC come criterio di arresto.
Ripristina Monica - G. Simpson,

Non so abbastanza bene quale invertibilità sia in grado di rispondere a questa domanda. Forse porre questa come una nuova domanda qui?
Ripristina Monica - G. Simpson,

@forecaster (motivo per cui dico BIC, è che pone una penalità aggiuntiva alla complessità. In questo caso, il BIC di ARIMA (1, 0, 1) ha un BIC inferiore rispetto al modello auto.arima()stabilito, quindi se quelli fossero gli unici due modelli candidati, il più semplice sarebbe stato selezionato ...)
Ripristina Monica - G. Simpson,

2

Grazie mille @ Gavin, @Irishstat e @Rob per aver risposto alla mia domanda. È chiaro che se ho bisogno di un modello parsimonioso da algoritmi automatici come auto.arima il criterio di informazione BIC dovrebbe essere usato al contrario di AIC soprattutto dopo aver visto questo post e il post di @ Gavin sopra.

Sono anche molto d'accordo con @Irishstat sul fatto che la scelta di un modello basato sul criterio IC ha dei limiti in quanto non sceglie un modello migliore per adattare un dato a valori anomali e cambiamenti di livello. A mio avviso, valori anomali + spostamenti di livello + dati disordinati = dati aziendali di parole reali , qualsiasi altra cosa sono set di dati di libri di testo. Qualsiasi modello automatico che non consideri valori anomali + cambiamenti di livello, sempre secondo me dovrebbe essere usato con cautela.

Venendo al codice - auto.arima ha un'opzione per scegliere tra AIC o BIC. Vedi sotto il codice è stato modificato dalle domande precedenti.

Mille grazie Comunità convalidata. Imparo cose nuove e interessanti ogni giorno.

###############
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 sceglie un modello 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

Ho preso i 500 valori in AUTOBOX (un software commerciale che ho aiutato a sviluppare) e ho ricevuto il seguente avviso inserisci qui la descrizione dell'immaginebasato sul Chow Test per la costanza dei parametri. Un errore di base che viene fatto nello studio di una serie temporale è quello di presumere che i dati siano guidati da un modello particolare con parametri costanti. AUTOBOX ha rilevato un punto di interruzione nel periodo 246 che potrebbe riflettere una simulazione che non era stata "riscaldata". Quando si simula la buona pratica dei dati è eliminare i primi valori "n" e poi studiare quelli rimanenti. Ho preso i dati e li ho segmentati in due sezioni; il primo 245 e il restante 255. Ecco le due inserisci qui la descrizione dell'immaginetrame acf molto diverseinserisci qui la descrizione dell'immagine .

Tornando all'analisi: ecco il modello che è stato identificato per gli ultimi 246 valori inserisci qui la descrizione dell'immaginee qui inserisci qui la descrizione dell'immaginecon le seguenti statistiche inserisci qui la descrizione dell'immagine. L'attuale / adatta e previsione è qui inserisci qui la descrizione dell'immaginecon la trama residua qui inserisci qui la descrizione dell'immagine. L'ACF dei residui suggerisce sufficienzainserisci qui la descrizione dell'immagine. Si noti che i 5 impulsi identificati hanno avuto un effetto molto piccolo e potevano essere facilmente ignorati (in questo caso!). In sintesi, la lezione appresa qui è che a volte abbiamo troppi dati e dobbiamo considerare i coefficienti che cambiano il tempo. In questo caso stiamo identificando un cambiamento nei parametri che (apparentemente) non ha un impatto importante sul modello / i parametri risultanti ma indica un miglioramento del processo generalmente necessario nell'analisi delle serie temporali. La mia esperienza con auto.arima suggerisce che dal momento che non tratta / corregge esplicitamente le violazioni gaussiane tende a sovrastimare appoggiandosi troppo ai valori storici anziché estrarre la struttura dai dati. In questo caso, poiché si trattava di una simulazione strettamente controllata senza violazioni gaussiane, ha funzionato, ma sarei generalmente sospetto di una tale banda con un approccio limitato e ad un solo passaggio all'identificazione del modello ARIMA. Fidarsi ma verificare !


0

 exp(UNioCmion-UNioCio)/2

Se è così, sarebbe utile agli utenti di vedere queste probabilità relative, insieme alle AIC (?) Da auto.arima( ... trace=TRUE ). Ad esempio, i dati di uova eseguiti come in questa domanda

                                # 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
Questa è una risposta o una domanda?
Tim

@Tim, sono così provvisorio perché non so se questi probi relativi sono "reali" o almeno comuni.
denis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.