Il y a probablement plus d'un malentendu sérieux dans cette question, mais il ne vise pas à obtenir les bons calculs, mais plutôt à motiver l'apprentissage des séries chronologiques avec une certaine concentration à l'esprit.
En essayant de comprendre l'application des séries chronologiques, il semble que la décroissance des données rend la prévision des valeurs futures invraisemblable. Par exemple, la gtemp
série chronologique du astsa
package ressemble à ceci:
La tendance à la hausse des dernières décennies doit être prise en compte lors du traçage des valeurs futures prévues.
Cependant, pour évaluer les fluctuations des séries chronologiques, les données doivent être converties en une série chronologique stationnaire. Si je modèle comme un processus ARIMA avec différentiateur (Je suppose que cela se fait à cause du milieu 1
dans order = c(-, 1, -)
) comme dans:
require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))
puis essayez de prédire les valeurs futures ( ans), je manque la composante de tendance à la hausse:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
Sans nécessairement aborder l'optimisation réelle des paramètres ARIMA particuliers, comment puis-je récupérer la tendance à la hausse dans la partie prédite du graphique?
Je soupçonne qu'il y a un OLS "caché" quelque part, ce qui expliquerait cette non-stationnarité?
Je suis tombé sur le concept de drift
, qui peut être incorporé dans la Arima()
fonction du forecast
package, rendant un tracé plausible:
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)
qui est plus opaque quant à son processus de calcul. Je vise une sorte de compréhension de la façon dont la tendance est incorporée dans les calculs de l'intrigue. Est l' un des problèmes qu'il n'y drift
en arima()
(minuscules)?
En comparaison, en utilisant l'ensemble de données AirPassengers
, le nombre prévu de passagers au-delà du point final de l'ensemble de données est tracé en tenant compte de cette tendance à la hausse:
Le code est:
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))
rendre une intrigue qui a du sens.