2010-04-21 5 views
11

Sto cercando di spiegare a me stesso i risultati della previsione dall'applicazione di un modello ARIMA a un set di serie temporali. I dati provengono dalla M1-Competition, la serie è MNB65. Sto cercando di adattare i dati a un modello ARIMA (1,0,0) e ottenere le previsioni. Sto usando R. Ecco alcuni frammenti di uscita:Spiegazione delle previsioni da un modello ARIMA

> arima(x, order = c(1,0,0)) 
Series: x 
ARIMA(1,0,0) with non-zero mean 
Call: arima(x = x, order = c(1, 0, 0)) 
Coefficients: 
     ar1 intercept 
     0.9421 12260.298 
s.e. 0.0474 202.717 

> predict(arima(x, order = c(1,0,0)), n.ahead=12) 
$pred 
Time Series: 
Start = 53 
End = 64 
Frequency = 1 
[1] 11757.39 11786.50 11813.92 11839.75 11864.09 11887.02 11908.62 11928.97 11948.15 11966.21 11983.23 11999.27 

ho alcune domande:

(1) Come faccio a spiegare che, anche se il set di dati mostra una chiara tendenza al ribasso, le previsioni da questo modello tendenze verso l'alto. Ciò accade anche per ARIMA (2,0,0), che è il miglior adattamento di ARIMA per i dati utilizzando auto.arima (pacchetto di previsione) e per un modello ARIMA (1,0,1).

(2) Il valore di intercettazione per il modello ARIMA (1,0,0) è 12260,298. L'intercettazione non dovrebbe soddisfare l'equazione: C = mean * (1 - sum (coefficienti AR)), nel qual caso il valore dovrebbe essere 715.52. Devo mancare qualcosa di base qui.

(3) Si tratta chiaramente di una serie con media non stazionaria. Perché un modello AR (2) è ancora selezionato come il miglior modello da auto.arima? Potrebbe esserci una spiegazione intuitiva?

Grazie.

+1

Ho votato per chiudere questo perché non è una domanda di programmazione. –

risposta

21
  1. Nessun modello ARIMA (p, 0, q) consente un andamento perché il modello è fermo. Se vuoi davvero includere una tendenza, usa ARIMA (p, 1, q) con un termine di deriva o ARIMA (p, 2, q). Il fatto che auto.arima() suggerisca 0 differenze di solito indica che non esiste una tendenza chiara.

  2. Il file di aiuto per arima() mostra che l'intercetta è in realtà la media. Cioè, il modello AR (1) è (Y_t-c) = phi * (Y_ {t-1} - c) + e_t piuttosto che Y_t = c + phi * Y_ {t-1} + e_t come ci si potrebbe aspettare .

  3. auto.arima() utilizza un test di unità radice per determinare il numero di differenze richieste. Quindi controlla i risultati dal test della radice dell'unità per vedere cosa sta succedendo. È sempre possibile specificare il numero richiesto di differenze in auto.arima() se si ritiene che i test delle unità non portino a un modello ragionevole.

Ecco i risultati di due test per i dati:

R> adf.test(x) 

     Augmented Dickey-Fuller Test 

data: x 
Dickey-Fuller = -1.031, Lag order = 3, p-value = 0.9249 
alternative hypothesis: stationary 

R> kpss.test(x) 

     KPSS Test for Level Stationarity 

data: x 
KPSS Level = 0.3491, Truncation lag parameter = 1, p-value = 0.09909 

Così l'ADF dice fortemente non stazionari (l'ipotesi nulla in quel caso), mentre il KPSS non abbastanza rifiuta stazionarietà (l'ipotesi nulla per quel test). auto.arima() usa quest'ultimo per default. Potresti usare auto.arima (x, test = "adf") se volevi il primo test. In tal caso suggerisce il modello ARIMA (0,2,1) che ha una tendenza.

+1

Grazie al Prof. Hyndman per i commenti elaborati. –

+0

Prof. Hyndman, c'è un modo per essere sicuro che una serie sia I (2) o richieda due volte la differenziazione per renderla stazionaria? I risultati per ulteriori analisi varieranno se la serie è differenziata una o due volte. Il tuo post suggerisce di usare KPSS ma ci sono alternative? Grazie. – Anusha