Tracciamento dei valori previsti nelle serie temporali ARIMA in R


10

Probabilmente ci sono più di un grave fraintendimento in questa domanda, ma non è pensato per ottenere i calcoli giusti, ma piuttosto per motivare l'apprendimento di serie temporali con una certa attenzione.

Nel tentativo di comprendere l'applicazione delle serie temporali, sembra che la tendenza a ridurre i dati renda improbabile la previsione di valori futuri. Ad esempio, le gtempserie temporali dal astsapacchetto si presentano così:

inserisci qui la descrizione dell'immagine

La tendenza al rialzo negli ultimi decenni deve essere presa in considerazione quando si tracciano i valori futuri previsti.

Tuttavia, per valutare le fluttuazioni delle serie storiche, i dati devono essere convertiti in serie storiche stazionarie. Se io modello IT come un processo ARIMA con differenziazione (credo che questo è effettuata a causa del mezzo 1in order = c(-, 1, -)) come in:

require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))

e poi provo a prevedere i valori futuri ( anni), mi manca la componente di tendenza al rialzo:50

pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))

inserisci qui la descrizione dell'immagine

Senza necessariamente toccare l'ottimizzazione effettiva dei particolari parametri ARIMA, come posso recuperare la tendenza al rialzo nella parte prevista della trama?

Ho il sospetto che ci sia un OLS "nascosto" da qualche parte, che spiegherebbe questa non stazionarietà?

Mi sono imbattuto nel concetto di drift, che può essere incorporato nella Arima()funzione del forecastpacchetto, rendendo una trama plausibile:

par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1), 
             include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1), 
             include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)

inserisci qui la descrizione dell'immagine

che è più opaco per quanto riguarda il suo processo computazionale. Sto cercando una sorta di comprensione di come la tendenza è incorporata nei calcoli della trama. È uno dei problemi che non c'è driftin arima()(minuscolo)?


In confronto, utilizzando il set di dati AirPassengers, il numero previsto di passeggeri oltre l'endpoint del set di dati viene tracciato tenendo conto di questa tendenza al rialzo:

inserisci qui la descrizione dell'immagine

Il codice è:

fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))

rendere una trama sensata.


1
Direi che se pensi di avere una serie in cui la tendenza è cambiata nel tempo, i modelli ARIMA potrebbero non essere il modo migliore per avvicinarsi alla loro previsione. In assenza di conoscenza della materia (che potrebbe portare a modelli migliori), sarei propenso a guardare modelli spaziali di stato; in particolare varianti del modello strutturale di base per qualcosa di simile. Molte discussioni sui modelli spaziali statali possono essere difficili da seguire, ma i libri e gli articoli di Andrew Harvey sono abbastanza leggibili (il libro Previsioni, Modelli strutturali di serie temporali e il filtro Kalman è piuttosto buono, per esempio). ... ctd
Glen_b -Reinstate Monica

ctd ... Ci sono alcuni altri autori che fanno abbastanza bene, ma anche i migliori lo rendono un po 'più complicato di quanto debba essere per un principiante.
Glen_b

Grazie, @Glen_b. Sto solo cercando di ottenere un talento per le serie storiche e, come in molti argomenti di matematica, la mancanza di preamboli motivanti è un assassino. Tutte le serie temporali di cui potremmo davvero preoccuparci sembrano aumentare o diminuire: popolazioni, GOP, borsa, temperature globali. E capisco che vuoi liberarti delle tendenze (potrebbe essere per un secondo) per vedere modelli ciclici e stagionali. Ma il ricollocamento dei risultati con la tendenza generale a fare previsioni è implicito o non affrontato come obiettivo.
Antoni Parellada,

I commenti di Rob Hyndman qui sono rilevanti. Potrei tornare e approfondire un po 'quello.
Glen_b

Il post sul blog di Rob J. Hyndman "Costanti e modelli ARIMA in R" è probabilmente tutto ciò che devi sapere. Sarei curioso di sentire la tua opinione dopo aver esplorato il post sul blog.
Richard Hardy,

Risposte:


1

Ecco perché non dovresti fare ARIMA o altro su dati non stazionari.

Rispondere a una domanda sul perché le previsioni di ARIMA si stiano appiattendo è abbastanza ovvio dopo aver esaminato l'equazione di ARIMA e una delle ipotesi. Questa è una spiegazione semplificata, non trattarla come una prova matematica.



yt=βyt-1+α+ε
β|β|1βyt-1=0yt=conSt=α

new.dun'tun'=yt-yt-1new.dun'tun'=yt/yt-1-1

 require(tseries)
 require(forecast)
 require(astsa)
 dif<-diff(gtemp)
 fit = auto.arima(dif)
 pred = predict(fit, n.ahead = 50)
 ts.plot(dif, pred$pred, lty = c(1,3), col=c(5,2))
 gtemp_pred<-gtemp[length(gtemp)]
 for(i in 1:length(pred$pred)){
   gtemp_pred[i+1]<-gtemp_pred[i]+pred$pred[i]
 }
 plot(c(gtemp,gtemp_pred),type="l")

inserisci qui la descrizione dell'immagine


α

ααα

OK. Dovrò giocare un po 'con il tuo codice per vedere cosa sta cercando di illustrare in relazione all'equazione ts. Non ho lavorato con ts, ed è da un po 'che non pubblico più la domanda.
Antoni Parellada,

Dopo aver giocato un po 'con il codice, vedo cosa sta succedendo. Puoi includere i coefficienti di adattamento, che sono AR1 = 0.257; MA = - 0.7854, nell'equazione del modello ARIMA per apprezzare appieno il processo di generazione della linea inclinata della coda prevista o prevista alla fine del diagramma?
Antoni Parellada,

y^t=Σiopβioyt-io+Σjqγjεt-j+α+εt
y^t=βyt-1+γεt-1+α+εt
β=0,257γ=-0,7854α=0,0064
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.