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.
la source
Réponses:
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 .
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=yt−yt−1 new.data=yt/yt−1−1
la source
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é?