2017-07-09 2 views
1

Je suis un débutant dans la langue R, j'ai une liste de données mensuelles pour les demandes reçues quantités par produit, comment je peux faire la prévision avec le modèle ARIMA (meilleur modèle) peut tout type de données . J'ai utilisé le code ci-dessous mais je ne sais pas si les résultats sont corrects et fiables ou si je dois changer un autre modèle ou un simple changement dans ce code.Forcasting Données avec Arima Modèle en R

Script:

#Step 1: Plot Qty data as time series 

data <- structure(c(3108L, 2508L, 3516L, 3828L, 3755L, 6612L, 6708L, 
    3624L, 4032L, 4104L, 3000L, 3204L, 2640L, 2124L, 1884L, 12382L, 
    1488L, 1356L, 2028L, 1764L, 1524L, 7248L, 1248L, 816L, 804L, 
    708L, 756L, 972L, 4104L, 1296L, 2268L, 588L, 768L, 792L, 744L, 
    1680L, 684L, 2052L, 672L, 492L, 744L, 768L, 828L, 936L, 840L, 
    5364L, 408L, 528L, 60L, 612L, 684L, 852L, 756L, 972L), 
    .Tsp = c(2013, 2017.41666666667, 12), class = "ts")  

plot(data, xlab='Years', ylab = ' Qty ') 


# Step 2: Difference data to make data stationary on mean (remove trend) 
plot(diff(data),ylab='Differenced Qty') 

#Step 3: log transform data to make data stationary on variance 
plot(log10(data),ylab='Log (Qty)') 

#Step 4: Difference log transform data to make data stationary on both mean and variance 
plot(diff(log10(data)),ylab='Differenced Log (Qty)') 


# Step 5: Plot ACF and PACF to identify potential AR and MA model 
par(mfrow = c(1,2)) 
acf(ts(diff(log10(data))),main='ACF Qty') 
pacf(ts(diff(log10(data))),main='PACF Qty ') 

# Step 6: Identification of best fit ARIMA model 

require(forecast) 
ARIMAfit = auto.arima(log10(data), approximation=FALSE,trace=FALSE) 
summary(ARIMAfit) 


# Step 6: Forecast sales using the best fit ARIMA model 
par(mfrow = c(1,1)) 
pred = predict(ARIMAfit, n.ahead = 36) 
pred 
plot(data,type='l',xlim=c(2004,2018),ylim=c(1,1600),xlab = 'Year',ylab = ' Qty ') 
lines(10^(pred$pred),col='blue') 
lines(10^(pred$pred+2*pred$se),col='orange') 
lines(10^(pred$pred-2*pred$se),col='orange') 

# Step 7: Plot ACF and PACF for residuals of ARIMA model to ensure no more information is left for extraction 
par(mfrow=c(1,2)) 
acf(ts(ARIMAfit$residuals),main='ACF Residual') 
+0

Est-ce que 'plot (decompose (data)'.) Il y a une forte composante saisonnière à vos données, pensez à faire quelque chose avec ça – AkselA

+0

Veuillez lire [Dans quelles circonstances puis-je ajouter "urgent" ou d'autres expressions similaires? Afin d'obtenir des réponses plus rapides?] (// meta.stackoverflow.com/q/326569) - le résumé est que ce n'est pas un moyen idéal de s'adresser aux volontaires, et il est probablement contre-productif pour obtenir des réponses. – halfer

+0

Désolé mais c'est la première fois que j'ai utilisé Stackoverflow, Ok merci pour vos conseils –

Répondre

0

Tu fais un peu plus compliqué que cela doit être. auto.arima déterminera le nombre de termes AR, MA et de différenciation à utiliser automatiquement.

Here is a link to read more on it.

En fin de compte, si vous voulez juste le code pour l'ajustement si vous pouvez le faire

library(forecast) 
data = ts(data[,2],start = c(2013,1),frequency = 12) 
model = auto.arima(data) 

Nous pouvons regarder le résumé du modèle pour déterminer quel modèle il convient

> summary(model) 
Series: dat 
ARIMA(0,1,1)      

Coefficients: 
      ma1 
     -0.8501 
s.e. 0.0591 

sigma^2 estimated as 4166267: log likelihood=-479.27 
AIC=962.53 AICc=962.77 BIC=966.47 

Donc, nous avons ARIMA (0, 1, 1). Il y a une différence et un terme MA dans le modèle qu'il a choisi automatiquement.

Si nous prévoyons le modèle que nous pouvons tracer comme si

plot(forecast(model,h=12),include=24) 

enter image description here

La raison pour laquelle nous ne voyons pas les pointes comme nous l'avons fait dans les données précédentes est que le modèle n » t y compris tous les paramètres saisonniers. En regardant l'intrigue, il ne semble pas que les pics se produisent dans le même laps de temps. Si les pics sont liés à un événement, ceux-ci doivent être inclus dans le modèle et ceci peut être fait en utilisant le paramètre xreg ayant un indicateur binaire pour l'événement.

+0

S'il vous plaît regardez mon deuxième message –

+0

@TarhouniBilel Ce n'est pas une erreur, ce n'est pas vraiment un bon ajustement – Kristofersen

+0

Merci, je vais essayer d'ajouter le xreg dans le modèle –