Introduction aux séries temporelles

La semaine dernière, j’ai vu cet extrait d’une émission de télé dans laquelle Catherine Hill expliquait à des journalistes que pour évaluer la tendance de l’évolution du nombre de nouveaux cas de covid par jour, on ne pouvait pas représenter les oscillations quotidiennes pour faire ensuite simplement la différence entre un pic et un creux, mais qu’il fallait montrer les moyennes glissantes sur 7 jours (ou moyennes mobiles).

Comme les moyennes glissantes ne me sont pas très familières, l’intervention de Catherine Hill m’a vraiment donné envie de me repencher sur l’analyse des séries temporelles (auxquelles se rattachent les moyennes glissantes).

Je dois dire que c’est un sujet sur lequel j’ai toujours plutôt buté dans le passé. Sans doute, un peu parce que je n’avais pas trouvé une ressource qui m’accrochait, et un peu aussi parce que je n’ai jamais vraiment eu l’opportunité de travailler ce sujet en profondeur.

Depuis deux ou trois ans, j’entends parler très positivement du livre d’Hyndman et Athanasopoulos “Forecasting : principles and practice”. Il est gratuitement consultable à cette adresse : https://otexts.com/fpp2/. J’ai donc décidé de le commencer !

Dans ce premier article dédié aux séries temporelles, je vous propose un simple résumé de ce que j’ai appris et compris des premiers chapitres (je n’ai pas encore atteint les moyennes mobiles !), suivi d’une mise en pratique avec des données réelles issues de la base de données françaises relatives au COVID.

Table des matières

Si vous êtes très à l’aise avec les séries temporelles, et que vous relevez une erreur, s’il vous plaît, indiquez la moi en commentaire, et je la corrigerais !

Séries temporelles : éléments théoriques

Définition d'une série temporelle

Une série temporelle, ou série chronologique, est une suite de valeurs numériques représentant l’évolution d’une quantité spécifique au cours du temps. (Wikipedia) : 

Formalisme et notation

Soient t1, t2…tn les temps successifs des observations, et yt1, yt2….ytn les observations. yti est alors l’observation réalisée au temps ti. La série temporelle peut se noter :\[\left\{y_{t}\right\}_{t \in T}\]

Où T est l’ensemble des temps ordonnés :

\[T=\left\{t_{1}, t_{2}, \ldots, t_{n}\right\}\]

Voici un exemple de séries temporelles. Il s’agit de la série temporelle AirPassengers, présente dans le package dataset chargé par défaut dans R :

représentation d'une série temporelle

Si nous étudions la structure de ces données AirPassengers, nous pouvons voir qu’elles sont de type Times-Series. Elles contiennent 144 éléments entre 1949 et 1961; il s’agit donc d’une série à pas de temps mensuel.

str(AirPassengers)
##  Time-Series [1:144] from 1949 to 1961: 112 118 132 129 121 135 148 148 136 119 ...
 

Caractéristiques des séries temporelles

Auto-corrélation

Les séries temporelles sont caractérisées par une auto-corrélation des observations. Cela signifie que la mesure au temps t n’est pas indépendante de celle à t-1 ; elle lui ressemble un peu. Par exemple le nombre de passagers aériens observés au mois d’aout, n’est pas totalement indépendant du nombre de passagers au mois de juillet.

On mesure cette ressemblance, ou ce lien, par un coefficient de corrélation.

En pratique, on calcule ce coefficient de corrélations pour tous les écarts de temps k (qu’on appelle aussi des lags) ; par exemple entre yt et yt-1 (lag1), puis entre yt et yt-2 (lag2) etc…

\[ r_{k}=\frac{\sum_{t=k+1}^{T}\left(y_{t}-\bar{y}\right)\left(y_{t-k}-\bar{y}\right)}{\sum_{t=1}^{T}\left(y_{t}-\bar{y}\right)^{2}}\]

On peut ensuite représenter graphiquement ces coefficients de corrélations sur un corrélogramme qui permet de visualiser la fonction d’auto-corrélation (ACF).

Les lignes bleues en pointillés indiquent si les corrélations sont significativement différentes de zéro.

Composantes d'une série temporelle

Une série temporelle comporte trois composantes principales

  • une tendance (ici croissante)
  • une composante saisonnière : c’est un motif (les pics et les creux) qui se répète dans le temps. Ici on voit un nombre élevé de passagers l’été, suivi d’un creux, et que ce motif se répète d’année en année.
  • une composante résiduelle : c’est une part de l’observation qui est aléatoire, qui est indépendante de la tendance et de la composante saisonnière.On dit aussi que c’est du “bruit”.

