Les séries temporelles avec stats (R)

Chroniques avec le package stats de R

Le package stats de R n’est pas spécialisé dans les séries chronologiques. Il offre néanmoins plusieurs fonctions intéressantes pour les explorer.

 

Fonctions

La fonction ts() permet notamment de créer un objet représentant une série temporelle. Plusieurs fonctions permettent ensuite de la manipuler et de l'analyser :

  • frequency() : fréquence d'une série,
  • start() et end() : début et fin de la série,
  • window() :extraction d'une période,
  • lag() : décalage temporel,
  • diff() : différences successives,
  • cycle() : position dans le cycle saisonnier.

Pour analyser les composantes d'une série, on trouve notamment :

  • decompose() : décomposition classique d'une série,
  • stl() : décomposition saisonnière utilisant les méthodes LOESS.

Pour les modèles de séries temporelles, stats propose notamment :

  • arima() : modèles ARIMA,
  • arima0() : ancienne interface pour les modèles ARIMA,
  • KalmanLike() et KalmanRun() : fonctions liées au filtrage de Kalman,
  • StructTS() : modèles structurels de séries temporelles.

La fonction acf() permet d'étudier l'autocorrélation, tandis que pacf() calcule l'autocorrélation partielle.

On trouve également :

  • Box.test() : test de Box-Pierce ou de Ljung-Box,
  • filter() : filtrage d'une série temporelle (moyennes mobiles centrées),
  • HoltWinters() : lissage exponentiel.

 

Exemple : les données

Voici le nombre de nuitées d’hôtel en France métropolitaine (source INSEE). Pour que l’exemple soit pédagogique, nous avons retenu sept années consécutives avant la pandémie de Covid 19 (donc 2013 à 2019 incluses). Nous avons reproduit les données ici au cas où vous souhaiteriez les capturer pour refaire l’exercice.

2013 2014 2015 2016 2017 2018 2019
Janvier 11 217 11 231 11 537 11 176 12 078 12 416 12 466
Février 11 992 11 888 12 346 12 461 12 838 13 107 13 214
Mars 15 250 14 327 14 187 15 151 14 947 16 218 15 685
Avril 15 635 16 447 16 293 15 463 17 827 17 220 18 160
Mai 18 958 18 283 18 770 18 201 18 235 19 037 18 358
Juin 19 801 19 687 19 721 19 255 20 051 20 586 21 692
Juillet 22 126 21 753 22 650 22 214 23 199 23 283 23 366
Août 23 989 24 222 24 058 22 593 23 893 24 598 24 835
Septembre 19 234 19 340 19 561 18 946 20 036 20 558 20 504
Octobre 16 489 16 918 16 838 16 989 17 528 18 003 17 962
Novembre 12 643 12 285 11 722 12 664 13 630 14 013 14 229
Décembre 12 769 13 316 12 392 13 364 14 046 13 885 14 167

chambre d'hôtel

En fait, elles se présentent en deux colonnes sur une feuille de calcul Excel. Nom du fichier : nuitées_pour_R.xlsx. (la présentation ci-dessus ne sert que pour la mise en page).  Remarquez que le champ Mois est alphanumérique.

extrait feuille Excel

 

Exemple de traitement

serie <- ts(
nuitées_pour_R$Nuitées,
start = c(2013, 1),
frequency = 12
)

La suite de valeurs est désormais représentée par l’objet serie. R ne considère plus seulement les valeurs comme une colonne de nombres. Il connaît désormais leur fréquence et leur position dans le temps. Nous avons précisé que la périodicité était mensuelle avec frequency = 12. En ajoutant que la série commence en janvier 2013, on évite des soucis qui pourraient être liés à des mois exprimés en alphanumérique (ainsi ce sont des années qui apparaissent sur l’axe des abscisses du graphique reproduit plus bas et non des trimestres).

Vérification :

> start(serie)
[1] 2013    1
> end(serie)
[1] 2019   12
> frequency(serie)
[1] 12

La série commence bien en janvier 2013 pour se terminer en décembre 2019 et sa fréquence est mensuelle.

Traçons le graphique grâce à la fonction plot().

plot(
+     serie,
+     main = "Nuitées dans les hôtels",
+     xlab = "Année",
+     ylab = "Nombre de nuitées"
+ )

évolutions

Notez qu’avec l’objet ts, il n’est pas indispensable de préciser type = « l », le graphique étant présenté par défaut sous forme de lignes.