Représentation graphique des valeurs prédites dans les séries temporelles ARIMA dans R

10

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 gtempsérie chronologique du astsapackage ressemble à ceci:

entrez la description de l'image ici

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 1dans 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:50

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

entrez la description de l'image ici

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 forecastpackage, 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)

entrez la description de l'image ici

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 driften 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:

entrez la description de l'image ici

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.

Antoni Parellada
la source
1
Je dirais que si vous pensez que vous avez une série où la tendance a changé au fil du temps, les modèles ARIMA ne sont peut-être pas le meilleur moyen d'en approcher la prédiction. En l'absence de connaissance du sujet (ce qui pourrait conduire à de meilleurs modèles), je serais enclin à examiner les modèles d'espace d'état; dans des variantes particulières du modèle structurel de base pour quelque chose comme ça. De nombreuses discussions sur les modèles d'espace d'état peuvent être difficiles à suivre, mais les livres et les articles d'Andrew Harvey sont assez lisibles (le livre Forecasting, Structural Time Series Models and the Kalman Filter est assez bon, par exemple). ... ctd
Glen_b -Reinstate Monica
ctd ... Il y a quelques autres auteurs qui s'en sortent assez bien, mais même les meilleurs rendent la tâche un peu plus compliquée que nécessaire pour un débutant.
Glen_b -Reinstate Monica
Merci, @Glen_b. J'essaie juste d'avoir un flair pour les séries chronologiques, et comme dans de nombreux sujets mathématiques, le manque de préambule motivant est un tueur. Toutes les séries chronologiques dont nous pouvons vraiment nous soucier semblent évoluer à la hausse ou à la baisse - populations, GOP, bourse, températures mondiales. Et je comprends que vous voulez vous débarrasser des tendances (peut-être une seconde) pour voir les modèles cycliques et saisonniers. Mais l'épissage des résultats avec la tendance générale à faire des prédictions est implicite ou n'est pas considéré comme un objectif.
Antoni Parellada
Les commentaires de Rob Hyndman ici sont pertinents. Je reviendrai peut-être un peu là-dessus.
Glen_b -Reinstate Monica
Le billet de blog de Rob J. Hyndman "Constantes et modèles ARIMA en R" est probablement tout ce que vous devez savoir. Je serais curieux de vous entendre une fois que vous aurez exploré le billet de blog.
Richard Hardy

Réponses:

1

C'est pourquoi vous ne devriez pas faire ARIMA ou quoi que ce soit sur des données non stationnaires.

La réponse à une question expliquant pourquoi les prévisions ARIMA deviennent plates est assez évidente après avoir examiné l'équation ARIMA et l'une des hypothèses. Ceci est une explication simplifiée, ne la traitez pas comme une preuve mathématique.

Considérons le modèle AR (1), mais cela est vrai pour tout ARIMA (p, d, q).
L'équation de AR (1) est: et l'hypothèse sur est que . Avec un tel β, chaque point suivant est plus proche de 0 que le précédent jusqu'à ce que , et .

yt=βyt1+α+ϵ
β|β|1βyt1=0yt=const=α

Dans ce cas, comment traiter ces données? Vous devez le rendre stationnaire par différenciation ( ) ou en calculant le% de changement ( ). Vous modélisez les différences, pas les données elles-mêmes. Les différences deviennent constantes avec le temps, c'est votre tendance. n e w . d a t a = y t / y t - 1 - 1new.data=ytyt1new.data=yt/yt11

 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")

entrez la description de l'image ici

mbt
la source
Je vous remercie. En un mot, serait la pente du tracé final? α
Antoni Parellada
Non. Je pense que vous l'avez confondu, car la pente est souvent notée . Cependant, si vous demandez quelle est la relation entre ce et une pente, la réponse ne sera pas triviale. En résumé, si vous aviez choisi la différenciation, serait une tangente d'une pente, si vous aviez choisi le% de changement il n'y aurait pas de pente, car la tendance ne serait pas linéaire. α αααα
mbt
D'ACCORD. Je vais devoir jouer un peu avec votre code pour voir ce qu'il essaie d'illustrer par rapport à l'équation ts. Je n'ai pas travaillé avec ts, et cela fait longtemps que je n'ai pas posté la question.
Antoni Parellada
Après avoir joué un peu avec le code, je vois ce qui se passe. Pouvez-vous inclure les coefficients d'ajustement, qui sont AR1 = 0.257; MA = - 0.7854, dans l'équation du modèle ARIMA pour apprécier pleinement le processus de génération de la ligne inclinée de queue projetée ou prédite à la fin de votre tracé?
Antoni Parellada
Sûr. Dans ma réponse, je n'ai mis que l'équation AR (1). L'équation pour l'ensemble du processus ARMA (p, q) est où la première somme est AR (p) la partie et la deuxième somme sont le processus MA (q). Nous avons ici ARMA (1,1), donc c'est moins complexe: où , , . y t=βyt-1+γεt-1+α+εtβ=0,257γ=-0,7854α=0,0064
y^t=ipβiyti+jqγjϵtj+α+ϵt
y^t=βyt1+γϵt1+α+ϵt
β=0.257γ=0.7854α=0.0064
mbt