Remarque : il existe aussi parfois une composante cyclique, c’est lorsqu’il y a des pics et des creux mais qui ne se répètent pas avec une fréquence fixe.

Pour mieux comprendre, voici une décomposition de la série temporelle du nombre de voyageurs aériens mensuels :

Visualisation des 3 composantes :

Intérêt des séries temporelles

Les séries temporelles offrent deux intérêts principaux :

  1. Décrire un phénomène : est ce que la tendance est croissante, décroissante, stable ? Est-ce que le phénomène est saisonnier, si oui à quelle fréquence. Est-ce qu’il y a des ruptures ?
  2. Réaliser des prévisions, c’est-à-dire prédire les observations dans le futur (très en vogue depuis une petite année 😉  )

La description est généralement réalisée à l’aide d’un graphique

Pour ce qui est des prévisions, il existe de nombreuses approches. Il y a des méthodes toutes simples (et sans doute pas top en termes de performance – mais qui ont le mérite d’être bien compréhensibles, et c’est déjà un premier pas). Je pense aux prévisions par moyennes, et aux prévisions naïves ; nous allons les essayer plus loin dans cet article.

Je sais qu’il existe des approches un peu plus complexes mais plutôt abordables : je pense aux fameuses moyennes glissantes, mais aussi aux méthodes de lissage exponentielles (que j’ai déjà croisé).

Et puis il y a les modèles ARIMA, SARIMA que je n’ai jamais parfaitement compris.

Et puis il y a encore des méthodes dont je n’ai jamais entendu parler (mais qui sont présentées dans le livre), comme les modèles de régression dynamique et autres.

Prévisions simples

Les prévisions sont notées avec un chapeau, pour les distinguer des observations (sans chapeau) :

\[\hat{y}_{T+h \mid T}\]

Ce terme signifie la prévision de y (l’observation) à T + h (h est l’horizon, 12 mois par exemple), compte tenu des observations passées pour l’ensemble des temps T.

Approche de la moyenne

Dans cette approche, les prévisions de toutes les valeurs futures sont égales à la moyenne des données passées :

\[\hat{y}_{T+h \mid T}=\bar{y}=\left(y_{1}+\cdots+y_{T}\right) / T\]

Nous pouvons obtenir ces prévisions avec la fonction meanf(), du package forecast.

# moyenne de l'ensemble des données
meanf(AirPassengers,12)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Feb 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Mar 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Apr 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## May 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Jun 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Jul 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Aug 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Sep 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Oct 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Nov 1961       280.2986 125.3066 435.2906 42.34016 518.2571
## Dec 1961       280.2986 125.3066 435.2906 42.34016 518.2571 

L’argument `12` correspond à l’horizon souhaité : 12 mois.

Approche naïve

Ici, les prévisions de toutes les valeurs futures sont égales à la valeur de la dernière observation :

\[\hat{y}_{T+h \mid T}=y_{T}\]

La fonction à employer est naive():

naive(AirPassengers,12)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961            432 388.7984 475.2016 365.9288 498.0712
## Feb 1961            432 370.9037 493.0963 338.5612 525.4388
## Mar 1961            432 357.1726 506.8274 317.5613 546.4387
## Apr 1961            432 345.5967 518.4033 299.8576 564.1424
## May 1961            432 335.3982 528.6018 284.2603 579.7397
## Jun 1961            432 326.1781 537.8219 270.1593 593.8407
## Jul 1961            432 317.6992 546.3008 257.1921 606.8079
## Aug 1961            432 309.8073 554.1927 245.1225 618.8775
## Sep 1961            432 302.3951 561.6049 233.7864 630.2136
## Oct 1961            432 295.3845 568.6155 223.0646 640.9354
## Nov 1961            432 288.7164 575.2836 212.8667 651.1333
## Dec 1961            432 282.3452 581.6548 203.1227 660.8773 

Approche naïve saisonnière

Avec cette approche, chaque prévision est égale à la dernière valeur observée de la même saison (par exemple, le même mois de l’année précédente).

\[\hat{y}_{T+h \mid T}=y_{T+h-m(k+1)}\]

La formule est peu complexe, mais elle signifie simplement que la prévision du nombre de passagers pour juillet 1961 sera la valeur observée en juillet 1960. La fonction employée est snaive()

