--- title: "Analyse de l'incidence de la varicelle" author: "aaaaaaaaa" date: "2020-06-04" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ## Introduction Les données de l'incidence de la varicelle sont disponibles du site Web du [Réseau Sentinelles](http://www.sentiweb.fr/). Celles-ci sont disponibles au format CSV. Chaque ligne du fichier correspond à une semaine de la période demandée (les premières données datent de la fin de l'année 1990, les dernières sont celles d'une semaine récente). L'URL du fichier est la suivante : ```{r} data_url <- "http://www.sentiweb.fr/datasets/incidence-PAY-7.csv" ``` Chargement des librairies utilisées dans cette étude : ```{r message=FALSE} library(tidyverse) # Manipulation de données, graphiques, ... library(knitr) library(kableExtra) library(parsedate) ``` ## Téléchargement des données Nous téléchargeons le fichier de données en local (si celui-ci n'existe pas). Ceci afin de nous prémunir contre un éventuel problème de connexion à ce fichier. ```{r} dest_file <- "./varicelle_incidence.csv" if(!file.exists(dest_file)) { download.file(url = data_url, destfile = dest_file, method = "auto") } ``` Puis nous chargeons les données depuis le fichier local (a première ligne du fichier étant un commentaire). ```{r} varicelle <- read_csv(dest_file, skip = 1) ``` Les données obtenues sont de la forme : ```{r} head(varicelle) %>% kable(format = "html", escape = FALSE, align ="c") %>% kable_styling(bootstrap_options = "striped", full_width = F, position = "left") ``` **Description du format du fichier :** - `week` : Semaine calendaire (ISO 8601) - `indicator` : Code de l'indicateur de surveillance - `inc` : Estimation de l'incidence de consultations en nombre de cas - `inc_low` : Estimation de la borne inférieure de l'IC95% du nombre de cas de consultation - `inc_up` : Estimation de la borne supérieure de l'IC95% du nombre de cas de consultation - `inc100` : Estimation du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) - `inc100_low` : Estimation de la borne inférieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) - `inc100_up` : Estimation de la borne supérieure de l'IC95% du taux d'incidence du nombre de cas de consultation (en cas pour 100,000 habitants) - `geo_insee` : Code de la zone géographique concernée (Code INSEE) http://www.insee.fr/fr/methodes/nomenclatures/cog/ - `geo_name` : Libellé de la zone géographique (ce libellé peut être modifié sans préavis)   Dans un premier temps, vérifions s'il y a des données manquantes. ```{r} varicelle[rowSums(is.na(varicelle)) > 0, ] ``` Il semble que le fichier soit complet. ## Formattage des données ### Transformation des données "date" Le format des dates est particulier dans ce fichier : il est sous une forme numérique 'aaaass' , où 'a' et 's' représentent l'année et la semaine de la mesure respectivement (selon la norme ISO 8601). ```{r} head(varicelle$week) tail(varicelle$week) ``` La librairie `parsedate` permet de gérer ce type de format, en modifiant légérement la valeur de la date sous la forme 'aaaa-Wss'. ```{r} varicelle <- varicelle %>% # ajout du caractère "W" à la valeur de date, puis extraction en format "date" mutate(temp_week = str_replace(string = week, pattern = "(\\d{4})(\\d{2})", replacement = "\\1-W\\2"), iso_week = parse_iso_8601(temp_week)) %>% select(-temp_week) varicelle %>% select(week, iso_week) %>% head() ``` On peut vérifier la classe de cette nouvelle donnée : ```{r} class(varicelle$iso_week) ``` Enfin, on peut trier les données afin de les avoir en ordre chronologique. ```{r} varicelle <- varicelle %>% arrange(iso_week) ``` ### Visualisation Une première analyse de l'incidence de la varicelle peut être faite visuellement. ```{r} ggplot(varicelle, aes(x = iso_week, y = inc)) + geom_line(col = "blue", alpha = 0.6) + labs(title = "Incidence (hebdomadaire) de la varicelle", x = "Semaine", y = "Nb de cas par semaine") + theme_bw() ``` Il semble y avoir une certaine saisonnalité. On peut zoomer sur les dernières années pour avoir un meilleur aperçu. ```{r} varicelle %>% filter(row_number() >= length(week) - 200) %>% ggplot(aes(x = iso_week, y = inc)) + geom_line(col = "blue", alpha = 0.6) + labs(title = "Incidence (hebdomadaire) de la varicelle", x = "Semaine", y = "Nb de cas par semaine") + scale_x_datetime(date_breaks = "6 months", date_labels = "%Y-%m") + theme_bw() ``` Les pics d'incidence semblent avoir lieu au mois d'avril chaque année, alors que les creux sont plutôt présents vers le mois d'août. ## Analyse de l'incidence ### Modification de la période de référence Étant donné que le pic de l'épidémie semble se situer au mois d'avril, à cheval entre deux années civiles, nous définissons la période de référence entre deux minima de l'incidence, du 1er septembre de l'année $N$ au 1er septembre de l'année $N+1$. Nous mettons l'année $N+1$ comme étiquette sur cette année décalée, car le pic de l'épidémie est toujours au début de l'année $N+1$. Comme l'incidence de la varicelle est très faible en été, cette modification ne risque pas de fausser nos conclusions. ```{r} varicelle <- varicelle %>% # extraire l'année "civile" pour chaque ligne mutate(annee_civile = as.numeric(format(iso_week, format = "%Y"))) %>% group_by(annee_civile) %>% # si la date est avant le 1er septembre, année précédente, sinon année en cours mutate(annee_ref = ifelse(iso_week < as.POSIXct(paste0(annee_civile, "-09-01"), format = "%Y-%m-%d"), annee_civile, annee_civile + 1)) %>% ungroup() ``` On peut regarder le résultat en extrayant quelques données autour du 1er septembre 2005. ```{r} varicelle %>% filter(between(iso_week, as.POSIXct("2005-08-10"), as.POSIXct("2005-09-20"))) %>% select(week, iso_week, annee_civile, annee_ref) ``` Enfin, l'année en cours n'étant pas complète, on peut supprimer les données liées à celle-ci. ```{r} varicelle <- varicelle %>% filter(annee_ref != max(annee_ref)) ``` ### Visualisation On peut maintenant observer l'incidence par année de référence. ```{r} var_tableau <- varicelle %>% group_by(annee_ref) %>% summarise(inc_totale = sum(inc)) %>% ungroup() %>% mutate(inc_totale_format = cell_spec(inc_totale, format = "html", bold = TRUE, color = "white", background = ifelse(inc_totale == min(inc_totale), "lightgreen", ifelse(inc_totale == max(inc_totale), "red", "white")))) var_tableau %>% filter(inc_totale %in% c(min(inc_totale), max(inc_totale))) %>% select(`Année` = annee_ref, `Incidence totale` = inc_totale_format) %>% kable(format = "html", escape = FALSE, align ="c") %>% kable_styling(bootstrap_options = c("striped", "bordered"), full_width = F, position = "left") ``` On retrouve les résultats du tableau dans le graphe suivant : ```{r} ggplot(var_tableau, aes(x = annee_ref, y = inc_totale)) + geom_line(col = "blue", alpha = 0.6) + geom_label(data = var_tableau %>% filter(inc_totale == min(inc_totale)), aes(x = annee_ref, y = inc_totale, label = paste("Année", annee_ref, ":", inc_totale, "cas")), color = "green", nudge_y = -20000) + geom_label(data = var_tableau %>% filter(inc_totale == max(inc_totale)), aes(x = annee_ref, y = inc_totale, label = paste("Année", annee_ref, ":", inc_totale, "cas")), color = "red", nudge_y = 20000) + labs(title = "Incidence (annuelle) de la varicelle", x = "Année de référence", y = "Nb de cas par année") + theme_bw() ```