Détermination des paramètres (p, d, q) pour la modélisation ARIMA

10

Je suis relativement nouveau dans les statistiques et R. J'aimerais connaître le processus pour déterminer les paramètres ARIMA pour mon jeu de données. Pouvez-vous m'aider à comprendre la même chose en utilisant R et théoriquement (si possible)?

La plage de données s'étend du 12 janvier au 14 mars et décrit les ventes mensuelles. Voici l'ensemble de données:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60105 87 93110 71158 52 33 68 82 88 84

Et voici la tendance:

entrez la description de l'image ici

Les données ne présentent pas de tendance, de comportement saisonnier ou de cyclicité.

Raunak87
la source

Réponses:

9

En général, fouillez dans un manuel d'analyse de séries chronologiques avancé (les livres d'introduction vous indiqueront généralement de simplement faire confiance à votre logiciel), comme Time Series Analysis by Box, Jenkins & Reinsel. Vous pouvez également trouver des détails sur la procédure Box-Jenkins en recherchant sur Google. Notez qu'il existe d'autres approches que Box-Jenkins, par exemple celles basées sur AIC.

Dans R, vous convertissez d'abord vos données en un objet ts(série chronologique) et dites à R que la fréquence est de 12 (données mensuelles):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Vous pouvez tracer les fonctions d'autocorrélation (partielles):

acf(sales)
pacf(sales)

Ceux-ci ne suggèrent aucun comportement AR ou MA.

Ensuite, vous ajustez un modèle et inspectez-le:

model <- auto.arima(sales)
model

Voir ?auto.arimapour de l'aide. Comme nous le voyons, auto.arimachoisit un modèle simple (0,0,0), car il ne voit ni tendance ni saisonnalité, ni AR ni MA dans vos données. Enfin, vous pouvez prévoir et tracer la série chronologique et prévoir:

plot(forecast(model))

prévoir

Regardez ?forecast.Arima(notez le A majuscule!).

Ce manuel en ligne gratuit est une excellente introduction à l'analyse et à la prévision des séries chronologiques à l'aide de R. Très recommandé.

Stephan Kolassa
la source
Salut Stephan, j'ai ajouté les données et l'intrigue pour mon jeu de données. Comme vous pouvez le voir, je n'ai que 27 points de données, je suis donc en train de courir ici. Pourriez-vous suggérer quelque chose ici.
Raunak87
J'ai édité la réponse. Votre série ne présente pas beaucoup de structure, vous ne pouvez donc pas faire grand chose. Comme vous avez essentiellement du bruit et rien d'autre, vous obtenez de grands intervalles de prédiction.
Stephan Kolassa
4

Deux choses: votre série chronologique est mensuelle, vous avez besoin d'au moins 4 ans de données pour une estimation ARIMA raisonnable, car 27 points reflétés ne donnent pas la structure d'autocorrélation. Cela peut également signifier que vos ventes sont affectées par certains facteurs externes, plutôt que d'être corrélées avec sa propre valeur. Essayez de savoir quel facteur affecte vos ventes et ce facteur est mesuré. Ensuite, vous pouvez exécuter une régression ou VAR (Vector Autoregression) pour obtenir des prévisions.

Si vous n'avez absolument rien d'autre que ces valeurs, votre meilleure façon est d'utiliser une méthode de lissage exponentiel pour obtenir une prévision naïve. Le lissage exponentiel est disponible dans R.

Deuxièmement, ne voyez pas les ventes d'un produit isolément, les ventes de deux produits peuvent être corrélées, par exemple l'augmentation des ventes de café peut refléter une diminution des ventes de thé. utilisez les autres informations sur le produit pour améliorer vos prévisions.

Cela se produit généralement avec les données de vente dans la chaîne de distribution ou d'approvisionnement. Ils ne montrent pas beaucoup de structure d'autocorrélation dans la série. Alors que d'autre part, des méthodes comme ARIMA ou GARCH fonctionnent généralement avec des données boursières ou des indices économiques où vous avez généralement une autocorrélation.

NG_21
la source
3

C'est vraiment un commentaire mais dépasse la limite permise donc je la poste comme une quasi-réponse car elle suggère la bonne façon d'analyser les données de séries chronologiques. .

Le fait bien connu mais souvent ignoré ici et ailleurs est que l'ACF / PACF théorique qui est utilisé pour formuler un modèle provisoire ARIMA prémisse sans impulsions / changements de niveau / impulsions saisonnières / tendances de l'heure locale. De plus, il présente des paramètres constants et une variance d'erreur constante dans le temps. Dans ce cas, la 21e observation (valeur = 158) est facilement signalée comme une valeur aberrante / impulsion et un ajustement suggéré de -80 donne une valeur modifiée de 78. L'ACF / PACF résultant de la série modifiée montre peu ou pas de preuve de structure stochastique (ARIMA). Dans ce cas, l'opération a été un succès mais le patient est décédé. L'échantillon ACF est basé sur la covariance / variance et une variance indûment gonflée / gonflée donne un biais vers le bas à l'ACF. Le professeur Keith Ord l'a appelé une fois «l'effet Alice au pays des merveilles»

IrishStat
la source
2

Comme l'a souligné Stephan Kolassa, il n'y a pas beaucoup de structure dans vos données. Les fonctions d'autocorrélation ne suggèrent pas de structure ARMA (voir acf(sales), pacf(sales)) et forecast::auto.arimane choisissent aucun ordre AR ou MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Néanmoins, notez que le zéro de normalité dans les résidus est rejeté au niveau de signification de 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Remarque: JarqueBera.testbasé sur la fonction jarque.bera.testdisponible dans le package tseries.

L'inclusion de la valeur aberrante additive à l'observation 21 qui est détectée avec tsoutliersrend la normalité dans les résidus. Ainsi, l'estimation de l'ordonnée à l'origine et la prévision ne sont pas affectées par l'observation périphérique.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077
javlacalle
la source
1
Il n'est pas logique d'utiliser un test de Jarque Bera avec , car (i) il repose sur une approximation asymptotique qui ne démarre que lorsque est bien dans les centaines, et (ii) un test d'hypothèse formelle vraiment répond à la mauvaise question (nous savons que les données ne seront pas exactement normales; la question est vraiment à quel point nous pourrions être affectés par une non-normalité potentielle, dont le test ne parle pas.nn=12n
Glen_b -Reinstate Monica