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 gtemp
serie temporali dal astsa
pacchetto si presentano così:
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 1
in 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:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
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 forecast
pacchetto, 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)
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'è drift
in 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:
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.