web-dev-qa-db-fra.com

Modélisation de séries chronologiques R sur des données hebdomadaires à l'aide de l'objet ts ()

J'essaie de faire de la modélisation et des prévisions de séries chronologiques en utilisant R sur la base de données hebdomadaires comme ci-dessous:

biz week     Amount        Count
2006-12-27   973710.7     816570
2007-01-03  4503493.2    3223259
2007-01-10  2593355.9    1659136
2007-01-17  2897670.9    2127792
2007-01-24  3590427.5    2919482
2007-01-31  3761025.7    2981363
2007-02-07  3550213.1    2773988
2007-02-14  3978005.1    3219907
2007-02-21  4020536.0    3027837
2007-02-28  4038007.9    3191570
2007-03-07  3504142.2    2816720
2007-03-14  3427323.1    2703761
...
2014-02-26  99999999.9   1234567

À propos de mes données: Comme vu ci-dessus, chaque semaine est étiquetée par le premier jour de la semaine (ma semaine commence le mercredi et se termine le mardi). Quand je construis mon objet ts, j'ai essayé

ts <- ts(df, frequency=52, start=c(2007,1))

le problème que j'ai est:

1) Une année peut avoir 53 semaines, donc frequency=52 Ne fonctionnera pas pendant ces années;

2) Ma semaine/date de départ est le 2006-12-27, comment dois-je définir le paramètre de démarrage? start=c(2006,52) ou start=c(2007,1) depuis la semaine du 27/12/2006 franchit-elle vraiment la limite de l'année? Aussi, pour la modélisation, est-il préférable d'avoir des données complètes sur l'année (disons pour 2007 mon année de début si je n'ai que des données sur une partie de l'année), est-il préférable de ne pas utiliser 2007, plutôt de commencer par 2008? Qu'en est-il de 2014: comme ce n'est pas encore une année complète, dois-je utiliser ce que j'ai pour la modélisation ou non? Quoi qu'il en soit, j'ai toujours un problème avec l'inclusion ou non de ces semaines dans la limite de l'année comme 2006-12-27. Dois-je l'inclure comme wk 1 Pour 2007 ou la dernière semaine de 2006?

3) Lorsque j'utilise ts <- ts(df, frequency=52, start=c(2007,1)) et que je l'imprime, j'ai obtenu les résultats ci-dessous, donc au lieu de 2007.01, 2007.02, 2007.52 ..., j'ai obtenu 2007.000, 2007.019, ..., dont il obtient 1/52=0.019. C'est mathématiquement correct mais pas vraiment facile à interpréter. Existe-t-il un moyen de l'étiqueter comme la date elle-même, tout comme un bloc de données ou au moins 2007 wk1, 2007 wk2...

=========

Time Series:
Start = c(2007, 1) 
End = c(2014, 11) 
Frequency = 52 
          Amount        Count
2007.000   645575.4     493717
2007.019  2185193.2    1659577
2007.038  1016711.8     860777
2007.058  1894056.4    1450101
2007.077  2317517.6    1757219
2007.096  2522955.8    1794512
2007.115  2266107.3    1723002 

4) Mon objectif est de modéliser ces données hebdomadaires puis d'essayer de les décomposer pour voir les composantes saisonnières. Il semble que je doive utiliser la fonction ts() pour convertir en un objet ts sp que je puisse utiliser la fonction decompose(). J'ai essayé xts() et j'ai eu une erreur indiquant " time series has no or less than 2 periods". Je suppose que c'est parce que xts() ne me laisse pas spécifier la fréquence, non?

xts <- xts(df,order.by=businessWeekDate)

5) J'ai cherché la réponse dans ce forum et ailleurs aussi; la plupart des exemples sont mensuels, et bien qu'il y ait des questions hebdomadaires sur les séries chronologiques, aucune des réponses n'est simple. J'espère que quelqu'un pourra aider à répondre à mes questions ici.

27
user3281664

L'utilisation de fréquences non entières fonctionne plutôt bien et est compatible avec la plupart des modèles (auto.arima, ets, ...). Pour la date de début, j'utilise simplement les fonctions de commodité de lubrification. L'importance ici est d'être cohérent lorsque vous travaillez avec plusieurs séries chronologiques de dates de début et de fin potentiellement différentes.

library(lubridate)
ts(df$Amount, 
   freq=365.25/7, 
   start=decimal_date(ymd("2006-12-27")))
19
nassimhddd

Assurez-vous d'abord que vos données contiennent exactement 52 données par an. Pour ce faire, identifiez les années avec 53 données et supprimez celle qui est la moins importante pour votre modèle de saisonnalité (par exemple, ne supprimez pas une semaine en décembre si vous souhaitez vérifier la saisonnalité des ventes de Noël (!)

Xts est un bon format car il est plus flexible, cependant tous les outils de décomposition et de prévision fonctionnent généralement avec ts car ils nécessitent un nombre fixe de données par cycle.

concernant votre question sur les années non complètes. cela ne devrait pas être un problème. R ne sait pas quand est janvier ou décembre, donc une année peut commencer et se terminer à tout moment.

2
RockScience

Concernant votre 4ème question, je pense que l'erreur est due au fait que vous n'avez qu'une seule période (52 semaines) et que vous aurez peut-être besoin de 52 semaines supplémentaires pour compléter 2 périodes.

0
Ana A