J'essaie de faire une analyse des séries chronologiques et je suis nouveau dans ce domaine. J'ai un décompte quotidien d'un événement de 2006-2009 et je veux y adapter un modèle de série chronologique. Voici les progrès que j'ai réalisés:
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)
L'intrigue résultante que j'obtiens est:
Afin de vérifier s'il y a une saisonnalité et une tendance dans les données ou non, je suis les étapes mentionnées dans cet article :
ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal
et dans le blog de Rob J Hyndman :
library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")
deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df
#P value
1-pchisq(deviance,df)
Les deux cas indiquent qu'il n'y a pas de saisonnalité.
Lorsque je trace les ACF et PACF de la série, voici ce que j'obtiens:
Mes questions sont:
Est-ce la façon de gérer les données de séries chronologiques quotidiennes? Cette page suggère que je devrais examiner les tendances hebdomadaires et annuelles, mais l'approche n'est pas claire pour moi.
Je ne sais pas comment procéder une fois que j'ai les parcelles ACF et PACF.
Puis-je simplement utiliser la fonction auto.arima?
fit <- arima (myts, order = c (p, d, q)
***** Mise à jour des résultats Auto.Arima ******
Lorsque je modifie la fréquence des données à 7 selon les commentaires de Rob Hyndman ici , auto.arima sélectionne un modèle ARIMA saisonnier et sort:
Series: timeSeriesObj
ARIMA(1,1,2)(1,0,1)[7]
Coefficients:
ar1 ma1 ma2 sar1 sma1
0.89 -1.7877 0.7892 0.9870 -0.9278
s.e. NaN NaN NaN 0.0061 0.0162
sigma^2 estimated as 21.72: log likelihood=-4319.23
AIC=8650.46 AICc=8650.52 BIC=8682.18
****** Vérification de la saisonnalité mise à jour ******
Lorsque je teste la saisonnalité avec la fréquence 7, elle produit True mais avec la saisonnalité 365,25, elle produit false. Est-ce suffisant pour conclure à un manque de saisonnalité annuelle?
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
résultats:
True
tandis que
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
résultats:
False
la source
str(x)
donne?R
simple n'a pas la capacité de la gérer. Je rechercherais des solutions commerciales s'il y a un coût d'inventaire / de fabrication élevé pour le produit que vous essayez de prévoir.R
a des limites sévères pour la prévision des tâches comme la vôtre. Regardez les questions sur les prévisions quotidiennes ailleurs sur ce site.Réponses:
Votre ACF et votre PACF indiquent que vous avez au moins une saisonnalité hebdomadaire, ce qui est illustré par les pics aux décalages 7, 14, 21 et ainsi de suite.
Vous pouvez également avoir une saisonnalité annuelle, bien que cela ne ressorte pas de votre série chronologique.
Votre meilleur pari, étant donné les saisonnalités potentiellement multiples, peut être un
tbats
modèle, qui modélise explicitement plusieurs types de saisonnalité. Chargez leforecast
package:Votre sortie de
str(x)
indique quex
ne contient pas encore d'informations sur la possibilité d'avoir plusieurs saisonnalités. Regardez?tbats
et comparez la sortie destr(taylor)
. Attribuez les saisonnalités:Vous pouvez maintenant adapter un
tbats
modèle. (Soyez patient, cela peut prendre un certain temps.)Enfin, vous pouvez prévoir et tracer:
Vous ne devriez pas utiliser
arima()
ouauto.arima()
, puisque ceux - ci ne peuvent gérer un seul type de saisonnalité: soit hebdomadaire ou annuelle. Ne me demandez pas ce queauto.arima()
feraient vos données. Il peut choisir l'une des saisonnalités ou les ignorer complètement.EDIT pour répondre à des questions supplémentaires à partir d'un commentaire:
Le calcul d'un modèle sur des données mensuelles pourrait être une possibilité. Ensuite, vous pourriez, par exemple, comparer les AIC entre les modèles avec et sans saisonnalité.
Cependant, je préfère utiliser un échantillon de résistance pour évaluer les modèles de prévision. Tenez les 100 derniers points de données. Ajustez un modèle avec une saisonnalité annuelle et hebdomadaire au reste des données (comme ci-dessus), puis ajustez-en un avec seulement une saisonnalité hebdomadaire, par exemple, en utilisant
auto.arima()
unts
avecfrequency=7
. Prévision en utilisant les deux modèles dans la période d'exclusion. Vérifiez laquelle a une erreur plus faible, en utilisant MAE, MSE ou tout ce qui est le plus pertinent pour votre fonction de perte. S'il y a peu de différence entre les erreurs, optez pour le modèle plus simple; sinon, utilisez celui avec l'erreur la plus faible.La preuve du pudding se trouve dans l'alimentation et la preuve du modèle de série chronologique dans les prévisions.
Pour améliorer les choses, n'utilisez pas un seul échantillon d'exclusion (qui peut être trompeur, étant donné la légère hausse à la fin de votre série), mais utilisez des prévisions d'origine glissantes, également connues sous le nom de «validation croisée des séries chronologiques» . (Je recommande fortement que tout le manuel de prévision en ligne gratuit .
Les modèles ARIMA standard gèrent la saisonnalité par différenciation saisonnière. Pour les données mensuelles saisonnières, vous ne modéliseriez pas la série chronologique brute, mais la série chronologique des différences entre mars 2015 et mars 2014, entre février 2015 et février 2014 et ainsi de suite. (Pour obtenir des prévisions à l'échelle d'origine, vous devez bien sûr à nouveau faire la différence.)
Il n'y a pas de moyen immédiatement évident d'étendre cette idée à plusieurs saisons.
Bien sûr, vous pouvez faire quelque chose en utilisant ARIMAX, par exemple, en incluant des variables mensuelles pour modéliser la saisonnalité annuelle, puis modéliser les résidus en utilisant ARIMA saisonnier hebdomadaire. Si vous voulez le faire dans R, utilisez
ts(x,frequency=7)
, créez une matrice de variables mensuelles et introduisez-la dans lexreg
paramètre deauto.arima()
.Je ne me souviens d'aucune publication qui étend spécifiquement ARIMA à plusieurs saisons, même si je suis sûr que quelqu'un a fait quelque chose dans le sens de mon paragraphe précédent.
la source
R
mesure où ilR
n'a pas la capacité de gérer l'ARIMA multisaisonnier.tbats
modèle similaire .Le meilleur moyen de décomposer les données saisonnières à l'aide des packages R existants est ceemdan () dans Rlibeemd. Cette technique extrait la saisonnalité de plusieurs périodes. Les valeurs par défaut fonctionnent bien. Il utilise la transformée de Hilbert-Huang au lieu de la transformée de Fourier. La transformée de Fourier présente un grave inconvénient en ce qu'elle ne peut traiter des données linéaires fixes que lorsque la plupart des séries d'intérêt ne le sont pas. Par exemple, la marche aléatoire y_t = y_ {t-1} + e_t est la marche aléatoire la plus simple et fréquemment rencontrée. D'autres méthodes maintiennent l'amplitude de la variation saisonnière fixe lorsqu'elle varie souvent dans la pratique.
la source
Les questions que vous soulevez ont été traitées dans R Time Series Forecasting: Questions concernant ma sortie . Veuillez lire attentivement ma réponse détaillée et tous les commentaires de la discussion, y compris ceux de la question d'origine, car je pense qu'ils sont pertinents pour votre problème. Vous pouvez en fait prendre les données fournies dans le message et les utiliser comme moment d'enseignement pour vous-même. Utilisez toute la discussion comme une introduction à ce que vous devez faire.
la source