snaive(AirPassengers,12)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961            417 370.4595 463.5405 345.8224 488.1776
## Feb 1961            391 344.4595 437.5405 319.8224 462.1776
## Mar 1961            419 372.4595 465.5405 347.8224 490.1776
## Apr 1961            461 414.4595 507.5405 389.8224 532.1776
## May 1961            472 425.4595 518.5405 400.8224 543.1776
## Jun 1961            535 488.4595 581.5405 463.8224 606.1776
## Jul 1961            622 575.4595 668.5405 550.8224 693.1776
## Aug 1961            606 559.4595 652.5405 534.8224 677.1776
## Sep 1961            508 461.4595 554.5405 436.8224 579.1776
## Oct 1961            461 414.4595 507.5405 389.8224 532.1776
## Nov 1961            390 343.4595 436.5405 318.8224 461.1776
## Dec 1961            432 385.4595 478.5405 360.8224 503.1776 

Approche naïve avec dérive

Il s’agit d’une variante de l’approche naïve qui permet aux prévisions de varier (en croissant au décroissant) au cours du temps. Cette quantité de changement des prévisions au cours du temps est appelée la dérive (drift en anglais), elle est estimée par l’évolution moyenne observée sur les données passées :

\[\hat{y}_{T+h \mid T}=y_{T}+\frac{h}{T-1} \sum_{t=2}^{T}\left(y_{t}-y_{t-1}\right)\]

rwf(AirPassengers,12, drift=TRUE)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 1961       434.2378 390.9799 477.4956 368.0806 500.3949
## Feb 1961       436.4755 375.0862 497.8649 342.5886 530.3625
## Mar 1961       438.7133 363.2664 514.1602 323.3272 554.0994
## Apr 1961       440.9510 353.5325 528.3696 307.2560 574.6461
## May 1961       443.1888 345.1178 541.2598 293.2022 593.1755
## Jun 1961       445.4266 337.6304 553.2228 280.5665 610.2866
## Jul 1961       447.6643 330.8384 564.4902 268.9946 626.3341
## Aug 1961       449.9021 324.5916 575.2126 258.2562 641.5480
## Sep 1961       452.1399 318.7857 585.4940 248.1922 656.0875
## Oct 1961       454.3776 313.3453 595.4100 238.6873 670.0680
## Nov 1961       456.6154 308.2136 605.0171 229.6545 683.5763
## Dec 1961       458.8531 303.3469 614.3594 221.0268 696.6795 

Visualisations des prévisions

autoplot(AirPassengers) +
  autolayer(meanf(AirPassengers, h=12), series="Moyenne", PI=FALSE) +
  autolayer(naive(AirPassengers, h=12), series="Naïve", PI=FALSE) +
  autolayer(snaive(AirPassengers , h=12), series="Naïve saisonnière", PI=FALSE) +
  autolayer(rwf(AirPassengers,12, drift=TRUE), series="Naïve dérive", PI=FALSE)+
  ggtitle("Prevision du nombre de passagers mensuels pour l'année 1961") +
  xlab("Year") + 
  ylab("Nombres de passagers") +
  guides(colour=guide_legend(title="Prevision")) 
prévisions simples de séries temporelles

On peut voir qu’aucune de ces approches simples n’est satisfaisante. Ce n’est pas très étonnantes, ce sont des méthodes “simples”. Mais je pense que c’est une bonne base pour comprendre la problématique de la prévision des séries temporelles, et ensuite pouvoir comprendre les approches de prévisions plus complexes.

Evaluation des prévisions

Pour évaluer si un modèle de prévision est bien adapté aux données, c’est-à-dire qu’il a su capturer l’ensemble de l’information passée de la série temporelle (c’est clairement pas le cas des méthodes simples employées précédemment), un diagnostic doit être réalisé sur les résidus (la différence entre les prévisions et la réalité):

\[e_{t}=y_{t}-\hat{y}_{t}\]

Les résidus doivent satisfaire 4 conditions :

  • ils ne doivent pas être auto-corrélés
  • leur moyenne doit être égale à 0
  • ils doivent être de variance constante
  • ils doivent être distribués normalement.

Les 3 dernières conditions sont identiques à celle de l’utilisation des modèles linéaires.

Ensuite, les performances de plusieurs modèles de prévisions peuvent être évaluées et comparées à l’aide de différents paramètres tels que :

  • l’erreur absolue moyenne (mean absolute error) :

