2016-12-12 2 views
2

J'utilise auto.arima() du paquet forecast et je commence à avoir des résultats étranges avec la prédiction.Pourquoi est-ce que je vois un saut dans mes prévisions de séries chronologiques?

library(forecast) 

x <- structure(c(1.92, 2.1, 1.73, 1.35, 1.29, 1.35, 1.42, 1.46, 1.6, 
1.67, 1.98, 1.78, 1.77, 2.35, 1.93, 1.43, 1.29, 1.26, 1.93, 2.33, 
2.22, 2.19, 2.15, 2.25, 3.12, 3.32, 2.72, 2.28, 2.28, 2.16, 2.81, 
3.12, 2.85, 2.98, 3.3, 3.06, 3.56, 3.81, 3.48, 2.64, 2.91, 3.35, 
3.73, 3.58, 4, 3.94, 3.79, 3.85), .Tsp = c(2012, 2015.91666666667, 
12), class = "ts") 

fit <- auto.arima(x) 

plot(forecast(fit, 12)) #forecast and actual data 
f2 <- fitted.values(fit) 
lines(f2, col="red") #add predicted values during training 

enter image description here

Je ne comprends pas comment la valeur ajustée (ligne rouge) est très proche de la valeur observée (noir) mais il y a un tel grand saut dans la première prévision.

Des idées pour lesquelles nous voyons ce saut? J'ai vu d'autres posts sur Stack Exchange où l'option xreg a été utilisée mais cela ne fonctionne pas, donc je n'ai pas pu retrouver un post similaire.

+0

Bien sûr que non. La question est de savoir pourquoi l'écart entre la dernière valeur prédite en rouge et la première valeur prédite en bleu est si grand. Est-ce simplement que les lignes ne sont pas connectées et que l'écart semble important ou existe-t-il un autre problème? Les prédictions provenant de la fonction forecast() sont très éloignées des données réelles de 2016. Les prédictions d'entraînement sont assez proches. Le saut de Dec à Jan n'est jamais aussi important. – stats217

+0

Je ne pense pas qu'il y ait de question de programmation ici. Il semble que vous ayez des problèmes pour interpréter les résultats de votre modèle. Si vous avez des questions sur les modèles statistiques sous-jacents, vous devriez probablement poster votre question sur [stats.se]. – MrFlick

Répondre

0

En général, j'ai tendance à croire que auto.arima surclasse légèrement les données. Une analyse exploratoire rapide avec ACF montre que (0,1,2)(0,1,0)[12] est déjà un modèle décent. Je vais utiliser arima0 de la base R pour adapter ce modèle:

fit0 <- arima0(x, order = c(0,1,2), seasonal = c(0,1,0)) 

Prévision/prévision se fait avec predict.arima0:

pred <- predict(fit0, n.ahead = 12, se.fit = FALSE) 

terrain de Let séries observées et prévoir ensemble:

ts.plot(x, pred, col = 1:2) 

arima0

Il y a encore Je saute. Mais la variation est assez raisonnable, comparée à la variabilité de la série.

Rien à redire. Quand nous prévoyons x[49] de x[1:48], ce sera différent de x[48]. En règle générale, (0,1,2)(0,1,0)[12] a une tendance linéaire plus un effet saisonnier. Il permet de visualiser votre série chronologique et la saison de prévision par saison:

ts.plot(window(x, 2012, 2012 + 11/12), 
     window(x, 2013, 2013 + 11/12), 
     window(x, 2014, 2014 + 11/12), 
     window(x, 2015, 2015 + 11/12), 
     pred, col = 1:5) 

by season