\[{MAE}=\text{mean}\left(\left|e_{t}\right|\right)\]

 

  • la racine de l’erreur quadratique moyenne :

\[RMSE=\sqrt{mean(e^2_t)}\]

Pour l’instant, je ne me suis pas trop penchée sur les diagnostics et les paramètres de performance. Ça sera pour un prochain article…

Séries temporelles : mise en pratique

J’ai voulu essayer de manipuler ces notions et ces fonctions sur une série temporelle qui n’existe pas par défaut dans R. Je voulais me confronter à d’éventuels problèmes de structures, et de conversion des données en type “time series”.

Comme l’inspiration de tout cela c’était des données COVID, je me suis décidée à les télécharger ( ce que j’avais rigoureusement évité de faire jusque là !)

Et j’ai choisi de travailler sur le nombre d’hospitalisations dans mon département, c’est-à-dire le 04 : les Alpes de Haute Provence.

Pour cela, j’ai chargé le package covid19france et fais quelques manipulations :

Chargement des données

install.packages("covid19france")
library(covid19france)

# mise à jour des données
france <- refresh_covid19france()
france$data_type <- as.factor(france$data_type)


library(tidyverse)
ahp_hosp <- france %>% 
	filter(location_standardized=="DEP-04") %>% 
	filter(data_type=="hospitalized")
	
 head(ahp_hosp)	
  A tibble: 6 x 7
  date       location      location_type location_standard~ location_standardi~ data_type value
  <date>     <chr>         <chr>         <chr>              <chr>               <fct>     <int>
2 2021-02-11 Alpes-de-Hau~ county        DEP-04             department          hospital~   188
3 2021-02-10 Alpes-de-Hau~ county        DEP-04             department          hospital~   188
4 2021-02-09 Alpes-de-Hau~ county        DEP-04             department          hospital~   192
5 2021-02-08 Alpes-de-Hau~ county        DEP-04             department          hospital~   190
6 2021-02-07 Alpes-de-Hau~ county        DEP-04             department          hospital~   182 

Visualisations

Globales

J’ai commencé par essayer de faire des visualisations, uniquement avec ggplot2 (sans fonctions spécifiques dédiées aux séries temporelles) :

ggplot(ahp_hosp, aes(x=date,y=value))+
	geom_line()+
	geom_point() 
Nombre de patients hospitalisés

J’ai amélioré les étiquettes de temps :

plot série temporelle avec ggplot2

Pour plus de détails sur la modification des étiquettes, consultez l’article : Comment représenter une série temporelle avec ggplot2

Ensuite, j’ai restreint les données à partir du 1er septembre, pour zoomer sur les données plus récentes.

ahp_hosp %>% 
	filter(date>"2020-09-01") %>% 
	ggplot(aes(x=date,y=value))+
	geom_line()+
	geom_point()+
	scale_x_date(breaks=datebreaks)+
    theme(axis.text.x = element_text(angle=30, hjust=1))  
plot data longitudinales

Par jour

Puisque dans l’extrait vidéo, Catherine Hill disait que le nombre de cas rapportés dépend du jour de la semaine, j’ai voulu voir si c’est le cas sur ces données. Pour cela, j’ai créé une variable js pour `jour semaine` :

library(stringr)
library(lubridate)
ahp_hosp <- ahp_hosp %>% 
	mutate(
		js=wday(date, label=TRUE, abb=TRUE),
		js=as.character(js),
		js=str_sub(js,1,3))
head(ahp_hosp) 
# A tibble: 6 x 8
  date       location   location_type location_standar~ location_standar~ data_type value js   
  <date>     <chr>      <chr>         <chr>             <chr>             <fct>     <int> <chr>
2 2021-02-11 Alpes-de-~ county        DEP-04            department        hospital~   188 jeu  
3 2021-02-10 Alpes-de-~ county        DEP-04            department        hospital~   188 mer  
4 2021-02-09 Alpes-de-~ county        DEP-04            department        hospital~   192 mar  
5 2021-02-08 Alpes-de-~ county        DEP-04            department        hospital~   190 lun  
6 2021-02-07 Alpes-de-~ county        DEP-04            department        hospital~   182 dim  
>  
ahp_hosp %>% 
	filter(date>"2020-09-01") %>% 
	ggplot(aes(x=date,y=value))+
	geom_line()+
	geom_point()+
	scale_x_date(breaks=datebreaks,labels=date_format("%d %b %y"))
    theme(axis.text.x = element_text(angle=30, hjust=1)) +
	facet_wrap(~js) 
visualisation de la séries temporelle par jour de la semaine

Ou encore, toutes les courbes ensemble : 

ahp_hosp %>% 
	filter(date>"2020-09-01") %>% 
	ggplot(aes(x=date,y=value, group=js, colour=js))+
	geom_line()+
	geom_point()+
	scale_x_date(breaks=datebreaks,labels=date_format("%d %b %y"))+
    theme(axis.text.x = element_text(angle=30, hjust=1))  
plot data longitudinales avec distinction du jour de la semaine

Le nombre de patients hospitalisés ne me semble pas dépendre d’un jour de la semaine.

Passage en format time series

Ensuite, pour utiliser les fonctions du package forcast, à la fois pour représenter les données et faire des prévisions, il a fallu que je les convertisse en format time series. Cela se fait avec la fonction ts().

Lorsqu’on télécharge les données, elles sont triées de la plus récente à la plus ancienne. Or, lorsqu’elles sont en format time series elles doivent être ordonnées dans l’autre sens : de la plus ancienne à la plus récente. Je les ai donc réordonné avant de les passer en time series.

# changer l'ordre du dataset par ordre chronologique (en haut les anciennes en bas les récentes)
ahp_hosp_ts <- ahp_hosp %>% 
	arrange(date) %>%
	filter(date>"2020-09-01") %>% 
	select(value) %>% 
	ts(frequency=7) 

str(ahp_hosp_ts)
View(ahp_hosp_ts) 

Représentations graphiques spécifiques aux séries temporelles

Le package forecast dispose de fonctions de visualisation, telles que autplot() , seasonplot(), et ggsubseriesplot():

library(forecast)
autoplot(ahp_hosp_ts)+
	 ylab("Effectif") +
  ggtitle("Nombre de sujets hospitalisés \ndepuis le 1er septembre 2020") 
plot de la série temporelle avec la fonction autoplot

A présent l’axe des x correspond à un numéro de semaine à partir de la date du “2020-09-01”.

La fonction ggseasonplot() permet d’explorer un potentiel effet saison. Ici, il s’agit des jours à l’intérieur des semaines. Dans le jeu de données AirPassengers ça serait les mois à l’intérieur des années).

ggseasonplot(ahp_hosp_ts,  season.labels="week") +
  ylab("Effectif") +
  ggtitle("Seasonal plot: nombre de sujets hospitalisés") 

Ici, il n’y a pas de saisonnalité, car on ne voit pas un pic ou un creux spécifique à un jour de la semaine.

On peut aussi faire un season plot circulaire, grâce à l’argument `polar=TRUE` :

ggseasonplot(ahp_hosp_ts, polar=TRUE) +
  ylab("effectif") +
  ggtitle("Seasonal plot: nombre de sujets hospitalisés") 
season plot circulaire

C’est assez joli pour visualiser l’évolution du nombre de patients hospitalisés depuis le premier septembre, mais en termes de saisonnalité comme il n’y en a pas, c’est difficile de se rendre compte de l’intérêt. Du coup, j’ai essayé avec les données `AirPassengers`, et effectivement, on visualise bien le creux de passagers les moins d’hiver et le pic les mois d’été :

seasonplot et données longitudinales

On peut également représenter la série temporelle par jour avec les graphs cote à cote, en employant la fonction ggsubseriesplot:

ggsubseriesplot(ahp_hosp_ts) +
 ylab("effectif") +
  ggtitle("Seasonal subseries plot: nombre de sujets hospitalisés") 
graphiques données logitudinal par jour

Ce graph est équivalent à celui que j’ai fait précédemment avec ggplot2 , en distinguant les jours de la semaine (voir plus haut).

Prévisions simples sur 7 jours

# approche moyenne
meanf(ahp_hosp_ts,7)
##          Point Forecast    Lo 80   Hi 80    Lo 95    Hi 95
## 24.28571       91.39264 8.721233 174.064 -35.4745 218.2598
## 24.42857       91.39264 8.721233 174.064 -35.4745 218.2598
## 24.57143       91.39264 8.721233 174.064 -35.4745 218.2598
## 24.71429       91.39264 8.721233 174.064 -35.4745 218.2598
## 24.85714       91.39264 8.721233 174.064 -35.4745 218.2598
## 25.00000       91.39264 8.721233 174.064 -35.4745 218.2598
## 25.14286       91.39264 8.721233 174.064 -35.4745 218.2598 
# approche naive
naive(ahp_hosp_ts,7)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 24.28571            188 182.3015 193.6985 179.2850 196.7150
## 24.42857            188 179.9412 196.0588 175.6751 200.3249
## 24.57143            188 178.1300 197.8700 172.9051 203.0949
## 24.71429            188 176.6031 199.3969 170.5699 205.4301
## 24.85714            188 175.2579 200.7421 168.5126 207.4874
## 25.00000            188 174.0417 201.9583 166.6526 209.3474
## 25.14286            188 172.9233 203.0767 164.9422 211.0578 
# approche naive saisonnière
snaive(ahp_hosp_ts,7)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 24.28571            173 151.7216 194.2784 140.4575 205.5425
## 24.42857            182 160.7216 203.2784 149.4575 214.5425
## 24.57143            182 160.7216 203.2784 149.4575 214.5425
## 24.71429            190 168.7216 211.2784 157.4575 222.5425
## 24.85714            192 170.7216 213.2784 159.4575 224.5425
## 25.00000            188 166.7216 209.2784 155.4575 220.5425
## 25.14286            188 166.7216 209.2784 155.4575 220.5425 
# approche naive saisonnière avec dérive
rwf(ahp_hosp_ts,7, drift=TRUE)
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 24.28571       189.1049 183.5681 194.6418 180.6371 197.5728
## 24.42857       190.2099 182.3555 198.0643 178.1976 202.2221
## 24.57143       191.3148 181.6657 200.9639 176.5578 206.0718
## 24.71429       192.4198 181.2440 203.5955 175.3280 209.5115
## 24.85714       193.5247 180.9921 206.0573 174.3577 212.6917
## 25.00000       194.6296 180.8595 208.3997 173.5701 215.6892
## 25.14286       195.7346 180.8167 210.6524 172.9196 218.5495 

Visualisons des différentes prédictions :

autoplot(ahp_hosp_ts) +
  autolayer(meanf(ahp_hosp_ts, h=7), series="Moyenne", PI=FALSE) +
  autolayer(naive(ahp_hosp_ts, h=7), series="Naïve", PI=FALSE) +
  autolayer(snaive(ahp_hosp_ts , h=7), series="Naïve saisonnière", PI=FALSE) +
  autolayer(rwf(ahp_hosp_ts,7, drift=TRUE), series="Naïve dérive", PI=FALSE)+
  ggtitle("Prevision du nombre patients hiospitalisés à l'horizon une semaine") +
  xlab("semaine") + 
  ylab("Nombre de patients hospitalisés") +
  guides(colour=guide_legend(title="Prevision")) 
représentation des prévisions du nombre de patients hospitalisés à l'horizon une semaine

Il ne restera  plus qu’à comparer les prévisions avec les observations de la semaine prochaine !

Conclusion

J’apprécie beaucoup l’ouvrage d’ Hyndman et Athanasopoulos “Forecasting : principles and practice”. C’est une ressource très pédagogique, et très agréable à lire, avec des exemples concrets, qui va à l’essentiel, sans nous bombarder de notions théoriques difficiles à appréhender.

Si le sujet des séries temporelles  vous intéresse, quel que soit votre domaine d’application (santé, tourismes, marketing, etc…), je pense que c’est vraiment l’ouvrage  avec lequel commencer pour acquérir de bonnes bases.
J’ai vraiment envie de poursuivre sa lecture.

N’hésitez pas à me dire ce que vous en pensez en commentaire.

D’ici là, cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don libre sur sa page Tipeee.

Et si vous voulez vous procurer une copie papier du livre  livre d’Hyndman et Athanasopoulos “Forecasting : principles and practice”, vous pouvez cliquer sur l’image ci-dessous :

Poursuivez votre lecture

5 réponses

  1. Bonjour Claire,

    je passais par là,

    j’ai vu que tu ne comprenais pas les modeles ARIMA en série temporelle,
    va voir le livre introduction aux séries Temporelle R. Bourbonnais et M. Terrazza
    Niveau L1 et M1 econométrie
    rien de tres difficille
    Sinon regarde les Bouquins de Alain Montfort
    http://www.crest.fr/pagesperso.php?user=3014

    Merci POUR LES ROUTINES SOUS R

  2. Merci pour ce blog.
    J’ai juste une question qui n’a pas lien avec ce cours.. Je veux que vous me conseillez un document pour faire l’analyse textuelle avec R
    Merci bien

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.