From 9202e0f19e6299c6d6534d6efda133df955ad9cc Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 19:06:10 +0100 Subject: [PATCH 01/29] add setup + update config --- config.yaml | 17 +-- learners/setup.md | 334 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 263 insertions(+), 88 deletions(-) diff --git a/config.yaml b/config.yaml index 66866299..080d931d 100644 --- a/config.yaml +++ b/config.yaml @@ -11,7 +11,7 @@ carpentry: 'epiverse-trace' # Overall title for pages. -title: 'Real-time analysis and forecasting for outbreak analytics with R' +title: 'Analyse et prévisions en temps réel pour l'analyse des épidémies avec R' # Date the lesson was created (YYYY-MM-DD, this is empty by default) created: @@ -27,7 +27,7 @@ life_cycle: 'pre-alpha' license: 'CC-BY 4.0' # Link to the source repository for this lesson -source: 'https://github.com/epiverse-trace/tutorials-middle' +source: 'https://github.com/epiverse-trace/tutorials-middle-fr' # Default branch of your lesson branch: 'main' @@ -60,12 +60,12 @@ contact: 'andree.valle-campos@lshtm.ac.uk' # Order of episodes in your lesson episodes: - delays-access.Rmd -- quantify-transmissibility.Rmd -- delays-functions.Rmd -- create-forecast.Rmd -- severity-static.Rmd -- superspreading-estimate.Rmd -- superspreading-simulate.Rmd +#- quantify-transmissibility.Rmd +#- delays-functions.Rmd +#- create-forecast.Rmd +#- severity-static.Rmd +#- superspreading-estimate.Rmd +#- superspreading-simulate.Rmd # Information for Learners learners: @@ -84,3 +84,4 @@ profiles: varnish: epiverse-trace/varnish@epiversetheme sandpaper: epiverse-trace/sandpaper@patch-renv-github-bug +lang: fr diff --git a/learners/setup.md b/learners/setup.md index 5ad1dfc4..200b221a 100644 --- a/learners/setup.md +++ b/learners/setup.md @@ -1,108 +1,218 @@ --- -title: Setup +title: Mise en place --- ## Motivation -**Outbreaks** of infectious diseases can appear as a result of different pathogens, and in different contexts, but they typically lead to similar public health questions, from understanding patterns of transmission and severity to examining the effect of control measures ([Cori et al. 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371#d1e605)). We can relate each of these public health questions to a series of outbreak data analysis tasks. The more efficiently and reliably we can perform these tasks, the faster and more accurately we can answer the underlying questions. +**Des épidémies** de maladies infectieuses peuvent apparaître à cause de +différents agents pathogènes et dans différents contextes. Cependant, elles +aboutissent généralement à des questions de santé publique similaires, allant +de la compréhension des dynamiques de transmission et de la gravité clinique à +l'examen de l'effet des mesures de contrôle ([Cori et al. 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371#d1e605)). +Nous pouvons relier chacune de ces questions de santé publique à une série de +tâches d'analyse des données épidémidémiologiques. L'efficacité et la +fiabilité de ces tâches peuvent améliorer la rapidité et la précision de la +réponse aux questions sous-jacentes. + +Epiverse-TRACE vise à fournir un écosystème logiciel pour +**l'analyse des épidémies**, avec des logiciels communautaires intégrés, +généralisables et évolutifs. Nous: + +* soutenons le développement de nouveaux packages R, +* facilitons l'interconnexion des outils existants pour les rendre plus +conviviaux et +* contribuons à une communauté de pratique regroupant épidémiologistes de +terrain, data scientists, chercheurs en laboratoire, analystes d'agences de +santé, ingénieurs logiciels, etc. + +### Tutoriels Epiverse-TRACE + +Nos tutoriels s'articulent autour d'un pipeline d'analyse de données +épidémiologiques divisé en trois étapes: tâches initiales (au début de +l'épidémie), tâches intermédiaires (quelques semaine après le début de +l'épidémie) et tâches tardives (en pleine épidémie). Les résultats des tâches +réalisées au début de l'épidémie servent généralement de données d'entrée pour +les tâches requises au cours des étapes suivantes. + +![Aperçu des thèmes abordés dans le cadre de ce tutoriel](https://epiverse-trace.github.io/task_pipeline-minimal.svg) + +Nous avons conçu un site Web pour chaque tâche de ce tutoriel. Chaque site Web +est composé d'un ensemble d'épisodes couvrant différents sujets. + +| [Tutoriels pour les premières tâches ➠](https://epiverse-trace.github.io/tutorials-early/) | [Didacticiels pour les tâches intermédiaires ➠](https://epiverse-trace.github.io/tutorials-middle) | [Travaux dirigés tardifs ➠](https://epiverse-trace.github.io/tutorials-late/) | +| ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| Lire et nettoyer les données épidémiologiques, et concevoir un object de la classe {linelist} | Analyse et prévision en temps réel | Modélisation de scénarios | +| Lire, nettoyer et valider les données épidémiologiques, convertir un linelist en incidence pour la visualisation. | Accéder aux distributions des délais épidémiologiques et estimer les paramètres de transmission, prédire le nombre de cas, estimer la gravité clinique et la super-propagation. | Simulez la propagation de la maladie et étudiez les interventions. | + +Chaque épisode contient les sections suivantes: + +- **Vue d'ensemble:** décrit les questions auxquelles nous allons répondre +et les objectifs de l'épisode. +- **Conditions préalables:** décrit les épisodes qui doivent idéalement être +complétés au préalable. Elle décrit aussi les librairies qui vont être utilisées +au cours de l'épisode. +- **Exemple de code R:** des exemples de code R afin que vous puissiez +reproduire les analyses sur votre propre ordinateur. +- **Défis:** des défis à relever pour tester votre compréhension. +- **Explicatifs:** des boîtes qui vous permettent de mieux comprendre les +concepts mathématiques et de modélisation. + +Consultez également le site [glossaire](./reference.md) pour connaître les +termes qui ne vous sont pas familiers. + +### Les Packages R de Epiverse-TRACE + +Notre stratégie consiste à intégrer progressivement des **packages R** +spécialisés à un pipeline traditionnel d'analyse de données. Ces librairies +devraient combler les lacunes notées dans ces pipelines d'analyse +épidémiologiques qui sont conçus en vue d'apporter des réponses aux épidémies. + +![L'unité fondamentale de partage de code dans **R** est le **package**. Un package regroupe du code, des données, de la documentation et des tests et est facile à partager avec d'autres ([Wickham et Bryan, 2023](https://r-pkgs.org/introduction.html))](episodes/fig/pkgs-hexlogos-2.png) -Epiverse-TRACE aims to provide a software ecosystem for [**outbreak analytics**](reference.md#outbreakanalytics) with integrated, generalisable and scalable community-driven software. We support the development of new R packages, help link together existing tools to make them more user-friendly, and contribute to a community of practice, spanning field epidemiologists, data scientists, lab researchers, health agency analysts, software engineers and more. +:::::::::::::::::::::::::::: prereq -### Epiverse-TRACE tutorials +Ce contenu suppose une connaissance intermédiaire de R. Ces épisodes sont pour +vous si : -Our tutorials are built around an outbreak analysis pipeline split into three stages: **Early tasks**, **Middle tasks** and **Late tasks**. The outputs of tasks completed in earlier stages commonly feed into the tasks required for later ones. +- Vous savez lire des données dans R, les transformer et les reformater, et créer une variété de graphiques. +- Vous connaissez les fonctions de `{dplyr}`, `{tidyr}` et `{ggplot2}` +- Vous pouvez utiliser les opérateurs pipe de `{magrittr}` (`%>%`) et/ou celui +de la librairie de base de R (`|>`). +Nous supposons que les apprenants se sont familiarisés avec les concepts de base +de la statistique, des mathématiques et de la théorie des épidémies, mais NE +DISPOSENT PAS FORCÉMENT de connaissances intermédiaires ou expertes en +modélisation mathématique des maladies infectieuses. -![An overview of the tutorial topics](https://epiverse-trace.github.io/task_pipeline-minimal.svg) +:::::::::::::::::::::::::::: -Each task has its tutorial website and each tutorial website consists of a set of episodes covering different topics. +## Configuration des logiciels -| [Early task tutorials ➠](https://epiverse-trace.github.io/tutorials-early/) | [Middle task tutorials ➠](https://epiverse-trace.github.io/tutorials-middle) | [Late task tutorials ➠](https://epiverse-trace.github.io/tutorials-late/) | -|---|---|---| -| Read and clean case data, and make linelist | Real-time analysis and forecasting | Scenario modelling | -| Read, clean and validate case data, convert linelist data to incidence for visualization. | Access delay distributions and estimate transmission metrics, forecast cases, estimate severity and superspreading. | Simulate disease spread and investigate interventions. | +Suivez ces deux étapes : -Each episode contains: +### 1. Installez ou mettez à jour R et RStudio -+ **Overview**: describes what questions will be answered and the objectives of the episode. -+ **Prerequisites**: describes what episodes/packages ideally need to be covered before the current episode. -+ **Example R code**: example R code so you can work through the episodes on your own computer. -+ **Challenges**: challenges that can be completed to test your understanding. -+ **Explainers**: boxes to enhance your understanding of mathematical and modelling concepts. +R et RStudio sont deux logiciels distincts : -Also check out the [glossary](./reference.md) for any terms you may be unfamiliar with. +- **R** est un langage de programmation et un logiciel utilisé pour exécuter du +code écrit en R. +- **RStudio** est un environnement de développement intégré (IDE) qui facilite +l'utilisation de R. Nous vous recommandons d'utiliser RStudio pour interagir +avec R. -### Epiverse-TRACE R packages +Pour installer R et RStudio, suivez les instructions suivantes +. -Our strategy is to gradually incorporate specialised **R packages** into a traditional analysis pipeline. These packages should fill the gaps in these epidemiology-specific tasks in response to outbreaks. +::::::::::::::::::::::::::::: callout -![In **R**, the fundamental unit of shareable code is the **package**. A package bundles together code, data, documentation, and tests and is easy to share with others ([Wickham and Bryan, 2023](https://r-pkgs.org/introduction.html))](episodes/fig/pkgs-hexlogos-2.png) +### Déjà installé ? -:::::::::::::::::::::::::::: prereq +Ne perdez pas de temps : C'est le moment idéal pour vous assurer que votre +version de R est à jour. -This content assumes intermediate R knowledge. This tutorials are for you if: +Ce tutoriel nécessite **la version 4.0.0 de R ou des versions plus récentes**. -- You can read data into R, transform and reshape data, and make a wide variety of graphs -- You are familiar with functions from `{dplyr}`, `{tidyr}`, and `{ggplot2}` -- You can use the magrittr pipe `%>%` and/or native pipe `|>`. +::::::::::::::::::::::::::::: +Pour vérifier si votre version de R est à jour : -We expect learners to have some exposure to basic Statistical, Mathematical and Epidemic theory concepts, but NOT intermediate or expert familiarity with modeling. +- Dans RStudio, votre version de R sera imprimée dans +[la fenêtre de la console](https://docs.posit.co/ide/user/ide/guide/code/console.html). +Vous pouvez également exécuter `sessionInfo()`. -:::::::::::::::::::::::::::: +- **Pour mettre à jour R** téléchargez et installez la dernière version à partir +du [site web du projet R](https://cran.rstudio.com/) pour votre système +d'exploitation. -## Software Setup + - Après l'installation d'une nouvelle version, vous devrez réinstaller tous vos librairies avec la nouvelle version. + + - Pour Windows, la librairie `{installr}` permet de mettre à jour votre version de R et migrer votre bibliothèque de librairies. -Follow these two steps: +- **Pour mettre à jour RStudio** ouvrez RStudio et cliquez sur +`Help > Check for Updates`. Si une nouvelle version est disponible, suivez les +instructions qui s'affichent à l'écran. -### 1. Install or upgrade R and RStudio +::::::::::::::::::::::::::::: callout -R and RStudio are two separate pieces of software: +### Vérifiez régulièrement les mises à jour -* **R** is a programming language and software used to run code written in R. -* **RStudio** is an integrated development environment (IDE) that makes using R easier. We recommend to use RStudio to interact with R. +Bien que cela puisse paraître effrayant, il est **plus courant** de +rencontrer des problèmes à cause de l'utilisation de versions obsolètes de R ou +de librairies R. Il est donc recommandé de mettre à jour les versions de R, de +RStudio et de tous les packages que vous utilisez régulièrement. -To install R and RStudio, follow these instructions . +::::::::::::::::::::::::::::: -::::::::::::::::::::::::::::: callout +### 2. Vérifier et installer les outils de compilation -### Already installed? +Certains paquets nécessitent un ensemble d'outils complémentaires pour être compilés. +Ouvrez RStudio et **copiez-collez** le bloc de code suivant dans la +[fenêtre de console](https://docs.posit.co/ide/user/ide/guide/code/console.html), +puis appuyez sur Enter (Windows et Linux) ou Return (MacOS) pour exécuter la commande : -Hold on: This is a great time to make sure your R installation is current. +```r +if(!require("pkgbuild")) install.packages("pkgbuild") +pkgbuild::check_build_tools(debug = TRUE) +``` -This tutorial requires **R version 4.0.0 or later**. +Nous attendons un message similaire à celui ci-dessous : -::::::::::::::::::::::::::::: +```output +Your system is ready to build packages! +``` -To check if your R version is up to date: +Si les outils de compilation ne sont pas disponibles, cela déclenchera une installation automatique. -- In RStudio your R version will be printed in [the console window](https://docs.posit.co/ide/user/ide/guide/code/console.html). Or run `sessionInfo()` there. +1. Exécutez la commande dans la console. +2. Ne l'interrompez pas, attendez que R affiche le message de confirmation. +3. Une fois cela fait, redémarrez votre session R (ou redémarrez simplement RStudio) pour vous assurer que les modifications prennent effet. -- **To update R**, download and install the latest version from the [R project website](https://cran.rstudio.com/) for your operating system. +Si l'installation automatique **ne fonctionne pas**, vous pouvez les installer manuellement en fonction de votre système d'exploitation. - - After installing a new version, you will have to reinstall all your packages with the new version. +::::::::::::::::::::::::::::: tab - - For Windows, the `{installr}` package can upgrade your R version and migrate your package library. +### Windows -- **To update RStudio**, open RStudio and click on -`Help > Check for Updates`. If a new version is available follow the -instructions on the screen. +Les utilisateurs Windows auront besoin d'une installation fonctionnelle de `Rtools` afin de compiler le paquet à partir du code source. +`Rtools` n'est pas un paquet R, mais un logiciel que vous devez télécharger et installer. +Nous vous suggérons de suivre les étapes suivantes : -::::::::::::::::::::::::::::: callout +- **Installez `Rtools`**. Téléchargez le programme d'installation de `Rtools` à partir de . Installez-le en conservant les sélections par défaut. +- Fermez et rouvrez RStudio afin qu'il puisse reconnaître la nouvelle installation. + +### Mac -### Check for Updates regularly +Les utilisateurs Mac doivent suivre deux étapes supplémentaires, comme indiqué dans ce [guide de configuration de la chaîne d'outils C pour Mac](https://github.com/stan-dev/rstan/wiki/Configuring-C---Toolchain-for-Mac) : -While this may sound scary, it is **far more common** to run into issues due to using out-of-date versions of R or R packages. Keeping up with the latest versions of R, RStudio, and any packages you regularly use is a good practice. +- Installez et utilisez [`macrtools`](https://mac.thecoatlessprofessor.com/macrtools/) pour configurer la chaîne d'outils C++ +- Activez certaines optimisations du compilateur. + +### Linux + +Les utilisateurs Linux doivent suivre des instructions spécifiques à leur distribution. Vous les trouverez dans ce [guide de configuration de la chaîne d'outils C pour Linux](https://github.com/stan-dev/rstan/wiki/Configuring-C-Toolchain-for-Linux). ::::::::::::::::::::::::::::: -### 2. Install the required R packages +::::::::::::: callout + +### Vérification de l'environnement - +Cette étape nécessite des privilèges d'administrateur pour installer le logiciel. -Open RStudio and **copy and paste** the following code chunk into the [console window](https://docs.posit.co/ide/user/ide/guide/code/console.html), then press the Enter (Windows and Linux) or Return (MacOS) to execute the command: +Si vous ne disposez pas des droits d'administrateur dans votre environnement actuel : + +- Essayez d'exécuter le tutoriel sur votre **ordinateur personnel** auquel vous avez un accès complet. +- Utilisez un **environnement de développement préconfiguré** (par exemple, [Posit Cloud](https://posit.cloud/)). +- Demandez à votre **administrateur système** d'installer les logiciels requis pour vous. + +::::::::::::: + +### 3. Installez les librairies R requises + +Ouvrez RStudio et **copiez et collez** le morceau de code suivant dans la +[fenêtre de la console](https://docs.posit.co/ide/user/ide/guide/code/console.html) +puis appuyez sur la touche Entrer (Windows et Linux) ou +Retour (MacOS) pour exécuter la commande : ```r # for episodes on access delays and quantify transmission @@ -141,7 +251,7 @@ pak::pkg_install(new_packages) if(!require("pak")) install.packages("pak") -superspreading_packages <- c( +new_packages <- c( "epicontacts", "fitdistrplus", "superspreading", @@ -152,42 +262,74 @@ superspreading_packages <- c( "tidyverse" ) -pak::pkg_install(superspreading_packages) +pak::pkg_install(new_packages) ``` -These installation steps could ask you `? Do you want to continue (Y/n)` write `Y` and press Enter. +Ces étapes d'installation peuvent vous demander `? Do you want to continue (Y/n)` +écrivez `Y` et d'appuyer sur Entrez. ::::::::::::::::::::::::::::: spoiler -### do you get an error with EpiNow2? +### obtenez-vous un message d'erreur lors de l'installation de d'autres librairies ? -Windows users will need a working installation of `Rtools` in order to build the package from source. `Rtools` is not an R package, but a software you need to download and install. We suggest you to follow: +Vous pouvez utiliser la function `install.packages()` de la librairie de base de +R. - +```r +install.packages("cfr") +``` + +::::::::::::::::::::::::::::: + +::::::::::::::::::::::::::: spoiler + +### Que faire si une erreur persiste ? -1. **Verify `Rtools` installation**. You can do so by using Windows search across your system. Optionally, you can use `{devtools}` running: +Si le mot-clé du message d'erreur contient ceci: `Personal access token (PAT)`, +vous devrez peut-être [configurer votre token GitHub](https://epiverse-trace.github.io/git-rstudio-basics/02-setup.html#set-up-your-github-token). + +Installez d'abord ces librairies : ```r -if(!require("devtools")) install.packages("devtools") -devtools::find_rtools() +if(!require("pak")) install.packages("pak") + +new <- c("gh", + "gitcreds", + "usethis") + +pak::pak(new) ``` -If the result is `FALSE`, then you should do step 2. +Ensuite, suivez ces trois étapes pour [configurer votre token GitHub (lisez ce guide étape par étape)](https://epiverse-trace.github.io/git-rstudio-basics/02-setup.html#set-up-your-github-token): + +```r +# creer un token +usethis::create_github_token() + +# configurer votre token +gitcreds::gitcreds_set() -2. **Install `Rtools`**. Download the `Rtools` installer from . Install with default selections. +# obtenir un rapport de votre situation +usethis::git_sitrep() +``` -3. **Verify `Rtools` installation**. Again, we can use `{devtools}`: +Puis Réessayez d'installer {tracetheme} par example: ```r -if(!require("devtools")) install.packages("devtools") -devtools::find_rtools() +if(!require("remotes")) install.packages("remotes") +remotes::install_github("epiverse-trace/tracetheme") ``` -::::::::::::::::::::::::::::: +Si l'erreur persiste, [contactez-nous](#your-questions)! -You should update **all of the packages** required for the tutorial, even if you installed them relatively recently. New versions bring improvements and important bug fixes. +::::::::::::::::::::::::::: -When the installation has finished, you can try to load the packages by pasting the following code into the console: +Vous devez mettre à jour **toutes les librairies** nécessaires à ce tutoriel, +même si vous les avez installés récemment. Les nouvelles versions contiennent +des améliorations et d'importantes corrections de bugs. + +Lorsque l'installation est terminée, vous pouvez essayer de charger les packages +en copiant et collant le code suivant dans la console : ```r # for episodes on access delays and quantify transmission @@ -222,20 +364,52 @@ library(outbreaks) library(tidyverse) ``` -If you do NOT see an error like `there is no package called ‘...’` you are good to go! If you do, [contact us](#your-questions)! +Si vous ne voyez PAS d'erreur comme `there is no package called '...'` vous êtes +prêt à commencer ! Si c'est le cas, [contactez-nous](#your-questions)! + +### 4. Regardez et lisez le matériel de préformation + +:::::::::::::::::::::::::: prereq -## Data sets +**Regardez** trois vidéos de 5 minutes pour rafraîchir vos connaissances sur les distributions statistiques : -### Download the data +- StatQuest avec Josh Starmer (2017) +**Les principales idées derrière les distributions de probabilité**, YouTube. +Disponible à l'adresse : + -We will download the data directly from R during the tutorial. However, if you are expecting problems with the network, it may be better to download the data beforehand and store it on your machine. +- StatQuest avec Josh Starmer (2018) +**La probabilité n'est pas la vraisemblance. Découvrez pourquoi !!!**, YouTube. +Disponible à l'adresse : + -The data files for the tutorial can be downloaded manually here: +- StatQuest avec Josh Starmer (2017) +**La vraisemblance maximale, expliquée clairement !!!**, YouTube. +Disponible à l'adresse : + + +:::::::::::::::::::::::::: + +## Les jeux de données + +### Téléchargez les données + +Nous téléchargerons les données directement à partir de R au cours du tutoriel. +Cependant, si vous vous attendez à des problèmes de réseau, il peut être +préférable de télécharger les données à l'avance et de les stocker sur votre +machine. + +Les fichiers contenant les données pour le tutoriel peuvent être téléchargés +manuellement à partir d'ici : - - -## Your Questions +## Vos questions + +Si vous avez besoin d'aide pour installer les logiciels et les librairies ou si +vous avez d'autres questions concernant ce tutoriel, veuillez envoyer un +courriel à l'adresse suivante +[andree.valle-campos@lshtm.ac.uk](mailto:andree.valle-campos@lshtm.ac.uk) -If you need any assistance installing the software or have any other questions about this tutorial, please send an email to From 0c509243ad3711d830df45d42a99d1315ed53af9 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 19:34:29 +0100 Subject: [PATCH 02/29] update renv --- renv/profiles/lesson-requirements/renv.lock | 133 ++++++++------------ 1 file changed, 52 insertions(+), 81 deletions(-) diff --git a/renv/profiles/lesson-requirements/renv.lock b/renv/profiles/lesson-requirements/renv.lock index c66a5d25..11009b37 100644 --- a/renv/profiles/lesson-requirements/renv.lock +++ b/renv/profiles/lesson-requirements/renv.lock @@ -24,8 +24,7 @@ "NeedsCompilation": "no", "Author": "Dirk Eddelbuettel [aut, cre] (), John W. Emerson [aut], Michael J. Kane [aut] ()", "Maintainer": "Dirk Eddelbuettel ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "DBI": { "Package": "DBI", @@ -279,8 +278,7 @@ "URL": "https://github.com/HenrikBengtsson/R.methodsS3", "BugReports": "https://github.com/HenrikBengtsson/R.methodsS3/issues", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "R.oo": { "Package": "R.oo", @@ -307,8 +305,7 @@ "URL": "https://henrikbengtsson.github.io/R.oo/, https://github.com/HenrikBengtsson/R.oo", "BugReports": "https://github.com/HenrikBengtsson/R.oo/issues", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "R.utils": { "Package": "R.utils", @@ -338,8 +335,7 @@ "URL": "https://henrikbengtsson.github.io/R.utils/, https://github.com/HenrikBengtsson/R.utils", "BugReports": "https://github.com/HenrikBengtsson/R.utils/issues", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "R6": { "Package": "R6", @@ -382,15 +378,14 @@ "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", "License": "Apache License 2.0", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "Rcpp": { "Package": "Rcpp", - "Version": "1.1.0", + "Version": "1.0.14", "Source": "Repository", "Title": "Seamless R and C++ Integration", - "Date": "2025-07-01", + "Date": "2025-01-11", "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", "Imports": [ @@ -410,7 +405,7 @@ "RoxygenNote": "6.1.1", "Encoding": "UTF-8", "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", + "Author": "Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), JJ Allaire [aut] (), Kevin Ushey [aut] (), Qiang Kou [aut] (), Nathan Russell [aut], Iñaki Ucar [aut] (), Doug Bates [aut] (), John Chambers [aut]", "Maintainer": "Dirk Eddelbuettel ", "Repository": "CRAN" }, @@ -449,8 +444,7 @@ "NeedsCompilation": "yes", "Author": "Doug Bates [aut] (), Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Yixuan Qiu [aut] (), Authors of Eigen [cph] (Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS)", "Maintainer": "Dirk Eddelbuettel ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "RcppParallel": { "Package": "RcppParallel", @@ -521,7 +515,7 @@ }, "V8": { "Package": "V8", - "Version": "6.0.5", + "Version": "6.0.4", "Source": "Repository", "Type": "Package", "Title": "Embedded JavaScript and WebAssembly Engine for R", @@ -574,8 +568,7 @@ "License": "MIT + file LICENSE", "NeedsCompilation": "no", "Author": "Tony Plate [aut, cre], Richard Heiberger [aut]", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "askpass": { "Package": "askpass", @@ -641,8 +634,7 @@ "License": "GPL-2 | GPL-3", "URL": "http://www.rforge.net/base64enc", "NeedsCompilation": "yes", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "bit": { "Package": "bit", @@ -744,17 +736,17 @@ }, "broom": { "Package": "broom", - "Version": "1.0.9", + "Version": "1.0.8", "Source": "Repository", "Type": "Package", "Title": "Convert Statistical Objects into Tidy Tibbles", - "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", - "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", + "Authors@R": "c(person(given = \"David\", family = \"Robinson\", role = \"aut\", email = \"admiral.david@gmail.com\"), person(given = \"Alex\", family = \"Hayes\", role = \"aut\", email = \"alexpghayes@gmail.com\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(given = \"Simon\", family = \"Couch\", role = c(\"aut\", \"cre\"), email = \"simon.couch@posit.co\", comment = c(ORCID = \"0000-0001-5676-5107\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Indrajeet\", family = \"Patil\", role = \"ctb\", email = \"patilindrajeet.science@gmail.com\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(given = \"Derek\", family = \"Chiu\", role = \"ctb\", email = \"dchiu@bccrc.ca\"), person(given = \"Matthieu\", family = \"Gomez\", role = \"ctb\", email = \"mattg@princeton.edu\"), person(given = \"Boris\", family = \"Demeshev\", role = \"ctb\", email = \"boris.demeshev@gmail.com\"), person(given = \"Dieter\", family = \"Menne\", role = \"ctb\", email = \"dieter.menne@menne-biomed.de\"), person(given = \"Benjamin\", family = \"Nutter\", role = \"ctb\", email = \"nutter@battelle.org\"), person(given = \"Luke\", family = \"Johnston\", role = \"ctb\", email = \"luke.johnston@mail.utoronto.ca\"), person(given = \"Ben\", family = \"Bolker\", role = \"ctb\", email = \"bolker@mcmaster.ca\"), person(given = \"Francois\", family = \"Briatte\", role = \"ctb\", email = \"f.briatte@gmail.com\"), person(given = \"Jeffrey\", family = \"Arnold\", role = \"ctb\", email = \"jeffrey.arnold@gmail.com\"), person(given = \"Jonah\", family = \"Gabry\", role = \"ctb\", email = \"jsg2201@columbia.edu\"), person(given = \"Luciano\", family = \"Selzer\", role = \"ctb\", email = \"luciano.selzer@gmail.com\"), person(given = \"Gavin\", family = \"Simpson\", role = \"ctb\", email = \"ucfagls@gmail.com\"), person(given = \"Jens\", family = \"Preussner\", role = \"ctb\", email = \" jens.preussner@mpi-bn.mpg.de\"), person(given = \"Jay\", family = \"Hesselberth\", role = \"ctb\", email = \"jay.hesselberth@gmail.com\"), person(given = \"Hadley\", family = \"Wickham\", role = \"ctb\", email = \"hadley@posit.co\"), person(given = \"Matthew\", family = \"Lincoln\", role = \"ctb\", email = \"matthew.d.lincoln@gmail.com\"), person(given = \"Alessandro\", family = \"Gasparini\", role = \"ctb\", email = \"ag475@leicester.ac.uk\"), person(given = \"Lukasz\", family = \"Komsta\", role = \"ctb\", email = \"lukasz.komsta@umlub.pl\"), person(given = \"Frederick\", family = \"Novometsky\", role = \"ctb\"), person(given = \"Wilson\", family = \"Freitas\", role = \"ctb\"), person(given = \"Michelle\", family = \"Evans\", role = \"ctb\"), person(given = \"Jason Cory\", family = \"Brunson\", role = \"ctb\", email = \"cornelioid@gmail.com\"), person(given = \"Simon\", family = \"Jackson\", role = \"ctb\", email = \"drsimonjackson@gmail.com\"), person(given = \"Ben\", family = \"Whalley\", role = \"ctb\", email = \"ben.whalley@plymouth.ac.uk\"), person(given = \"Karissa\", family = \"Whiting\", role = \"ctb\", email = \"karissa.whiting@gmail.com\"), person(given = \"Yves\", family = \"Rosseel\", role = \"ctb\", email = \"yrosseel@gmail.com\"), person(given = \"Michael\", family = \"Kuehn\", role = \"ctb\", email = \"mkuehn10@gmail.com\"), person(given = \"Jorge\", family = \"Cimentada\", role = \"ctb\", email = \"cimentadaj@gmail.com\"), person(given = \"Erle\", family = \"Holgersen\", role = \"ctb\", email = \"erle.holgersen@gmail.com\"), person(given = \"Karl\", family = \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(given = \"Ethan\", family = \"Christensen\", role = \"ctb\", email = \"christensen.ej@gmail.com\"), person(given = \"Steven\", family = \"Pav\", role = \"ctb\", email = \"shabbychef@gmail.com\"), person(given = \"Paul\", family = \"PJ\", role = \"ctb\", email = \"pjpaul.stephens@gmail.com\"), person(given = \"Ben\", family = \"Schneider\", role = \"ctb\", email = \"benjamin.julius.schneider@gmail.com\"), person(given = \"Patrick\", family = \"Kennedy\", role = \"ctb\", email = \"pkqstr@protonmail.com\"), person(given = \"Lily\", family = \"Medina\", role = \"ctb\", email = \"lilymiru@gmail.com\"), person(given = \"Brian\", family = \"Fannin\", role = \"ctb\", email = \"captain@pirategrunt.com\"), person(given = \"Jason\", family = \"Muhlenkamp\", role = \"ctb\", email = \"jason.muhlenkamp@gmail.com\"), person(given = \"Matt\", family = \"Lehman\", role = \"ctb\"), person(given = \"Bill\", family = \"Denney\", role = \"ctb\", email = \"wdenney@humanpredictions.com\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(given = \"Nic\", family = \"Crane\", role = \"ctb\"), person(given = \"Andrew\", family = \"Bates\", role = \"ctb\"), person(given = \"Vincent\", family = \"Arel-Bundock\", role = \"ctb\", email = \"vincent.arel-bundock@umontreal.ca\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(given = \"Hideaki\", family = \"Hayashi\", role = \"ctb\"), person(given = \"Luis\", family = \"Tobalina\", role = \"ctb\"), person(given = \"Annie\", family = \"Wang\", role = \"ctb\", email = \"anniewang.uc@gmail.com\"), person(given = \"Wei Yang\", family = \"Tham\", role = \"ctb\", email = \"weiyang.tham@gmail.com\"), person(given = \"Clara\", family = \"Wang\", role = \"ctb\", email = \"clara.wang.94@gmail.com\"), person(given = \"Abby\", family = \"Smith\", role = \"ctb\", email = \"als1@u.northwestern.edu\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(given = \"Jasper\", family = \"Cooper\", role = \"ctb\", email = \"jaspercooper@gmail.com\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(given = \"E Auden\", family = \"Krauska\", role = \"ctb\", email = \"krauskae@gmail.com\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(given = \"Alex\", family = \"Wang\", role = \"ctb\", email = \"x249wang@uwaterloo.ca\"), person(given = \"Malcolm\", family = \"Barrett\", role = \"ctb\", email = \"malcolmbarrett@gmail.com\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(given = \"Charles\", family = \"Gray\", role = \"ctb\", email = \"charlestigray@gmail.com\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(given = \"Jared\", family = \"Wilber\", role = \"ctb\"), person(given = \"Vilmantas\", family = \"Gegzna\", role = \"ctb\", email = \"GegznaV@gmail.com\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(given = \"Eduard\", family = \"Szoecs\", role = \"ctb\", email = \"eduardszoecs@gmail.com\"), person(given = \"Frederik\", family = \"Aust\", role = \"ctb\", email = \"frederik.aust@uni-koeln.de\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(given = \"Angus\", family = \"Moore\", role = \"ctb\", email = \"angusmoore9@gmail.com\"), person(given = \"Nick\", family = \"Williams\", role = \"ctb\", email = \"ntwilliams.personal@gmail.com\"), person(given = \"Marius\", family = \"Barth\", role = \"ctb\", email = \"marius.barth.uni.koeln@gmail.com\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(given = \"Bruna\", family = \"Wundervald\", role = \"ctb\", email = \"brunadaviesw@gmail.com\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(given = \"Joyce\", family = \"Cahoon\", role = \"ctb\", email = \"joyceyu48@gmail.com\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(given = \"Grant\", family = \"McDermott\", role = \"ctb\", email = \"grantmcd@uoregon.edu\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(given = \"Kevin\", family = \"Zarca\", role = \"ctb\", email = \"kevin.zarca@gmail.com\"), person(given = \"Shiro\", family = \"Kuriwaki\", role = \"ctb\", email = \"shirokuriwaki@gmail.com\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(given = \"Lukas\", family = \"Wallrich\", role = \"ctb\", email = \"lukas.wallrich@gmail.com\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(given = \"James\", family = \"Martherus\", role = \"ctb\", email = \"james@martherus.com\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(given = \"Chuliang\", family = \"Xiao\", role = \"ctb\", email = \"cxiao@umich.edu\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(given = \"Joseph\", family = \"Larmarange\", role = \"ctb\", email = \"joseph@larmarange.net\"), person(given = \"Max\", family = \"Kuhn\", role = \"ctb\", email = \"max@posit.co\"), person(given = \"Michal\", family = \"Bojanowski\", role = \"ctb\", email = \"michal2992@gmail.com\"), person(given = \"Hakon\", family = \"Malmedal\", role = \"ctb\", email = \"hmalmedal@gmail.com\"), person(given = \"Clara\", family = \"Wang\", role = \"ctb\"), person(given = \"Sergio\", family = \"Oller\", role = \"ctb\", email = \"sergioller@gmail.com\"), person(given = \"Luke\", family = \"Sonnet\", role = \"ctb\", email = \"luke.sonnet@gmail.com\"), person(given = \"Jim\", family = \"Hester\", role = \"ctb\", email = \"jim.hester@posit.co\"), person(given = \"Ben\", family = \"Schneider\", role = \"ctb\", email = \"benjamin.julius.schneider@gmail.com\"), person(given = \"Bernie\", family = \"Gray\", role = \"ctb\", email = \"bfgray3@gmail.com\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(given = \"Mara\", family = \"Averick\", role = \"ctb\", email = \"mara@posit.co\"), person(given = \"Aaron\", family = \"Jacobs\", role = \"ctb\", email = \"atheriel@gmail.com\"), person(given = \"Andreas\", family = \"Bender\", role = \"ctb\", email = \"bender.at.R@gmail.com\"), person(given = \"Sven\", family = \"Templer\", role = \"ctb\", email = \"sven.templer@gmail.com\"), person(given = \"Paul-Christian\", family = \"Buerkner\", role = \"ctb\", email = \"paul.buerkner@gmail.com\"), person(given = \"Matthew\", family = \"Kay\", role = \"ctb\", email = \"mjskay@umich.edu\"), person(given = \"Erwan\", family = \"Le Pennec\", role = \"ctb\", email = \"lepennec@gmail.com\"), person(given = \"Johan\", family = \"Junkka\", role = \"ctb\", email = \"johan.junkka@umu.se\"), person(given = \"Hao\", family = \"Zhu\", role = \"ctb\", email = \"haozhu233@gmail.com\"), person(given = \"Benjamin\", family = \"Soltoff\", role = \"ctb\", email = \"soltoffbc@uchicago.edu\"), person(given = \"Zoe\", family = \"Wilkinson Saldana\", role = \"ctb\", email = \"zoewsaldana@gmail.com\"), person(given = \"Tyler\", family = \"Littlefield\", role = \"ctb\", email = \"tylurp1@gmail.com\"), person(given = \"Charles T.\", family = \"Gray\", role = \"ctb\", email = \"charlestigray@gmail.com\"), person(given = \"Shabbh E.\", family = \"Banks\", role = \"ctb\"), person(given = \"Serina\", family = \"Robinson\", role = \"ctb\", email = \"robi0916@umn.edu\"), person(given = \"Roger\", family = \"Bivand\", role = \"ctb\", email = \"Roger.Bivand@nhh.no\"), person(given = \"Riinu\", family = \"Ots\", role = \"ctb\", email = \"riinuots@gmail.com\"), person(given = \"Nicholas\", family = \"Williams\", role = \"ctb\", email = \"ntwilliams.personal@gmail.com\"), person(given = \"Nina\", family = \"Jakobsen\", role = \"ctb\"), person(given = \"Michael\", family = \"Weylandt\", role = \"ctb\", email = \"michael.weylandt@gmail.com\"), person(given = \"Lisa\", family = \"Lendway\", role = \"ctb\", email = \"llendway@macalester.edu\"), person(given = \"Karl\", family = \"Hailperin\", role = \"ctb\", email = \"khailper@gmail.com\"), person(given = \"Josue\", family = \"Rodriguez\", role = \"ctb\", email = \"jerrodriguez@ucdavis.edu\"), person(given = \"Jenny\", family = \"Bryan\", role = \"ctb\", email = \"jenny@posit.co\"), person(given = \"Chris\", family = \"Jarvis\", role = \"ctb\", email = \"Christopher1.jarvis@gmail.com\"), person(given = \"Greg\", family = \"Macfarlane\", role = \"ctb\", email = \"gregmacfarlane@gmail.com\"), person(given = \"Brian\", family = \"Mannakee\", role = \"ctb\", email = \"bmannakee@gmail.com\"), person(given = \"Drew\", family = \"Tyre\", role = \"ctb\", email = \"atyre2@unl.edu\"), person(given = \"Shreyas\", family = \"Singh\", role = \"ctb\", email = \"shreyas.singh.298@gmail.com\"), person(given = \"Laurens\", family = \"Geffert\", role = \"ctb\", email = \"laurensgeffert@gmail.com\"), person(given = \"Hong\", family = \"Ooi\", role = \"ctb\", email = \"hongooi@microsoft.com\"), person(given = \"Henrik\", family = \"Bengtsson\", role = \"ctb\", email = \"henrikb@braju.com\"), person(given = \"Eduard\", family = \"Szocs\", role = \"ctb\", email = \"eduardszoecs@gmail.com\"), person(given = \"David\", family = \"Hugh-Jones\", role = \"ctb\", email = \"davidhughjones@gmail.com\"), person(given = \"Matthieu\", family = \"Stigler\", role = \"ctb\", email = \"Matthieu.Stigler@gmail.com\"), person(given = \"Hugo\", family = \"Tavares\", role = \"ctb\", email = \"hm533@cam.ac.uk\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(given = \"R. Willem\", family = \"Vervoort\", role = \"ctb\", email = \"Willemvervoort@gmail.com\"), person(given = \"Brenton M.\", family = \"Wiernik\", role = \"ctb\", email = \"brenton@wiernik.org\"), person(given = \"Josh\", family = \"Yamamoto\", role = \"ctb\", email = \"joshuayamamoto5@gmail.com\"), person(given = \"Jasme\", family = \"Lee\", role = \"ctb\"), person(given = \"Taren\", family = \"Sanders\", role = \"ctb\", email = \"taren.sanders@acu.edu.au\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(given = \"Ilaria\", family = \"Prosdocimi\", role = \"ctb\", email = \"prosdocimi.ilaria@gmail.com\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(given = \"Daniel D.\", family = \"Sjoberg\", role = \"ctb\", email = \"danield.sjoberg@gmail.com\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(given = \"Alex\", family = \"Reinhart\", role = \"ctb\", email = \"areinhar@stat.cmu.edu\", comment = c(ORCID = \"0000-0002-6658-514X\")))", + "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", "License": "MIT + file LICENSE", "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", "BugReports": "https://github.com/tidymodels/broom/issues", "Depends": [ - "R (>= 4.1)" + "R (>= 3.5)" ], "Imports": [ "backports", @@ -788,7 +780,7 @@ "drc", "e1071", "emmeans", - "epiR (>= 2.0.85)", + "epiR", "ergm (>= 3.10.4)", "fixest (>= 0.9.0)", "gam (>= 1.15)", @@ -799,8 +791,8 @@ "glmnetUtils", "gmm", "Hmisc", - "interp", "irlba", + "interp", "joineRML", "Kendall", "knitr", @@ -839,8 +831,8 @@ "robustbase", "rsample", "sandwich", - "spatialreg", "spdep (>= 1.1)", + "spatialreg", "speedglm", "spelling", "survey", @@ -853,14 +845,13 @@ ], "VignetteBuilder": "knitr", "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", "Encoding": "UTF-8", - "Language": "en-US", "RoxygenNote": "7.3.2", + "Language": "en-US", "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", + "Config/testthat/edition": "3", "NeedsCompilation": "no", - "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", + "Author": "David Robinson [aut], Alex Hayes [aut] (), Simon Couch [aut, cre] (), Posit Software, PBC [cph, fnd], Indrajeet Patil [ctb] (), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (), Jasper Cooper [ctb] (), E Auden Krauska [ctb] (), Alex Wang [ctb], Malcolm Barrett [ctb] (), Charles Gray [ctb] (), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (), Eduard Szoecs [ctb], Frederik Aust [ctb] (), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (), Bruna Wundervald [ctb] (), Joyce Cahoon [ctb] (), Grant McDermott [ctb] (), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (), Lukas Wallrich [ctb] (), James Martherus [ctb] (), Chuliang Xiao [ctb] (), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (), Ilaria Prosdocimi [ctb] (), Daniel D. Sjoberg [ctb] (), Alex Reinhart [ctb] ()", "Maintainer": "Simon Couch ", "Repository": "CRAN" }, @@ -1016,8 +1007,7 @@ "NeedsCompilation": "no", "Author": "Jennifer Bryan [cre, aut], Hadley Wickham [ctb]", "Maintainer": "Jennifer Bryan ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "cffr": { "Package": "cffr", @@ -1441,7 +1431,7 @@ }, "data.table": { "Package": "data.table", - "Version": "1.17.8", + "Version": "1.17.6", "Source": "Repository", "Title": "Extension of `data.frame`", "Depends": [ @@ -1621,8 +1611,7 @@ "NeedsCompilation": "no", "Author": "Steph Locke [cre], Rich FitzJohn [aut], Anne Cori [aut], Thibaut Jombart [aut]", "Maintainer": "Steph Locke ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "distributional": { "Package": "distributional", @@ -2262,8 +2251,7 @@ "ByteCompile": "yes", "Collate": "'options.R' 'appender.R' 'constants.R' 'layout.R' 'logger.R' 'scat.R' 'futile.logger-package.R'", "RoxygenNote": "5.0.1", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "futile.options": { "Package": "futile.options", @@ -2281,8 +2269,7 @@ "License": "LGPL-3", "LazyLoad": "yes", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "gargle": { "Package": "gargle", @@ -2640,8 +2627,7 @@ "NeedsCompilation": "no", "Author": "Baptiste Auguie [aut, cre], Anton Antonov [ctb]", "Maintainer": "Baptiste Auguie ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "gtable": { "Package": "gtable", @@ -2938,8 +2924,7 @@ "NeedsCompilation": "no", "Author": "Rich FitzJohn [aut, cre]", "Maintainer": "Rich FitzJohn ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "igraph": { "Package": "igraph", @@ -3079,8 +3064,7 @@ "NeedsCompilation": "no", "Author": "Oleg Sklyar [aut], Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Mike Smith [ctb], Duncan Murdoch [ctb], Karline Soetaert [ctb] (), Johannes Ranke [ctb] ()", "Maintainer": "Dirk Eddelbuettel ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "isoband": { "Package": "isoband", @@ -3282,8 +3266,7 @@ "stats", "graphics" ], - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "lambda.r": { "Package": "lambda.r", @@ -3307,8 +3290,7 @@ "License": "LGPL-3", "LazyLoad": "yes", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "lattice": { "Package": "lattice", @@ -3347,8 +3329,7 @@ "NeedsCompilation": "yes", "Author": "Deepayan Sarkar [aut, cre] (), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", "Maintainer": "Deepayan Sarkar ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "lazyeval": { "Package": "lazyeval", @@ -3373,8 +3354,7 @@ "NeedsCompilation": "yes", "Author": "Hadley Wickham [aut, cre], RStudio [cph]", "Maintainer": "Hadley Wickham ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "lifecycle": { "Package": "lifecycle", @@ -3569,8 +3549,7 @@ "URL": "https://github.com/HenrikBengtsson/matrixStats", "BugReports": "https://github.com/HenrikBengtsson/matrixStats/issues", "RoxygenNote": "7.3.2", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "memoise": { "Package": "memoise", @@ -3604,10 +3583,9 @@ }, "mgcv": { "Package": "mgcv", - "Version": "1.9-1", + "Version": "1.9-3", "Source": "Repository", - "Author": "Simon Wood ", - "Maintainer": "Simon Wood ", + "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Generalized Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2017) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", "Priority": "recommended", @@ -3632,6 +3610,8 @@ "ByteCompile": "yes", "License": "GPL (>= 2)", "NeedsCompilation": "yes", + "Author": "Simon Wood [aut, cre]", + "Maintainer": "Simon Wood ", "Repository": "CRAN" }, "mime": { @@ -3745,8 +3725,7 @@ "Maintainer": "Paul Gilbert ", "URL": "http://optimizer.r-forge.r-project.org/", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "oai": { "Package": "oai", @@ -3889,7 +3868,7 @@ }, "pillar": { "Package": "pillar", - "Version": "1.11.0", + "Version": "1.10.2", "Source": "Repository", "Title": "Coloured Formatting for Columns", "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", @@ -3940,7 +3919,7 @@ "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", "Config/Needs/website": "tidyverse/tidytemplate", "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", + "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], RStudio [cph]", "Maintainer": "Kirill Müller ", "Repository": "CRAN" }, @@ -4232,16 +4211,16 @@ }, "purrr": { "Package": "purrr", - "Version": "1.1.0", + "Version": "1.0.4", "Source": "Repository", "Title": "Functional Programming Tools", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", "Description": "A complete and consistent functional programming toolkit for R.", "License": "MIT + file LICENSE", "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", "BugReports": "https://github.com/tidyverse/purrr/issues", "Depends": [ - "R (>= 4.1)" + "R (>= 4.0)" ], "Imports": [ "cli (>= 3.6.1)", @@ -4251,13 +4230,11 @@ "vctrs (>= 0.6.3)" ], "Suggests": [ - "carrier (>= 0.2.0)", "covr", "dplyr (>= 0.7.8)", "httr", "knitr", "lubridate", - "mirai (>= 2.4.0)", "rmarkdown", "testthat (>= 3.0.0)", "tibble", @@ -4275,7 +4252,7 @@ "Encoding": "UTF-8", "RoxygenNote": "7.3.2", "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Author": "Hadley Wickham [aut, cre] (), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, @@ -5012,8 +4989,7 @@ "NeedsCompilation": "no", "Author": "Simon Potter [aut, trl, cre], Simon Sapin [aut], Ian Bicking [aut]", "Maintainer": "Simon Potter ", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "socialmixr": { "Package": "socialmixr", @@ -5288,8 +5264,7 @@ "License": "GPL (>= 2)", "URL": "http://www.stat.boogaart.de/tensorA/", "NeedsCompilation": "yes", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "textshaping": { "Package": "textshaping", @@ -5745,8 +5720,7 @@ "URL": "https://www.rforge.net/uuid", "BugReports": "https://github.com/s-u/uuid/issues", "NeedsCompilation": "yes", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "vctrs": { "Package": "vctrs", @@ -5865,8 +5839,7 @@ "RoxygenNote": "7.1.2", "NeedsCompilation": "no", "Author": "Almende B.V. and Contributors [aut, cph] (vis.js library in htmlwidgets/lib, https://visjs.org/, https://github.com/visjs/vis-network), Benoit Thieurmel [aut, cre] (R interface)", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "vroom": { "Package": "vroom", @@ -6028,8 +6001,7 @@ "License": "GPL (>= 2)", "URL": "http://population.un.org/wpp", "NeedsCompilation": "no", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "xfun": { "Package": "xfun", @@ -6136,8 +6108,7 @@ "URL": "https://github.com/vubiostat/r-yaml/", "BugReports": "https://github.com/vubiostat/r-yaml/issues", "NeedsCompilation": "yes", - "Repository": "RSPM", - "Encoding": "UTF-8" + "Repository": "CRAN" }, "ympes": { "Package": "ympes", From 2f5fdb87344aba6d63925d8dac8b10e7f373555f Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 19:34:43 +0100 Subject: [PATCH 03/29] fix config --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 080d931d..30efe151 100644 --- a/config.yaml +++ b/config.yaml @@ -11,7 +11,7 @@ carpentry: 'epiverse-trace' # Overall title for pages. -title: 'Analyse et prévisions en temps réel pour l'analyse des épidémies avec R' +title: 'Analyse et prévisions en temps réel des épidémies avec R' # Date the lesson was created (YYYY-MM-DD, this is empty by default) created: From f60507ce87dc012a89024ba7cb155bc08363d3ab Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 22:23:17 +0100 Subject: [PATCH 04/29] lock RcppParallel from RSPM in renv --- renv/profiles/lesson-requirements/renv.lock | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/renv/profiles/lesson-requirements/renv.lock b/renv/profiles/lesson-requirements/renv.lock index 11009b37..35bd02a0 100644 --- a/renv/profiles/lesson-requirements/renv.lock +++ b/renv/profiles/lesson-requirements/renv.lock @@ -5,6 +5,10 @@ { "Name": "CRAN", "URL": "https://cran.rstudio.com" + }, + { + "Name": "RSPM", + "URL": "https://packagemanager.posit.co/cran/latest" } ] }, @@ -473,7 +477,7 @@ "NeedsCompilation": "yes", "Author": "JJ Allaire [aut], Romain Francois [aut, cph], Kevin Ushey [aut, cre], Gregory Vandenbrouck [aut], Marcus Geelnard [aut, cph] (TinyThread library, https://tinythreadpp.bitsnbites.eu/), Hamada S. Badr [ctb] (), Posit, PBC [cph], Intel [aut, cph] (Intel TBB library, https://www.threadingbuildingblocks.org/), Microsoft [cph]", "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" + "Repository": "RSPM" }, "StanHeaders": { "Package": "StanHeaders", From 798341a5ffac86edf89714fc51490b0d548ededa Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 22:44:23 +0100 Subject: [PATCH 05/29] add initial reviewed version --- episodes/delays-access.Rmd | 412 +++++++++++++++++-------------------- 1 file changed, 191 insertions(+), 221 deletions(-) diff --git a/episodes/delays-access.Rmd b/episodes/delays-access.Rmd index ba61066b..dc597b2d 100644 --- a/episodes/delays-access.Rmd +++ b/episodes/delays-access.Rmd @@ -1,84 +1,82 @@ --- -title: 'Access epidemiological delay distributions' +title: Accéder aux distributions des retards épidémiologiques teaching: 20 exercises: 10 -editor_options: +editor_options: chunk_output_type: inline --- -:::::::::::::::::::::::::::::::::::::: questions +:::::::::::::::::::::::::::::::::::::: questions -- How to get access to disease delay distributions from a pre-established database for use in analysis? +- Comment accéder aux distributions des délais des maladies à partir d'une base de données préétablie pour les utiliser dans l'analyse ? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Get delays from a literature search database with `{epiparameter}`. -- Get distribution parameters and summary statistics of delay distributions. +- Obtenez les délais à partir d'une base de données de recherche documentaire avec `{epiparameter}`. +- Obtenez les paramètres de distribution et les statistiques sommaires des distributions de retards. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +## Conditions préalables -This episode requires you to be familiar with: +Cet épisode nécessite que vous soyez familier avec : -**Data science** : Basic programming with R. +**la science des données** Programmation de base avec R. -**Epidemic theory** : epidemiological parameters, disease time periods, such as the incubation period, generation time, and serial interval. +**Théorie des épidémies** La théorie des épidémies est basée sur les paramètres épidémiologiques, les périodes de la maladie, telles que la période d'incubation, le temps de génération et l'intervalle sériel. ::::::::::::::::::::::::::::::::: ## Introduction -Infectious diseases follow an infection cycle, which usually includes the following phases: presymptomatic period, symptomatic period and recovery period, as described by their [natural history](../learners/reference.md#naturalhistory). These time periods can be used to understand transmission dynamics and inform disease prevention and control interventions. - -![Definition of key time periods. From [Xiang et al, 2021](https://www.sciencedirect.com/science/article/pii/S2468042721000038)](fig/time-periods.jpg) +Les maladies infectieuses suivent un cycle infectieux qui comprend généralement les phases suivantes : période présymptomatique, période symptomatique et période de guérison, comme le décrivent leurs [histoire naturelle](../learners/reference.md#naturalhistory). Ces périodes peuvent être utilisées pour comprendre la dynamique de la transmission et informer les interventions de prévention et de contrôle des maladies. +![Définition des périodes clés. A partir de [Xiang et al, 2021](https://www.sciencedirect.com/science/article/pii/S2468042721000038)](fig/time-periods.jpg) ::::::::::::::::: callout -### Definitions +### Définitions -Look at the [glossary](../learners/reference.md) for the definitions of all the time periods of the figure above! +Regardez le [glossaire](../learners/reference.md) pour connaître les définitions de toutes les périodes de la figure ci-dessus ! ::::::::::::::::::::::::: -However, early in an epidemic, efforts to understand the epidemic and implications for control can be delayed by the lack of an easy way to access key parameters for the disease of interest ([Nash et al., 2023](https://mrc-ide.github.io/epireview/)). Projects like `{epiparameter}` and `{epireview}` are building online catalogues following literature synthesis protocols that can help inform analysis and parametrise models by providing a library of previously estimated epidemiological parameters from past outbreaks. +Toutefois, au début d'une épidémie, les efforts visant à comprendre l'épidémie et les implications pour la lutte peuvent être retardés par l'absence d'un moyen facile d'accéder aux paramètres clés de la maladie en question ([Nash et al., 2023](https://mrc-ide.github.io/epireview/)). Des projets tels que `{epiparameter}` et `{epireview}` construisent des catalogues en ligne en suivant des protocoles de synthèse de la littérature qui peuvent aider à informer l'analyse et à paramétrer les modèles en fournissant une bibliothèque de paramètres épidémiologiques précédemment estimés à partir d'épidémies passées. - + -To illustrate how to use the `{epiparameter}` R package in your analysis pipeline, our goal in this episode will be to access one specific set of epidemiological parameters from the literature, instead of extracting from papers and copying and pasting them by hand. We will then plug them into an `{EpiNow2}` analysis workflow. +Pour illustrer l'utilisation de l'outil `{epiparameter}` R dans votre pipeline d'analyse, notre objectif dans cet épisode sera d'accéder à un ensemble spécifique de paramètres épidémiologiques de la littérature, au lieu d'extraire des articles et de les copier-coller à la main. Nous les insérerons ensuite dans un `{EpiNow2}` flux de travail d'analyse. - + -Let's start loading the `{epiparameter}` package. We'll use the pipe `%>%` to connect some of its functions, some `{tibble}` and `{dplyr}` functions, so let's also call to the `{tidyverse}` package: +Commençons par charger le fichier `{epiparameter}` paquetage. Nous utiliserons le tube `%>%` pour connecter certaines de ses fonctions, certaines `{tibble}` et `{dplyr}` donc appelons aussi à la fonction `{tidyverse}` paquetage : -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} library(epiparameter) library(tidyverse) ``` ::::::::::::::::::: checklist -### The double-colon +### Le double point-virgule -The double-colon `::` in R lets you call a specific function from a package without loading the entire package into the current environment. +Le double point-virgule `::` dans R vous permet d'appeler une fonction spécifique d'un paquetage sans charger l'ensemble du paquetage dans l'environnement actuel. -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +Par exemple, vous pouvez appeler une fonction spécifique d'un package sans charger le package entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir de l'outil `{dplyr}` paquet. -This helps us remember package functions and avoid namespace conflicts. +Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les conflits d'espace de noms. ::::::::::::::::::: +## Le problème -## The problem - -If we want to estimate the transmissibility of an infection, it's common to use a package such as `{EpiEstim}` or `{EpiNow2}`. The `{EpiEstim}` package allows real-time estimation of the reproduction number using case data over time, reflecting how transmission changes based on when symptoms appear. For estimating transmission based on when people were actually infected (rather than symptom onset), the `{EpiNow2}` package extends this idea by combining it with a model that accounts for delays in observed data. Both packages require some epidemiological information as an input. For example, in `{EpiNow2}` we use `EpiNow2::Gamma()` to specify a [generation time](../learners/reference.md#generationtime) as a probability distribution adding its `mean`, standard deviation (`sd`), and maximum value (`max`). +Si nous voulons estimer la transmissibilité d'une infection, il est courant d'utiliser un package tel que `{EpiEstim}` ou `{EpiNow2}`. Le paquet `{EpiEstim}` permet d'estimer en temps réel le nombre de reproductions à l'aide des données relatives aux cas dans le temps, reflétant ainsi l'évolution de la transmission en fonction de la date d'apparition des symptômes. Pour estimer la transmission en fonction du moment où les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), le logiciel `{EpiNow2}` étend cette idée en la combinant avec un modèle qui tient compte des retards dans les données observées. Les deux logiciels requièrent certaines informations épidémiologiques en entrée. Par exemple, dans `{EpiNow2}` nous utilisons `EpiNow2::Gamma()` pour spécifier un [temps de génération](../learners/reference.md#generationtime) sous la forme d'une distribution de probabilité ajoutant son `mean` l'écart-type (`sd`) et sa valeur maximale (`max`). -To specify a `generation_time` that follows a _Gamma_ distribution with mean $\mu = 4$, standard deviation $\sigma = 2$, and a maximum value of 20, we write: +Pour spécifier une valeur `generation_time` qui suit un *Gamma* avec une moyenne $\mu = 4$ écart-type $\sigma = 2$ et une valeur maximale de 20, nous écrivons : ```r generation_time <- @@ -89,11 +87,11 @@ generation_time <- ) ``` -It is a common practice for analysts to manually search the available literature and copy and paste the **summary statistics** or the **distribution parameters** from scientific publications. A challenge that is often faced is that the reporting of different statistical distributions is not consistent across the literature (e.g. a paper may only report the mean, rather than the full underlying distribution). `{epiparameter}`'s objective is to facilitate the access to reliable estimates of distribution parameters for a range of infectious diseases, so that they can easily be implemented in outbreak analytic pipelines. +Il est courant que les analystes recherchent manuellement la littérature disponible et copient et collent les résultats de la recherche. **statistiques sommaires** ou les **paramètres de distribution** des publications scientifiques. Une difficulté à laquelle on est souvent confronté est que la présentation des différentes distributions statistiques n'est pas cohérente dans la littérature (par exemple, un article peut ne présenter que la moyenne, plutôt que la distribution sous-jacente complète). `{epiparameter}` L'objectif du projet est de faciliter l'accès à des estimations fiables des paramètres de distribution pour une série de maladies infectieuses, afin qu'elles puissent être facilement mises en œuvre dans les pipelines d'analyse des épidémies. -In this episode, we will *access* the summary statistics of generation time for COVID-19 from the library of epidemiological parameters provided by `{epiparameter}`. These metrics can be used to estimate the transmissibility of this disease using `{EpiNow2}` in subsequent episodes. +Dans cet épisode, nous allons *accéder* les statistiques sommaires du temps de génération pour COVID-19 à partir de la bibliothèque de paramètres épidémiologiques fournie par l'Agence européenne pour la sécurité et la santé au travail (ESA). `{epiparameter}`. Ces paramètres peuvent être utilisés pour estimer la transmissibilité de cette maladie à l'aide de l'outil `{EpiNow2}` dans les épisodes suivants. -Let's start by looking at how many entries are currently available in the **epidemiological distributions database** in `{epiparameter}` using `epiparameter_db()` for the epidemiological distribution `epi_name` called generation time with the string `"generation"`: +Commençons par examiner le nombre d'entrées actuellement disponibles dans la base de données des **base de données des distributions épidémiologiques** en `{epiparameter}` en utilisant `epiparameter_db()` pour la distribution épidémiologique `epi_name` appelé temps de génération avec la chaîne `"generation"`: ```{r} epiparameter::epiparameter_db( @@ -101,94 +99,92 @@ epiparameter::epiparameter_db( ) ``` -In the library of epidemiological parameters, we may not have a `"generation"` time entry for our disease of interest. Instead, we can look at the `serial` intervals for COVID-19. Let's find what we need to consider for this! +Dans la bibliothèque des paramètres épidémiologiques, on peut ne pas disposer d'un `"generation"` pour la maladie qui nous intéresse. À la place, nous pouvons consulter le `serial` intervalles pour COVID-19. Voyons ce qu'il faut prendre en compte pour cela ! ::::::::::::::::: callout -### Systematic review data for priority pathogens +### Analyse systématique des données relatives aux agents pathogènes prioritaires -The [`{epireview}` R package](https://mrc-ide.github.io/epireview/) has parameters on Ebola, Marburg and Lassa from recent systematic reviews, with more priority pathogens planned for future releases. Have a look at [this vignette](https://epiverse-trace.github.io/epiparameter/articles/data_from_epireview.html) for more information on how to use these parameters with `{epiparameter}`. +Les données de l'examen systématique des pathogènes prioritaires [`{epireview}` paquet R](https://mrc-ide.github.io/epireview/) contient des paramètres sur Ebola, Marburg et Lassa issus de revues systématiques récentes. D'autres agents pathogènes prioritaires sont prévus pour les prochaines versions. Jetez un coup d'œil à [cette vignette](https://epiverse-trace.github.io/epiparameter/articles/data_from_epireview.html) pour plus d'informations sur l'utilisation de ces paramètres avec `{epiparameter}`. ::::::::::::::::::::::::: -## Generation time vs serial interval - -The generation time, jointly with the reproduction number ($R$), can provide valuable insights into the likely growth rate of the epidemic, and hence inform the implementation of control measures. The larger the value of $R$ and/or the shorter the generation time, the more new infections that we would expect per day, and hence the faster the incidence of disease cases will grow. +## Temps de génération vs intervalle série -![Video from the MRC Centre for Global Infectious Disease Analysis, Ep 76. Science In Context - Epi Parameter Review Group with Dr Anne Cori (27-07-2023) at ](fig/reproduction-generation-time.png) +Le temps de génération, conjointement avec le nombre de reproduction ($R$), peut fournir des indications précieuses sur le taux de croissance probable de l'épidémie et, partant, sur la mise en œuvre de mesuresde lutte. Plus la valeur de $R$ est grande et/ou plus le temps de génération est court, plus le nombre de nouvelles infections attendues par jour est élevé, et donc plus l'incidence des cas de maladie augmentera rapidement. -In calculating the effective reproduction number ($R_{t}$), the *generation time* distribution (i.e. delay from one infection to the next) is often approximated by the [serial interval](../learners/reference.md#serialinterval) distribution (i.e. delay from onset of symptoms in the infector to onset in the infectee). -This approximation is frequently used because it is easier to observe and record the onset of symptoms than the exact time of infection. +![Vidéo du MRC Centre for Global Infectious Disease Analysis, Ep 76. Science In Context - Epi Parameter Review Group avec le Dr Anne Cori (27-07-2023) at ](fig/reproduction-generation-time.png) -![A schematic of the relationship of different time periods of transmission between an infector and an infectee in a transmission pair. Exposure window is defined as the time interval having viral exposure, and transmission window is defined as the time interval for onward transmission with respect to the infection time ([Chung Lau et al., 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)).](fig/serial-interval-observed.jpeg) +Pour calculer le nombre effectif de reproduction ($R_{t}$), le *temps de génération* (c'est-à-dire le délai entre une infection et la suivante) est souvent approximée par la distribution des temps de génération. [intervalle sériel](../learners/reference.md#serialinterval) (c'est-à-dire le délai entre l'apparition des symptômes chez l'infecteur et l'apparition des symptômes chez l'infecté). +Cette approximation est fréquemment utilisée car il est plus facile d'observer et d'enregistrer l'apparition des symptômes que le moment exact de l'infection. -However, using the *serial interval* as an approximation of the *generation time* is most appropriate for diseases in which infectiousness starts after symptom onset ([Chung Lau et al., 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)). In cases where infectiousness starts before symptom onset, the serial intervals can have negative values, which occurs when the infectee develops symptoms before the infector in a transmission pair ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712(20)30119-3/fulltext#gr2)). +![Schéma de la relation entre les différentes périodes de transmission entre un infecteur et un infecté dans une paire de transmission. La fenêtre d'exposition est définie comme l'intervalle de temps entre l'exposition au virus et la fenêtre de transmission est définie comme l'intervalle de temps pour la transmission ultérieure par rapport à la durée de l'infection ([Chung Lau et al., 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)).](fig/serial-interval-observed.jpeg) - +Cependant, l'utilisation de la *intervalle sériel* comme approximation de l'intervalle *temps de génération* est plus appropriée pour les maladies dans lesquelles l'infectiosité commence après l'apparition des symptômes ([Chung Lau et al., 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)). Dans les cas où l'infectiosité commence avant l'apparition des symptômes, les intervalles sériels peuvent avoir des valeurs négatives, ce qui se produit lorsque l'infecté développe des symptômes avant l'infecteur dans une paire de transmission ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712\(20\)30119-3/fulltext#gr2)). ::::::::::::::::: callout -### From mean delays to probability distributions +### Des délais moyens aux distributions de probabilité -If we measure the *serial interval* in real data, we typically see that not all case pairs have the same delay from onset-to-onset. We can observe this variability for other key epidemiological delays as well, including the [incubation period](../learners/reference.md#incubation) and [infectious period](../learners/reference.md#infectiousness). +Si nous mesurons les *intervalle sériel* dans des données réelles, nous constatons généralement que toutes les paires de cas n'ont pas le même délai d'apparition. Nous pouvons également observer cette variabilité pour d'autres délais épidémiologiques clés, notamment le délai d'apparition de la maladie. [la période d'incubation](../learners/reference.md#incubation) et [période infectieuse](../learners/reference.md#infectiousness). -![Serial intervals of possible case pairs in (a) COVID-19 and (b) MERS-CoV. Pairs represent a presumed infector and their presumed infectee plotted by date of symptom onset ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#fig6)).](fig/serial-interval-pairs.jpg) +![Intervalles sériels des paires de cas possibles dans (a) COVID-19 et (b) MERS-CoV. Les paires représentent un infecteur présumé et son contaminé présumé en fonction de la date d'apparition des symptômes ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#fig6)).](fig/serial-interval-pairs.jpg) -To summarise these data from individual and pair time periods, it is therefore useful to quantify the **statistical distribution** of delays that best fits the data, rather than just focusing on the mean ([McFarland et al., 2023](https://www.eurosurveillance.org/content/10.2807/1560-7917.ES.2023.28.27.2200806)). +Pour résumer ces données relatives aux périodes individuelles et aux paires, il est donc utile de quantifier les **distribution statistique** des retards qui correspondent le mieux aux données, plutôt que de se concentrer sur la moyenne ([McFarland et al., 2023](https://www.eurosurveillance.org/content/10.2807/1560-7917.ES.2023.28.27.2200806)). - + -![Fitted serial interval distribution for (a) COVID-19 and (b) MERS-CoV based on reported transmission pairs in Saudi Arabia. We fitted three commonly used distributions, Log normal, Gamma, and Weibull distributions, respectively ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#fig5)).](fig/seria-interval-fitted-distributions.jpg) +![Distribution d'intervalles sériels ajustée pour (a) COVID-19 et (b) MERS-CoV sur la base des paires de transmission signalées en Arabie saoudite. Nous avons ajusté trois distributions couramment utilisées, les distributions Log normal, Gamma et Weibull, respectivement ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#fig5)).](fig/seria-interval-fitted-distributions.jpg) -Statistical distributions are summarised in terms of their **summary statistics** like the *location* (mean and percentiles) and *spread* (variance or standard deviation) of the distribution, or with their **distribution parameters** that inform about the *form* (shape and rate/scale) of the distribution. These estimated values can be reported with their **uncertainty** (95% confidence intervals). +Les distributions statistiques sont résumées en fonction de leur **statistiques sommaires** comme *l'emplacement* (moyenne et percentiles) et *l'étendue* (variance ou écart-type) de la distribution, ou avec leur **paramètres de distribution** qui renseignent sur la *forme* (forme et taux/échelle) de la distribution. Ces valeurs estimées peuvent être rapportées avec leur **incertitude** (intervalles de confiance à 95 %). -| Gamma | mean | shape | rate/scale | -|:--------------|:--------------|:--------------|:--------------| -| MERS-CoV | 14.13(13.9–14.7) | 6.31(4.88–8.52) | 0.43(0.33–0.60) | -| COVID-19 | 5.1(5.0–5.5) | 2.77(2.09–3.88) | 0.53(0.38–0.76) | +| Gamma | moyenne | forme | taux/échelle | +| :--------- | :--------------- | :-------------- | :-------------- | +| MERS-CoV | 14\.13(13.9-14.7) | 6\.31(4.88-8.52) | 0\.43(0.33-0.60) | +| COVID-19 | 5\.1(5.0-5.5) | 2\.77(2.09-3.88) | 0\.53(0.38-0.76) | -| Weibull | mean | shape | rate/scale | -|:--------------|:--------------|:--------------|:--------------| -| MERS-CoV | 14.2(13.3–15.2) | 3.07(2.64–3.63) | 16.1(15.0–17.1) | -| COVID-19 | 5.2(4.6–5.9) | 1.74(1.46–2.11) | 5.83(5.08–6.67) | +| Weibull | moyenne | forme | taux/échelle | +| :--------- | :--------------- | :-------------- | :-------------- | +| MERS-CoV | 14\.2(13.3-15.2) | 3\.07(2.64-3.63) | 16\.1(15.0-17.1) | +| COVID-19 | 5\.2(4.6-5.9) | 1\.74(1.46-2.11) | 5\.83(5.08-6.67) | -| Log normal | mean | mean-log | sd-log | -|:--------------|:--------------|:--------------|:--------------| -| MERS-CoV | 14.08(13.1–15.2) | 2.58(2.50–2.68) | 0.44(0.39–0.5) | -| COVID-19 | 5.2(4.2–6.5) | 1.45(1.31–1.61) | 0.63(0.54–0.74) | +| Log normal | moyenne | moyenne-log | sd-log | +| :--------- | :--------------- | :-------------- | :-------------- | +| MERS-CoV | 14\.08(13.1-15.2) | 2\.58(2.50-2.68) | 0\.44(0.39-0.5) | +| COVID-19 | 5\.2(4.2-6.5) | 1\.45(1.31-1.61) | 0\.63(0.54-0.74) | -Table: Serial interval estimates using Gamma, Weibull, and Log Normal distributions. 95% confidence intervals for the shape and scale (logmean and sd for Log Normal) parameters are shown in brackets ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#tbl3)). +Tableau : Estimations des intervalles de série à l'aide des distributions Gamma, Weibull et Log Normal. Les intervalles de confiance à 95 % pour les paramètres de forme et d'échelle (logmoy et sd pour Log Normal) sont indiqués entre parenthèses ([Althobaity et al, 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#tbl3)). ::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: challenge -### Serial interval +### Intervalle de série -Assume that COVID-19 and SARS have similar reproduction number values and that the serial interval approximates the generation time. +Supposons que COVID-19 et le SRAS aient des valeurs de nombre de reproduction similaires et que l'intervalle de série soit proche du temps de génération. -Given the serial interval of both infections in the figure below: +Étant donné l'intervalle sériel des deux infections dans la figure ci-dessous : -- Which one would be harder to control? -- Why do you conclude that? +- Laquelle serait la plus difficile à contrôler ? +- Pourquoi en concluez-vous ainsi ? -![Serial interval of novel coronavirus (COVID-19) infections overlaid with a published distribution of SARS. ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712(20)30119-3/fulltext))](fig/serial-interval-covid-sars.jpg) +![Intervalle en série des infections par le nouveau coronavirus (COVID-19) superposé à une distribution publiée du SRAS. ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712\(20\)30119-3/fulltext))](fig/serial-interval-covid-sars.jpg) ::::::::::::::::: hint -The peak of each curve can inform you about the location of the mean of each distribution. A larger mean indicates a longer expected delay between symptom onset in the infector and infectee. +Le sommet de chaque courbe peut vous renseigner sur l'emplacement de la moyenne de chaque distribution. Une moyenne plus élevée indique un délai plus long entre l'apparition des symptômes chez l'infecteur et l'infecté. :::::::::::::::::::::: ::::::::::::::::: solution -**Which one would be harder to control?** +**Laquelle serait la plus difficile à contrôler ?** COVID-19 -**Why do you conclude that?** +**Pourquoi concluez-vous cela ?** -COVID-19 has a lower mean serial interval. The approximate mean value for the serial interval of COVID-19 is around four days, and SARS is about seven days. Thus, if there are many infections in the population, COVID-19 will on average have more new generations of infection in less time than SARS would, assuming similar reproduction numbers. This means far more resources would be required to keep up with the epidemic. +L'intervalle sériel moyen de COVID-19 est plus faible. La valeur moyenne approximative de l'intervalle sériel de COVID-19 est d'environ quatre jours, alors que celle du SRAS est d'environ sept jours. Par conséquent, s'il y a beaucoup d'infections dans la population, COVID-19 produira en moyenne plus de nouvelles générations d'infections en moins de temps que le SRAS, en supposant des nombres de reproduction similaires. Cela signifie qu'il faudrait beaucoup plus de ressources pour lutter contre l'épidémie. :::::::::::::::::::::::::: @@ -196,42 +192,42 @@ COVID-19 has a lower mean serial interval. The approximate mean value for the se :::::::::::::::::::::: instructor -The objective of the assessment above is to assess the interpretation of a larger or shorter generation time. +L'objectif de l'évaluation ci-dessus est d'évaluer l'interprétation d'un temps de génération plus long ou plus court. :::::::::::::::::::::: -## Choosing epidemiological parameters +## Choix des paramètres épidémiologiques -In this section, we will use `{epiparameter}` to obtain the serial interval for COVID-19, as an alternative to the generation time. +Dans cette section, nous utiliserons `{epiparameter}` pour obtenir l'intervalle sériel de COVID-19, comme alternative au temps de génération. -First, let's see how many parameters we have in the epidemiological distributions database (`epiparameter_db()`) with the `disease` named `covid`-19. Run this code: +Tout d'abord, voyons combien de paramètres nous avons dans la base de données des distributions épidémiologiques (`epiparameter_db()`) avec l'option `disease` nommé `covid`\-19. Exécutez ce code : -```{r,eval=FALSE} +```{r, eval=FALSE} epiparameter::epiparameter_db( disease = "covid" ) ``` -From the `{epiparameter}` package, we can use the `epiparameter_db()` function to ask for any `disease` and also for a specific epidemiological distribution (`epi_name`). Run this in your console: +A partir du `{epiparameter}` nous pouvons utiliser le paquet `epiparameter_db()` pour demander n'importe quel `disease` ainsi qu'une distribution épidémiologique spécifique (`epi_name`). Exécutez cette fonction dans votre console : -```{r,eval=FALSE} +```{r, eval=FALSE} epiparameter::epiparameter_db( disease = "COVID", epi_name = "serial" ) ``` -With this query combination, we get more than one delay distribution (because the database has multiple entries). This output is an `` class object. +Avec cette combinaison de requêtes, nous obtenons plus d'une distribution des délais (parce que la base de données a plusieurs entrées). Cette sortie est un `` objet de classe. ::::::::::::::::: callout -### CASE-INSENSITIVE +### INSENSIBLE À LA CASSE -`epiparameter_db` is [case-insensitive](https://dillionmegida.com/p/case-sensitivity-vs-case-insensitivity/#case-insensitivity). This means that you can use strings with letters in upper or lower case indistinctly. Strings like `"serial"`, `"serial interval"` or `"serial_interval"` are also valid. +`epiparameter_db` est [insensible à la casse](https://dillionmegida.com/p/case-sensitivity-vs-case-insensitivity/#case-insensitivity). Cela signifie que vous pouvez utiliser des chaînes avec des lettres en majuscules ou en minuscules indistinctement. Des chaînes comme `"serial"`, `"serial interval"` ou `"serial_interval"` sont également valables. ::::::::::::::::::::::::: -As suggested in the outputs, to summarise an `` object and get the column names from the underlying parameter database, we can add the `epiparameter::parameter_tbl()` function to the previous code using the pipe `%>%`: +Comme le suggèrent les résultats, pour résumer une `` et obtenir les noms des colonnes de la base de données de paramètres sous-jacente, nous pouvons ajouter l'élément `epiparameter::parameter_tbl()` au code précédent à l'aide du tuyau `%>%`: ```{r} epiparameter::epiparameter_db( @@ -241,17 +237,17 @@ epiparameter::epiparameter_db( epiparameter::parameter_tbl() ``` -In the `epiparameter::parameter_tbl()` output, we can also find different types of probability distributions (e.g., Log-normal, Weibull, Normal). +Dans le `epiparameter::parameter_tbl()` nous pouvons également trouver différents types de distributions de probabilité (par exemple, Log-normal, Weibull, Normal). -`{epiparameter}` uses the `base` R naming convention for distributions. This is why **Log normal** is called `lnorm`. +`{epiparameter}` utilise la fonction `base` R pour les distributions. C'est pourquoi **Log normal** s'appelle `lnorm`. ::::::::::::::::: spoiler -### Why do we have an 'NA' entry? +### Pourquoi avons-nous une entrée "NA" ? -Entries with a missing value (``) in the `prob_distribution` column are *non-parameterised* entries. They have summary statistics (e.g. a mean and standard deviation) but no probability distribution specified. Compare these two outputs: +Les entrées avec une valeur manquante (``) dans le `prob_distribution` sont *non paramétrés* non paramétrées. Elles présentent des statistiques sommaires (par exemple, une moyenne et un écart type), mais aucune distribution de probabilité n'est spécifiée. Comparez ces deux résultats : -```{r,eval=FALSE} +```{r, eval=FALSE} # get an object distribution <- epiparameter::epiparameter_db( @@ -272,11 +268,11 @@ distribution %>% is_parameterised() ``` -### Parameterised entries have an Inference method +### Les entrées paramétrées ont une méthode d'inférence -As detailed in `?is_parameterised`, a parameterised distribution is the entry that has a probability distribution associated with it provided by an `inference_method` as shown in `metadata`: +Comme indiqué dans `?is_parameterised` une distribution paramétrée est l'entrée à laquelle est associée une distribution de probabilité fournie par une méthode d'inférence. `inference_method` comme indiqué dans `metadata`: -```{r,eval=FALSE} +```{r, eval=FALSE} distribution[[1]]$metadata$inference_method distribution[[2]]$metadata$inference_method distribution[[4]]$metadata$inference_method @@ -284,50 +280,49 @@ distribution[[4]]$metadata$inference_method ::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::: challenge -### Find your delay distributions! +### Trouvez vos distributions de retard ! -Take 2 minutes to explore the `{epiparameter}` library. +Prenez 2 minutes pour explorer les `{epiparameter}` bibliothèque. -**Choose** a disease of interest (e.g., influenza, measles, etc.) and a delay distribution (e.g., the incubation period, onset to death, etc.). +**Choisissez** une maladie d'intérêt (par exemple, la grippe, la rougeole, etc.) et une distribution des délais (par exemple, la période d'incubation, le début de la maladie jusqu'au décès, etc.) -Find: +Trouvez : -- How many delay distributions are for that disease? +- Combien y a-t-il de distributions de délais pour cette maladie ? -- How many types of probability distribution (e.g., gamma, log normal) are for a given delay in that disease? +- Combien de types de distribution de probabilité (par exemple, gamma, log normale) y a-t-il pour un délai donné dans cette maladie ? -Ask: +Posez la question : -- Do you recognise the papers? +- Reconnaissez-vous les journaux ? -- Should `{epiparameter}` literature review consider any other paper? +- La revue de littérature d'*{epiparameter}* devrait- elle prendre en compte un autre article? ::::::::::::::::: hint -The `epiparameter_db()` function with `disease` alone counts the number of entries like: +L'analyse `epiparameter_db()` fonction avec `disease` compte à elle seule le nombre d'entrées comme : -- studies, and -- delay distributions. +- études, et +- les répartitions des retards. -The `epiparameter_db()` function with `disease` and `epi_name` gets a list of all entries with: +Les `epiparameter_db()` avec `disease` et `epi_name` obtient une liste de toutes les entrées avec : -- the complete citation, -- the **type** of a probability distribution, and -- distribution parameter values. +- la citation complète, +- le **type** d'une distribution de probabilité, et +- les valeurs des paramètres de la distribution. -The combo of `epiparameter_db()` plus `parameter_tbl()` gets a data frame of all entries with columns like: +La combinaison de `epiparameter_db()` plus `parameter_tbl()` permet d'obtenir un cadre de données de toutes les entrées avec des colonnes comme : -- the **type** of the probability distribution per delay, and -- author and year of the study. +- les **type** de la distribution de probabilité par délai, et +- l'auteur et l'année de l'étude. :::::::::::::::::::::: ::::::::::::::::: solution -We choose to explore Ebola's delay distributions: +Nous avons choisi d'explorer les distributions des retards d'Ebola : ```{r} # we expect 16 delay distributions for Ebola @@ -336,9 +331,9 @@ epiparameter::epiparameter_db( ) ``` -Now, from the output of `epiparameter::epiparameter_db()`, What is an [offspring distribution](../learners/reference.md#offspringdist)? +Maintenant, à partir de la sortie de `epiparameter::epiparameter_db()` Quelle est la [distribution de la descendance](../learners/reference.md#offspringdist)? -We choose to find Ebola's incubation periods. This output lists all the papers and parameters found. Run this locally if needed: +Nous choisissons de trouver les périodes d'incubation d'Ebola. Cette sortie liste tous les articles et paramètres trouvés. Exécutez-la localement si nécessaire : ```{r, eval=FALSE} epiparameter::epiparameter_db( @@ -347,9 +342,9 @@ epiparameter::epiparameter_db( ) ``` -We use `parameter_tbl()` to get a summary display of all: +Nous utilisons `parameter_tbl()` pour obtenir un récapitulatif de toutes les données : -```{r,eval=TRUE} +```{r, eval=TRUE} # we expect 2 different types of delay distributions # for ebola incubation period epiparameter::epiparameter_db( @@ -359,20 +354,19 @@ epiparameter::epiparameter_db( parameter_tbl() ``` -We find two types of probability distributions for this query: _log normal_ and _gamma_. +Nous trouvons deux types de distributions de probabilités pour cette requête : *log normale* et *gamma*. -How does `{epiparameter}` do the collection and review of peer-reviewed literature? We invite you to read the vignette on ["Data Collation and Synthesis Protocol"](https://epiverse-trace.github.io/epiparameter/articles/data_protocol.html)! +Comment le `{epiparameter}` collecte-t-elle et examine-t-elle la littérature évaluée par les pairs ? Nous vous invitons à lire la vignette sur ["Protocole de collecte et de synthèse des données](https://epiverse-trace.github.io/epiparameter/articles/data_protocol.html)! :::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::: +## Sélectionnez une distribution unique -## Select a single distribution - -The `epiparameter::epiparameter_db()` function works as a filtering or subset function. We can use the `author` argument to keep `Hiroshi Nishiura` parameters, or the `subset` argument to keep parameters from studies with a sample size higher than 10: +Les `epiparameter::epiparameter_db()` fonctionne comme une fonction de filtrage ou de sous-ensemble. Nous pouvons utiliser la fonction `author` pour conserver `Hiroshi Nishiura` ou l'argument `subset` pour conserver les paramètres des études dont la taille de l'échantillon est supérieure à 10 : -```{r, eval = FALSE} +```{r, eval=FALSE} epiparameter::epiparameter_db( disease = "covid", epi_name = "serial", @@ -382,7 +376,7 @@ epiparameter::epiparameter_db( epiparameter::parameter_tbl() ``` -We still get more than one epidemiological parameter. Instead, we can set the `single_epiparameter` argument to `TRUE` for only one: +Nous obtenons toujours plus d'un paramètre épidémiologique. Au lieu de cela, nous pouvons définir l'argument `single_epiparameter` à `TRUE` pour n'en obtenir qu'un seul : ```{r} epiparameter::epiparameter_db( @@ -394,21 +388,21 @@ epiparameter::epiparameter_db( ::::::::::::::::: callout -### How does 'single_epiparameter' work? +### Comment fonctionne "single\_epiparameter" ? -Looking at the help documentation for `?epiparameter::epiparameter_db()`: +En regardant la documentation d'aide pour `?epiparameter::epiparameter_db()`: -- If multiple entries match the arguments supplied and `single_epiparameter = TRUE`, then the parameterised -`` with the *largest sample size* will be returned. -- If multiple entries are equal after this sorting, the *first entry* in the list will be returned. +- Si plusieurs entrées correspondent aux arguments fournis et que `single_epiparameter = TRUE` alors l'entrée paramétrée + `` avec l'entrée *la plus grande taille d'échantillon* sera renvoyée. +- Si plusieurs entrées sont égales après ce tri, l'option *première entrée* de la liste sera retournée. -What is a *parametrised* ``? Look at `?is_parameterised`. +Qu'est-ce qu'un *paramétré* ``? Regardez `?is_parameterised`. ::::::::::::::::::::::::: -Let's assign this `` class object to the `covid_serialint` object. +Attribuons cette `` à l'objet de classe `covid_serialint` objet. -```{r,message=FALSE} +```{r, message=FALSE} covid_serialint <- epiparameter::epiparameter_db( disease = "covid", @@ -417,58 +411,33 @@ covid_serialint <- ) ``` - - -You can use `plot()` to `` objects to visualise: - -- the *Probability Density Function (PDF)* and -- the *Cumulative Distribution Function (CDF)*. +- le *Fonction de densité de probabilité (PDF)* et +- la *Fonction de distribution cumulative (FDC)*. ```{r} # plot object plot(covid_serialint) ``` -With the `xlim` argument, you can change the length or number of days in the `x` axis. Explore what this looks like: +Avec la `xlim` vous pouvez modifier la durée ou le nombre de jours de la période d'essai. `x` de l'axe. Découvrez à quoi cela ressemble : -```{r,eval=FALSE} +```{r, eval=FALSE} # plot object plot(covid_serialint, xlim = c(1, 60)) ``` +## Extrayez les statistiques récapitulatives -## Extract the summary statistics - -We can get the `mean` and standard deviation (`sd`) from this `` diving into the `summary_stats` object: +Nous pouvons obtenir les `mean` et l'écart-type (`sd`) à partir de ce `` plonger dans le `summary_stats` l'objet : ```{r} # get the mean covid_serialint$summary_stats$mean ``` -Now, we have an epidemiological parameter we can reuse! Given that the `covid_serialint` is a `lnorm` or log normal distribution, we can replace the **summary statistics** numbers we plug into the `EpiNow2::LogNormal()` function: +Nous avons maintenant un paramètre épidémiologique que nous pouvons réutiliser ! Étant donné que l'objet `covid_serialint` est un `lnorm` ou une distribution log-normale, nous pouvons remplacer le **statistiques sommaires** que nous introduisons dans la base de données `EpiNow2::LogNormal()` dans la fonction ```r generation_time <- @@ -479,13 +448,13 @@ generation_time <- ) ``` -In the next episode we'll learn how to use `{EpiNow2}` to correctly specify distributions, estimate transmissibility. Then, how to use **distribution functions** to get a maximum value (`max`) for `EpiNow2::LogNormal()` and use `{epiparameter}` in your analysis. +Dans le prochain épisode, nous apprendrons à utiliser la fonction `{EpiNow2}` pour spécifier correctement les distributions et estimer la transmissibilité. Ensuite, comment utiliser **fonctions de distribution** pour obtenir une valeur maximale (`max`) pour `EpiNow2::LogNormal()` et utiliser `{epiparameter}` dans votre analyse. :::::::::::::::::::::::::::::: callout -### Log normal distributions +### Distributions logarithmiques normales -If you need the log normal **distribution parameters** instead of the summary statistics, we can use `epiparameter::get_parameters()`: +Si vous avez besoin de la distribution log-normale **de la distribution logarithmique** au lieu des statistiques sommaires, vous pouvez utiliser `epiparameter::get_parameters()`: ```{r} covid_serialint_parameters <- @@ -494,45 +463,43 @@ covid_serialint_parameters <- covid_serialint_parameters ``` -This gets a vector of class `` ready to use as input for any other package! +Cela permet d'obtenir un vecteur de classe `` prêt à être utilisé comme entrée pour n'importe quel autre paquet ! -Consider that {EpiNow2} functions also accept distribution parameters as inputs. Run `?EpiNow2::LogNormal` to read the [Probability distributions](https://epiforecasts.io/EpiNow2/reference/Distributions.html) reference manual. +Considérez que {EpiNow2} acceptent également les paramètres de distribution comme données d'entrée. Exécutez `?EpiNow2::LogNormal` pour lire les [Distributions de probabilités](https://epiforecasts.io/EpiNow2/reference/Distributions.html) de référence. :::::::::::::::::::::::::::::: -## Challenges +## Défis :::::::::::::::::::::::::::::: challenge -### Ebola's serial interval +### L'intervalle sériel d'Ebola -Take 1 minute to: +Prenez 1 minute pour : -Get access to the Ebola serial interval with the highest sample size. +Accédez à l'intervalle de série Ebola avec la taille d'échantillon la plus élevée. -Answer: +Réponse : -- What is the `sd` of the epidemiological distribution? +- Qu'est-ce que le `sd` de la distribution épidémiologique ? -- What is the `sample_size` used in that study? +- Quelle est la `sample_size` utilisée dans cette étude ? ::::::::: hint -Use the `$` operator plus the tab or keyboard button to explore them as an expandable list: +Utilisez le `$` et l'opérateur tabulation ou pour les explorer sous la forme d'une liste extensible : ```r covid_serialint$ ``` -Use the `str()` to display the structure of the `` R object. +Utilisez la touche `str()` pour afficher la structure du `` R. :::::::::::::::::: -:::::::::::::::::::::::::::::::: - -:::::::::: instructor +:::::::::: solution -```{r,eval=TRUE} +```{r, eval=TRUE} # ebola serial interval ebola_serial <- epiparameter::epiparameter_db( @@ -544,7 +511,7 @@ ebola_serial <- ebola_serial ``` -```{r,eval=TRUE} +```{r, eval=TRUE} # get the sd ebola_serial$summary_stats$sd @@ -552,53 +519,54 @@ ebola_serial$summary_stats$sd ebola_serial$metadata$sample_size ``` -Try to visualise this distribution using `plot()`. +Essayez de visualiser cette distribution en utilisant `plot()`. -Also, explore all the other nested elements within the `` object. +Explorez également tous les autres éléments imbriqués dans l'élément `` à l'intérieur de l'objet. -Share about: +Partagez sur : -- What elements do you find useful for your analysis? -- What other elements would you like to see in this object? How? +- Quels sont les éléments que vous trouvez utiles pour votre analyse ? +- Quels autres éléments souhaiteriez-vous voir figurer dans cet objet ? Comment ? :::::::::::::::::::: +:::::::::::::::::::::::::::::::: + :::::::::::::::::::::::::::::: instructor -An interesting element is the `method_assess` nested entry, which refers to the methods used by the study authors to assess for bias while estimating the serial interval distribution. +Un élément intéressant est le `method_assess` qui fait référence aux méthodes utilisées par les auteurs de l'étude pour évaluer les biais lors de l'estimation de la distribution des intervalles sériels. ```{r} covid_serialint$method_assess ``` -We will explore these concepts following episodes! +Nous explorerons ces concepts au fil des épisodes ! :::::::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::: challenge -### Ebola's severity parameter +### Le paramètre de gravité d'Ebola -A severity parameter like the duration of hospitalisation could add to the information needed about the bed capacity in response to an outbreak ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). +Un paramètre de gravité tel que la durée de l'hospitalisation pourrait compléter les informations nécessaires sur la capacité d'accueil en cas d'épidémie ([Cori et al.](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). - + -For Ebola: +Pour Ebola : -- What is the reported *point estimate* of the mean duration of health care and case isolation? +- Qu'est-ce qui est rapporté ? *estimation ponctuelle* de la durée moyenne des soins de santé et de l'isolement des cas ? ::::::::::::::::: hint -An informative delay should measure the time from symptom onset to recovery or death. +Un délai informatif devrait mesurer le temps écoulé entre l'apparition des symptômes et la guérison ou le décès. -Find a way to access the whole `{epiparameter}` database and find how that delay may be stored. The `parameter_tbl()` output is a dataframe. +Trouver un moyen d'accéder à l'ensemble `{epiparameter}` base de données et de trouver comment ce délai peut être stocké. Les `parameter_tbl()` est un tableau de données. :::::::::::::::::::::: ::::::::::::::::: solution -```{r,eval=TRUE} +```{r, eval=TRUE} # one way to get the list of all the available parameters epiparameter_db(disease = "all") %>% parameter_tbl() %>% @@ -614,7 +582,7 @@ ebola_severity <- epiparameter_db( ebola_severity$summary_stats$mean ``` -Check that for some `{epiparameter}` entries you will also have the *uncertainty* around the *point estimate* of each summary statistic: +Vérifiez que pour certains `{epiparameter}` vous disposerez également de l'élément *incertitude* autour de la *estimation ponctuelle* de chaque statistique sommaire : ```{r} # 95% confidence intervals @@ -629,44 +597,46 @@ ebola_severity$summary_stats$mean_ci_limits ::::::::::::::::: discussion -### The distribution zoo +### La distribution zoo -Explore this shinyapp called **The Distribution Zoo**! +Explorez cette shinyapp appelée **Le zoo de la distribution**! -Follow these steps to reproduce the form of the COVID serial interval distribution from `{epiparameter}` (`covid_serialint` object): +Suivez les étapes suivantes pour reproduire la forme de la distribution d'intervalles sériels COVID à partir de `{epiparameter}` (`covid_serialint` objet) : -1. Access the shiny app website, -2. Go to the left panel, -3. Keep the *Category of distribution*: `Continuous Univariate`, -4. Select a new *Type of distribution*: `Log-Normal`, -5. Move the **sliders**, i.e. the graphical control element that allows you to adjust a value by moving a handle along a horizontal track or bar to the `covid_serialint` parameters. +1. Accédez au site web de l'application shiny, +2. Allez dans le panneau de gauche, +3. Gardez l'option *Catégorie de distribution*: `Continuous Univariate`, +4. Sélectionnez un nouveau *Type de distribution*: `Log-Normal`, +5. Déplacez le **curseurs** c'est-à-dire l'élément de contrôle graphique qui vous permet d'ajuster une valeur en déplaçant une poignée le long d'une piste ou d'une barre horizontale jusqu'à l'emplacement du curseur. `covid_serialint` paramètres. -Replicate these with the `distribution` object and all its list elements: `[[2]]`, `[[3]]`, and `[[4]]`. Explore how the shape of a distribution changes when its parameters change. +Reproduisez ces éléments à l'aide de l'outil `distribution` et tous ses éléments de liste : `[[2]]`, `[[3]]` et `[[4]]`. Explorez comment la forme d'une distribution change lorsque ses paramètres changent. -Share about: +Partagez à propos de : -- What other features of the website do you find helpful? +- Quelles sont les autres fonctionnalités du site web que vous trouvez utiles ? ::::::::::::::::::::::::: ::::::::::::::::::::::::: instructor -In the context of user interfaces and graphical user interfaces (GUIs), like the [Distribution Zoo](https://ben18785.shinyapps.io/distribution-zoo/) shiny app, a **slider** is a graphical control element that allows users to adjust a value by moving a handle along a track or bar. Conceptually, it provides a way to select a numeric value within a specified range by visually sliding or dragging a pointer (the handle) along a continuous axis. +Dans le contexte des interfaces utilisateurs et des interfaces graphiques (GUI), comme le [Zoo de la distribution](https://ben18785.shinyapps.io/distribution-zoo/) une application **glissière** est un élément de contrôle graphique qui permet aux utilisateurs d'ajuster une valeur en déplaçant une poignée le long d'une piste ou d'une barre. Conceptuellement, il permet de sélectionner une valeur numérique dans une plage spécifiée en faisant glisser visuellement un pointeur (la poignée) le long d'un axe continu. ::::::::::::::::::::::::: -::::::::::::::::::::::::::::::::::::: keypoints +::::::::::::::::::::::::::::::::::::: keypoints -- Use `{epiparameter}` to access the literature catalogue of epidemiological delay distributions. -- Use `epiparameter_db()` to select single delay distributions. -- Use `parameter_tbl()` for an overview of multiple delay distributions. -- Reuse known estimates for unknown disease in the early stage of an outbreak when no contact tracing data is available. +- Utilisez `{epiparameter}` pour accéder au catalogue des distributions de retards épidémiologiques. +- Utilisez cette fonction pour accéder au catalogue de la littérature sur les distributions de délais épidémiologiques. `epiparameter_db()` pour sélectionner une seule distribution de délais. +- Utilisez cette option pour sélectionner les distributions à retard unique. `parameter_tbl()` pour obtenir une vue d'ensemble des distributions de délais multiples. +- Réutiliser les estimations connues pour une maladie inconnue au début d'une épidémie lorsqu'il n'y a pas de données sur la recherche des contacts. :::::::::::::::::::::::::::::::::::::::::::::::: + + From 2d7e37f34f5b469c98674002bb492b35e713aa74 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 22 Sep 2025 22:58:38 +0100 Subject: [PATCH 06/29] add after technical review --- episodes/delays-access.Rmd | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/episodes/delays-access.Rmd b/episodes/delays-access.Rmd index dc597b2d..b010b3b9 100644 --- a/episodes/delays-access.Rmd +++ b/episodes/delays-access.Rmd @@ -47,11 +47,15 @@ Regardez le [glossaire](../learners/reference.md) pour connaître les définitio Toutefois, au début d'une épidémie, les efforts visant à comprendre l'épidémie et les implications pour la lutte peuvent être retardés par l'absence d'un moyen facile d'accéder aux paramètres clés de la maladie en question ([Nash et al., 2023](https://mrc-ide.github.io/epireview/)). Des projets tels que `{epiparameter}` et `{epireview}` construisent des catalogues en ligne en suivant des protocoles de synthèse de la littérature qui peuvent aider à informer l'analyse et à paramétrer les modèles en fournissant une bibliothèque de paramètres épidémiologiques précédemment estimés à partir d'épidémies passées. - +:::::::::::::::::: instructor + +Les premiers modèles pour COVID-19 utilisaient des paramètres d'autres coronavirus. + +:::::::::::::::::: Pour illustrer l'utilisation de l'outil `{epiparameter}` R dans votre pipeline d'analyse, notre objectif dans cet épisode sera d'accéder à un ensemble spécifique de paramètres épidémiologiques de la littérature, au lieu d'extraire des articles et de les copier-coller à la main. Nous les insérerons ensuite dans un `{EpiNow2}` flux de travail d'analyse. - + Commençons par charger le fichier `{epiparameter}` paquetage. Nous utiliserons le tube `%>%` pour connecter certaines de ses fonctions, certaines `{tibble}` et `{dplyr}` donc appelons aussi à la fonction `{tidyverse}` paquetage : @@ -388,7 +392,7 @@ epiparameter::epiparameter_db( ::::::::::::::::: callout -### Comment fonctionne "single\_epiparameter" ? +### Comment fonctionne "single_epiparameter" ? En regardant la documentation d'aide pour `?epiparameter::epiparameter_db()`: @@ -550,8 +554,6 @@ Nous explorerons ces concepts au fil des épisodes ! Un paramètre de gravité tel que la durée de l'hospitalisation pourrait compléter les informations nécessaires sur la capacité d'accueil en cas d'épidémie ([Cori et al.](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). - - Pour Ebola : - Qu'est-ce qui est rapporté ? *estimation ponctuelle* de la durée moyenne des soins de santé et de l'isolement des cas ? @@ -637,6 +639,3 @@ la mettre à jour à partir du dernier test d'épiparamètre - Réutiliser les estimations connues pour une maladie inconnue au début d'une épidémie lorsqu'il n'y a pas de données sur la recherche des contacts. :::::::::::::::::::::::::::::::::::::::::::::::: - - - From 6b968133aefda2578bb9fa0673fa1156363d7076 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Tue, 23 Sep 2025 09:35:51 +0100 Subject: [PATCH 07/29] update section --- episodes/delays-access.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/delays-access.Rmd b/episodes/delays-access.Rmd index b010b3b9..9f3ade81 100644 --- a/episodes/delays-access.Rmd +++ b/episodes/delays-access.Rmd @@ -501,7 +501,7 @@ Utilisez la touche `str()` pour afficher la structure du `` R. :::::::::::::::::: -:::::::::: solution +:::::::::: instructor ```{r, eval=TRUE} # ebola serial interval From 241da8d48e117122c3a66b47e3fd1977cb72bcb2 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Tue, 23 Sep 2025 10:04:42 +0100 Subject: [PATCH 08/29] update list of videos --- learners/setup.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/learners/setup.md b/learners/setup.md index 200b221a..008dc518 100644 --- a/learners/setup.md +++ b/learners/setup.md @@ -371,22 +371,29 @@ prêt à commencer ! Si c'est le cas, [contactez-nous](#your-questions)! :::::::::::::::::::::::::: prereq -**Regardez** trois vidéos de 5 minutes pour rafraîchir vos connaissances sur les distributions statistiques : +**Regardez** deux vidéos de 5 minutes pour rafraîchir vos connaissances sur les distributions statistiques : +- 365 Data Science (2019) +**Probabilité : types de distributions**, YouTube (Sous-titres en français, 7 min). +Disponible à l'adresse : + +- Samuel Rey-Mermet (2020) +**Statistiques et distributions de probabilités**, YouTube (En français, 30 min) +Disponible à l'adresse : + + - StatQuest avec Josh Starmer (2018) **La probabilité n'est pas la vraisemblance. Découvrez pourquoi !!!**, YouTube. Disponible à l'adresse : - - StatQuest avec Josh Starmer (2017) **La vraisemblance maximale, expliquée clairement !!!**, YouTube. Disponible à l'adresse : - +--> :::::::::::::::::::::::::: From f30bb15da836ab1a35a9e4c23b9d884a23acdd30 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Tue, 23 Sep 2025 10:34:55 +0100 Subject: [PATCH 09/29] fix time --- learners/setup.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/learners/setup.md b/learners/setup.md index 008dc518..5b218455 100644 --- a/learners/setup.md +++ b/learners/setup.md @@ -371,7 +371,8 @@ prêt à commencer ! Si c'est le cas, [contactez-nous](#your-questions)! :::::::::::::::::::::::::: prereq -**Regardez** deux vidéos de 5 minutes pour rafraîchir vos connaissances sur les distributions statistiques : + +**Regardez** deux vidéos pour rafraîchir vos connaissances sur les distributions statistiques : - 365 Data Science (2019) **Probabilité : types de distributions**, YouTube (Sous-titres en français, 7 min). From 6a1896dd3deb0db506448d0028655728d7a9686e Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 24 Sep 2025 16:22:05 +0100 Subject: [PATCH 10/29] add quantify fr --- config.yaml | 2 +- episodes/quantify-transmissibility.Rmd | 345 ++++++++++++------------- 2 files changed, 173 insertions(+), 174 deletions(-) diff --git a/config.yaml b/config.yaml index 30efe151..6acbd3e3 100644 --- a/config.yaml +++ b/config.yaml @@ -60,7 +60,7 @@ contact: 'andree.valle-campos@lshtm.ac.uk' # Order of episodes in your lesson episodes: - delays-access.Rmd -#- quantify-transmissibility.Rmd +- quantify-transmissibility.Rmd #- delays-functions.Rmd #- create-forecast.Rmd #- severity-static.Rmd diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index 3ee95de1..6837af11 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -1,58 +1,55 @@ --- -title: 'Quantifying transmission' +title: Quantifier la transmission teaching: 30 exercises: 0 --- -:::::::::::::::::::::::::::::::::::::: questions - -- How can I estimate the time-varying reproduction number ($Rt$) and growth rate from a time series of case data? -- How can I quantify geographical heterogeneity from these transmission metrics? +:::::::::::::::::::::::::::::::::::::: questions +- Comment puis-je estimer le nombre de reproduction variable dans le temps ($Rt$) et le taux de croissance à partir d'une série chronologique de données de cas ? +- Comment quantifier l'hétérogénéité géographique à partir de ces paramètres de transmission ? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Learn how to estimate transmission metrics from a time series of case data using the R package `EpiNow2` +- Apprenez à estimer les paramètres de transmission à partir d'une série chronologique de données sur les cas à l'aide du paquet `EpiNow2`. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +## Conditions préalables -Learners should familiarise themselves with following concepts before working through this tutorial: +Les étudiants doivent se familiariser avec les concepts suivants avant de suivre ce tutoriel : -**Statistics**: probability distributions, principle of Bayesian analysis. +**Statistiques**: distributions de probabilités, principe de l'analyse bayésienne. -**Epidemic theory**: Effective reproduction number. +**Théorie des épidémies**: Nombre de reproduction effectif. -**Data science**: Data transformation and visualization. You can review the episode on [Aggregate and visualize](https://epiverse-trace.github.io/tutorials-early/describe-cases.html) incidence data. +**Science des données**: la transformation et la visualisation des données. Vous pouvez revoir l'épisode sur [Agréger et visualiser](https://epiverse-trace.github.io/tutorials-early/describe-cases.html) les données d'incidence. ::::::::::::::::::::::::::::::::: - - ::::::::::::::::::::::::::::::::::::: callout -### Reminder: the Effective Reproduction Number, $R_t$ -The [basic reproduction number](../learners/reference.md#basic), $R_0$, is the average number of cases caused by one infectious individual in an entirely susceptible population. +### Rappel : le nombre de reproduction effectif, $R_t$ -But in an ongoing outbreak, the population does not remain entirely susceptible as those that recover from infection are typically immune. Moreover, there can be changes in behaviour or other factors that affect transmission. When we are interested in monitoring changes in transmission we are therefore more interested in the value of the **effective reproduction number**, $R_t$, which represents the average number of cases caused by one infectious individual in the population at time $t$, given the current state of the population (including immunity levels and control measures). +Le [nombre de reproduction de base](../learners/reference.md#basic), $R_0$ est le nombre moyen de cas causés par un individu infectieux dans une population entièrement susceptible. -:::::::::::::::::::::::::::::::::::::::::::::::: +Mais dans une épidémie en cours, la population ne reste pas entièrement susceptible, car les personnes qui se remettent de l'infection sont généralement immunisées. En outre, il peut y avoir des changements de comportement ou d'autres facteurs qui affectent la transmission. Lorsque nous voulons surveiller les changements dans la transmission, nous nous intéressons donc davantage à la valeur du **nombre de reproduction effectif**, $R_t$ qui représente le nombre moyen de cas causés par un individu infectieux dans la population au temps $t$ compte tenu de l'état actuel de la population (y compris les niveaux d'immunité et les mesures de contrôle). +:::::::::::::::::::::::::::::::::::::::::::::::: ## Introduction -The transmission intensity of an outbreak is quantified using two key metrics: the reproduction number, which informs on the strength of the transmission by indicating how many new cases are expected from each existing case; and the [growth rate](../learners/reference.md#growth), which informs on the speed of the transmission by indicating how rapidly the outbreak is spreading or declining (doubling/halving time) within a population. For more details on the distinction between speed and strength of transmission and implications for control, review [Dushoff & Park, 2021](https://royalsocietypublishing.org/doi/full/10.1098/rspb.2020.1556). +L'intensité de la transmission d'une épidémie est quantifiée à l'aide de deux paramètres clés : le nombre de reproduction, qui renseigne sur la force de la transmission en indiquant le nombre de nouveaux cas attendus pour chaque cas existant, et le nombre de décès. [taux de croissance](../learners/reference.md#growth) qui renseigne sur la vitesse de transmission en indiquant la rapidité avec laquelle l'épidémie se propage ou décline (temps de doublement/dédoublement) au sein d'une population. Pour plus de détails sur la distinction entre la vitesse et la force de la transmission et les implications pour la lutte, consultez le site [Dushoff \& Park, 2021](https://royalsocietypublishing.org/doi/full/10.1098/rspb.2020.1556). -To estimate these key metrics using case data we must account for delays between the date of infections and date of reported cases. In an outbreak situation, data are usually available on reported dates only, therefore we must use estimation methods to account for these delays when trying to understand changes in transmission over time. +Pour estimer ces paramètres clés à l'aide des données relatives aux cas, nous devons tenir compte des délais entre les dates d'infections et les dates de cas déclarés. Lors d'une épidémie, les données ne sont généralement disponibles qu'à partir des dates déclarées. Nous devons donc utiliser des méthodes d'estimation pour tenir compte de ces retards lorsque nous essayons de comprendre les changements dans la transmission au fil du temps. -In the next tutorials we will focus on how to use the functions in `{EpiNow2}` to estimate transmission metrics of case data. We will not cover the theoretical background of the models or inference framework, for details on these concepts see the [vignette](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections.html). +Dans les prochains tutoriels, nous nous concentrerons sur la manière d'utiliser les fonctions de `{EpiNow2}` pour estimer les paramètres de transmission des données de cas. Nous ne couvrirons pas le contexte théorique des modèles ou du cadre d'inférence, pour plus de détails sur ces concepts, consultez la [vignette.](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections.html). -In this tutorial we are going to learn how to use the `{EpiNow2}` package to estimate the time-varying reproduction number. We'll get input data from `{incidence2}`. We'll use the `{tidyr}` and `{dplyr}` packages to arrange some of its outputs, `{ggplot2}` to visualize case distribution, and the pipe `%>%` to connect some of their functions, so let's also call to the `{tidyverse}` package: +Dans ce tutoriel, nous allons apprendre à utiliser le paquet `{EpiNow2}` pour estimer le nombre de reproduction variable dans le temps. Nous obtiendrons les données d'entrée de `{incidence2}`. Nous utiliserons le paquet `{tidyr}` et `{dplyr}` pour organiser certains de ses résultats, `{ggplot2}` pour visualiser la distribution des cas, et le tuyau `%>%` pour relier certaines de leurs fonctions, alors appelons aussi la fonction `{tidyverse}` paquet : ```r library(EpiNow2) @@ -60,67 +57,66 @@ library(incidence2) library(tidyverse) ``` -```{r,echo=FALSE,eval=TRUE,message=FALSE,warning=FALSE} +```{r, echo=FALSE, eval=TRUE, message=FALSE, warning=FALSE} library(tidyverse) ``` - ::::::::::::::::::: checklist -### The double-colon +### Le double point-virgule -The double-colon `::` in R lets you call a specific function from a package without loading the entire package into the current environment. +Le double deux-points `::` dans R vous permet d'appeler une fonction spécifique d'un paquet sans charger l'ensemble du paquet dans l'environnement actuel. -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +Par exemple, vous pouvez appeler une fonction spécifique d'un paquet sans charger le paquet entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir du paquet `{dplyr}`. -This helps us remember package functions and avoid namespace conflicts. +Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les conflits d'espace de noms. ::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor -This tutorial illustrates the usage of `epinow()` to estimate the time-varying reproduction number and infection times. Learners should understand the necessary inputs to the model and the limitations of the model output. +Ce tutoriel illustre l'utilisation de `epinow()` pour estimer le nombre de reproduction et les durées d'infection variables dans le temps. Les étudiants doivent comprendre les données d'entrée nécessaires au modèle et les limites des résultats du modèle. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::::::: callout -### Bayesian inference -The R package `EpiNow2` uses a [Bayesian inference](../learners/reference.md#bayesian) framework to estimate reproduction numbers and infection times based on reporting dates. In other words, it estimates transmission based on when people were actually infected (rather than symptom onset), by accounting for delays in observed data. In contrast, the `{EpiEstim}` package allows faster and simpler real-time estimation of the reproduction number using only case data over time, reflecting how transmission changes based on when symptoms appear. +### Inférence bayésienne -In Bayesian inference, we use prior knowledge (prior distributions) with data (in a likelihood function) to find the posterior probability: +Le paquet R `EpiNow2` utilise une méthode d'inférence bayésienne [inférence bayésienne](../learners/reference.md#bayesian) pour estimer les nombres de reproduction et les durées d'infection sur la base des dates déclarées. En d'autres termes, il estime la transmission en fonction de la date à laquelle les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), en tenant compte des retards dans les données observées. En revanche, l'approche `{EpiEstim}` permet une estimation en temps réel plus rapide et plus simple du nombre de reproductions en utilisant uniquement les données de cas au fil du temps, reflétant la façon dont la transmission change en fonction du moment où les symptômes apparaissent. -$Posterior \, probability \propto likelihood \times prior \, probability$ +Dans l'inférence bayésienne, nous utilisons les connaissances a priori (distributions a priori) et les données (via une fonction de vraisemblance) pour obtenir la probabilité a posteriori : + +$\text{Probabilité a posteriori} \propto \text{vraisemblance} \times \text{probabilité a priori}$ :::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::: instructor -Refer to the prior probability distribution and the [posterior probability](https://en.wikipedia.org/wiki/Posterior_probability) distribution. +Faites référence à la distribution de probabilité a priori et à la [probabilité a posteriori](https://en.wikipedia.org/wiki/Posterior_probability) a posteriori. -In the ["`Expected change in reports`" callout](#expected-change-in-daily-cases), by "the posterior probability that $R_t < 1$", we refer specifically to the [area under the posterior probability distribution curve](https://www.nature.com/articles/nmeth.3368/figures/1). +Dans la ["`Expected change in reports`", l'appel](#expected-change-in-daily-cases) par "la probabilité a posteriori que $R_t < 1$"nous nous référons spécifiquement à la [aire sous la courbe de distribution de la probabilité a posteriori](https://www.nature.com/articles/nmeth.3368/figures/1). :::::::::::::::::::::::::::::::::::::::::::::::: +## Distributions de délais et données de cas -## Delay distributions and case data -### Case data +### Données de cas -To illustrate the functions of `EpiNow2` we will use outbreak data of the start of the COVID-19 pandemic from the United Kingdom. The data are available in the R package `{incidence2}`. +Pour illustrer les fonctions des `EpiNow2` nous utiliserons les données relatives au début de la pandémie de COVID-19 au Royaume-Uni. Les données sont disponibles dans le paquet R `{incidence2}`. ```{r} dplyr::as_tibble(incidence2::covidregionaldataUK) ``` -To use the data, we must format the data to have two columns: +Pour utiliser les données, nous devons les formater de manière à ce qu'elles comportent deux colonnes : -+ `date`: the date (as a date object see `?is.Date()`), -+ `confirm`: number of disease reports (confirm) on that date. +- `date` la date (en tant qu'objet date, voir `?is.Date()`), +- `confirm`: nombre de cas déclarés (confirmés) à cette date. -Let's use `{tidyr}` and `{incidence2}` for this: +Utilisons `{tidyr}` et `{incidence2}` pour cela : -```{r, warning = FALSE, message = FALSE} +```{r, warning=FALSE, message=FALSE} cases <- incidence2::covidregionaldataUK %>% # Preprocess missing values tidyr::replace_na(base::list(cases_new = 0)) %>% @@ -140,16 +136,17 @@ cases <- incidence2::covidregionaldataUK %>% cases ``` -With `incidence2::incidence()` we aggregate cases in different time *intervals* (i.e., days, weeks or months) or per *group* categories. Also we can have complete dates for all the range of dates per group category using `complete_dates = TRUE` -Explore later the [`incidence2::incidence()` reference manual](https://www.reconverse.org/incidence2/reference/incidence.html) +Avec `incidence2::incidence()` nous agrégeons des cas sur différentes périodes de temps (*intervalles*, c'est-à-dire des jours, des semaines ou des mois) ou par groupe. Nous pouvons également obtenir les dates complètes pour tous les intervalles de dates par catégorie de groupe à l'aide de la fonction +`complete_dates = TRUE` +Explorez plus tard les [`incidence2::incidence()` manuel de référence](https://www.reconverse.org/incidence2/reference/incidence.html) ::::::::::::::::::::::::: spoiler -### Can we replicate {incidence2} with {dplyr}? +### Pouvons-nous reproduire {incidence2} avec {dplyr}? -We can get an object similar to `cases` from the `incidence2::covidregionaldataUK` data frame using the `{dplyr}` package. +Nous pouvons obtenir un objet similaire à `cases` à partir de l'objet `incidence2::covidregionaldataUK` à l'aide du paquet `{dplyr}`. -```{r, warning = FALSE, message = FALSE, eval=FALSE} +```{r, warning=FALSE, message=FALSE, eval=FALSE} incidence2::covidregionaldataUK %>% dplyr::select(date, cases_new) %>% dplyr::group_by(date) %>% @@ -158,13 +155,13 @@ incidence2::covidregionaldataUK %>% dplyr::slice_head(n = 90) ``` -However, the `incidence2::incidence()` function contains convenient arguments like `complete_dates` that facilitate getting an incidence object with the same range of dates for each grouping without the need of extra code lines or a time-series package. +Cependant, `incidence2::incidence()` contient des arguments pratiques comme `complete_dates` qui facilitent l'obtention d'un objet d'incidence avec le même intervalle de dates pour chaque groupe sans nécessiter de lignes de code supplémentaires ou un paquet de séries temporelles. ::::::::::::::::::::::::: -In an outbreak situation it is likely we would only have access to the beginning of the input data set. Therefore we assume we only have the first 90 days of this data. +Dans une situation d'épidémie, il est probable que nous n'ayons accès qu'au début de l'ensemble des données d'entrée. Nous supposons donc que nous ne disposons que des 90 premiers jours de ces données. -```{r echo = FALSE} +```{r, echo=FALSE} cases %>% # use ggplot2 ggplot(aes(x = date, y = confirm)) + @@ -174,40 +171,38 @@ cases %>% ) ``` -### Delay distributions +### Distribution des délais -We assume there are delays from the time of infection until the time a case is reported. We specify these delays as distributions to account for the uncertainty in individual level differences. The delay may involve multiple types of processes. A typical delay from time of infection to case reporting may consist of: +Nous supposons qu'il existe des délais entre le moment de l'infection et le moment où un cas est signalé. Nous spécifions ces délais sous forme de distributions pour tenir compte de l'incertitude des différences au niveau individuel. Le délai peut impliquer plusieurs types de processus. Un délai typique entre le moment de l'infection et la déclaration du cas peut consister en ce qui suit -> **time from infection to symptom onset** (the [incubation period](../learners/reference.md#incubation)) + **time from symptom onset to case notification** (the reporting time) -. +> **le temps écoulé entre l'infection et l'apparition des symptômes** (le [période d'incubation](../learners/reference.md#incubation)) + **délai entre l'apparition des symptômes et la notification du cas** (délai de déclaration) +> . -The delay distribution for each of these processes can either estimated from data or obtained from the literature. We can express uncertainty about what the correct parameters of the distributions by assuming the distributions have **fixed** parameters or whether they have **variable** parameters. To understand the difference between **fixed** and **variable** distributions, let's consider the incubation period. +La distribution des délais pour chacun de ces processus peut être estimée à partir de données ou obtenue à partir de la littérature. Nous pouvons exprimer l'incertitude quant aux paramètres corrects des distributions en supposant que les distributions ont **fixe** fixes ou qu'elles ont **variables** variables. Pour comprendre la différence entre **fixe** et **variables** considérons la période d'incubation. ::::::::::::::::::::::::::::::::::::: callout -### Delays and data -The number of delays and type of delay are a flexible input that depend on the data. The examples below highlight how the delays can be specified for different data sources: +### Délais et données + +Le nombre de retards et le type de retard sont des données flexibles qui dépendent des données. Les exemples ci-dessous montrent comment les délais peuvent être spécifiés pour différentes sources de données :
-| Data source | Delay(s) | -| ------------- |-------------| -|Time of symptom onset |Incubation period | -|Time of case report |Incubation period + time from symptom onset to case notification | -|Time of hospitalisation |Incubation period + time from symptom onset to hospitalisation | +| Source de données | Délai (s) | +| -------------------------------- | ----------------------------------------------------------------------------------------- | +| Heure d'apparition des symptômes | Période d'incubation | +| Date de la déclaration du cas | Période d'incubation + délai entre l'apparition des symptômes et la notification du cas | +| Durée de l'hospitalisation | Période d'incubation + temps écoulé entre l'apparition des symptômes et l'hospitalisation |
- :::::::::::::::::::::::::::::::::::::::::::::::: +#### Distribution de la période d'incubation +La distribution de la période d'incubation pour de nombreuses maladies peut généralement être obtenue à partir de la littérature. L'ensemble `{epiparameter}` contient une bibliothèque de paramètres épidémiologiques pour différentes maladies, obtenus à partir de la littérature. -#### Incubation period distribution - -The distribution of incubation period for many diseases can usually be obtained from the literature. The package `{epiparameter}` contains a library of epidemiological parameters for different diseases obtained from the literature. - -We specify a (fixed) gamma distribution with mean $\mu = 4$ and standard deviation $\sigma = 2$ (shape = $4$, scale = $1$) using the function `Gamma()` as follows: +Nous spécifions une distribution gamma (fixe) avec moyenne $\mu = 4$ et un écart-type $\sigma = 2$ (forme = $4$, échelle = $1$) en utilisant la fonction `Gamma()` comme suit : ```{r} incubation_period_fixed <- EpiNow2::Gamma( @@ -219,35 +214,33 @@ incubation_period_fixed <- EpiNow2::Gamma( incubation_period_fixed ``` -The argument `max` is the maximum value the distribution can take; in this example, 20 days. +L'argument `max` est la valeur maximale que la distribution peut prendre ; dans cet exemple, 20 jours. ::::::::::::::::::::::::::::::::::::: callout -### Why a gamma distribution? +### Pourquoi une distribution gamma ? -The incubation period must be a positive value. Therefore we must specify a distribution in `{EpiNow2}` which is for positive values only. +La période d'incubation doit être une valeur positive. Nous devons donc spécifier une distribution en `{EpiNow2}` qui ne concerne que les valeurs positives. -`Gamma()` supports Gamma distributions and `LogNormal()` Log-normal distributions, which are distributions for positive values only. +`Gamma()` prend en charge les distributions Gamma et `LogNormal()` les distributions log-normales, qui sont des distributions pour les valeurs positives uniquement. -For all types of delay, we will need to use distributions for positive values only - we don't want to include delays of negative days in our analysis! +Pour tous les types de retard, nous devrons utiliser des distributions pour les valeurs positives uniquement - nous ne voulons pas inclure les retards de jours négatifs dans notre analyse ! :::::::::::::::::::::::::::::::::::::::::::::::: +#### Prise en compte de l'incertitude de la distribution - -#### Including distribution uncertainty - -To specify a **variable** distribution, we include uncertainty around the mean $\mu$ and standard deviation $\sigma$ of our gamma distribution. If our incubation period distribution has a mean $\mu$ and standard deviation $\sigma$, then we assume the mean ($\mu$) follows a Normal distribution with standard deviation $\sigma_{\mu}$: +Pour spécifier une distribution **variable** nous incluons l'incertitude autour de la moyenne $\mu$ et de l'écart-type $\sigma$ de notre distribution gamma. Si notre distribution de la période d'incubation a une moyenne $\mu$ et un écart-type $\sigma$ nous supposons que la moyenne ($\mu$) suit une distribution normale avec un écart type $\sigma_{\mu}$: $$\mbox{Normal}(\mu,\sigma_{\mu}^2)$$ -and a standard deviation ($\sigma$) follows a Normal distribution with standard deviation $\sigma_{\sigma}$: +et un écart-type ($\sigma$) suit une distribution normale avec un écart type $\sigma_{\sigma}$: $$\mbox{Normal}(\sigma,\sigma_{\sigma}^2).$$ -We specify this using `Normal()` for each argument: the mean ($\mu = 4$ with $\sigma_{\mu} = 0.5$) and standard deviation ($\sigma = 2$ with $\sigma_{\sigma} = 0.5$). +Nous spécifions ceci en utilisant `Normal()` pour chaque argument : la moyenne ($\mu = 4$ avec $\sigma_{\mu} = 0.5$) et l'écart-type ($\sigma = 2$ avec $\sigma_{\sigma} = 0.5$). -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} incubation_period_variable <- EpiNow2::Gamma( mean = EpiNow2::Normal(mean = 4, sd = 0.5), sd = EpiNow2::Normal(mean = 2, sd = 0.5), @@ -257,16 +250,15 @@ incubation_period_variable <- EpiNow2::Gamma( incubation_period_variable ``` +#### Retards dans l'établissement des rapports -#### Reporting delays - -After the incubation period, there will be an additional delay of time from symptom onset to case notification: the reporting delay. We can specify this as a fixed or variable distribution, or estimate a distribution from data. +Après la période d'incubation, il s'écoule un délai supplémentaire entre l'apparition des symptômes et la notification du cas : le délai de déclaration. Nous pouvons le spécifier comme une distribution fixe ou variable, ou estimer une distribution à partir de données. -When specifying a distribution, it is useful to visualise the probability density to see the peak and spread of the distribution, in this case we will use a *log normal* distribution. +Lorsque vous spécifiez une distribution, il est utile de visualiser la densité de probabilité pour voir le pic et l'étendue de la distribution. Dans cet example, nous allons utiliser une distribution *log normale*. -If we want to assume that the mean reporting delay is 2 days (with a uncertainty of 0.5 days) and a standard deviation of 1 day (with uncertainty of 0.5 days), we can specify a variable distribution using `LogNormal()` as before: +Si nous voulons supposer que le délai de déclaration moyen est de 2 jours (avec une incertitude de 0,5 jour) et que l'écart type est de 1 jour (avec une incertitude de 0,5 jour), nous pouvons spécifier une distribution variable à l'aide de la commande `LogNormal()` comme précédemment : -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} reporting_delay_variable <- EpiNow2::LogNormal( meanlog = EpiNow2::Normal(mean = 2, sd = 0.5), sdlog = EpiNow2::Normal(mean = 1, sd = 0.5), @@ -276,15 +268,15 @@ reporting_delay_variable <- EpiNow2::LogNormal( :::::::::::::::::::::: spoiler -### Visualize a log Normal distribution using {epiparameter} +### Visualisez une distribution log-normale en utilisant {epiparameter} -Using `epiparameter::epiparameter()` we can create a custom distribution. The fixed log normal distribution will look like: +En utilisant `epiparameter::epiparameter()` nous pouvons créer une distribution personnalisée. La distribution normale à logarithme fixe aura l'aspect suivant : ```r library(epiparameter) ``` -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} epiparameter::epiparameter( disease = "covid", epi_name = "reporting delay", @@ -302,18 +294,17 @@ epiparameter::epiparameter( :::::::::::::::::::::: -We can plot single and combined distributions generated by `{EpiNow2}` using `plot()`. Let's combine in one plot the delay from infection to report which includes the incubation period and reporting delay: +Nous pouvons tracer les distributions simples et combinées générées par `{EpiNow2}` en utilisant `plot()`. Combinons dans un même graphique le délai entre l'infection et la déclaration, qui comprend la période d'incubation et le délai de déclaration : ```{r} plot(incubation_period_variable + reporting_delay_variable) ``` - :::::::::::::::::: callout -If data is available on the time between symptom onset and reporting, we can use the function `estimate_delay()` to estimate a log normal distribution from a vector of delays. The code below illustrates how to use `estimate_delay()` with synthetic delay data. +Si l'on dispose de données sur le délai entre l'apparition des symptômes et la déclaration, on peut utiliser la fonction `estimate_delay()` pour estimer une distribution log-normale à partir d'un vecteur de délais. Le code ci-dessous illustre comment utiliser la fonction `estimate_delay()` avec des données synthétiques sur les délais. -```{r, eval = FALSE } +```{r, eval=FALSE} delay_data <- rlnorm(500, log(5), 1) # synthetic delay data reporting_delay <- EpiNow2::estimate_delay( @@ -325,12 +316,11 @@ reporting_delay <- EpiNow2::estimate_delay( :::::::::::::::::: -#### Generation time - -We also must specify a distribution for the generation time. Here we will use a log normal distribution with mean 3.6 and standard deviation 3.1 ([Ganyani et al. 2020](https://doi.org/10.2807/1560-7917.ES.2020.25.17.2000257)). +#### Temps de génération +Nous devons également spécifier une distribution pour le temps de génération. Nous utiliserons ici une distribution log-normale avec une moyenne de 3,6 et un écart-type de 3,1 ([Ganyani et al. 2020](https://doi.org/10.2807/1560-7917.ES.2020.25.17.2000257)). -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} generation_time_variable <- EpiNow2::LogNormal( mean = EpiNow2::Normal(mean = 3.6, sd = 0.5), sd = EpiNow2::Normal(mean = 3.1, sd = 0.5), @@ -338,40 +328,39 @@ generation_time_variable <- EpiNow2::LogNormal( ) ``` +## Trouver des estimations -## Finding estimates +La fonction `epinow()` est une "enveloppe" pour la fonction `estimate_infections()` utilisée pour estimer les cas par date d'infection. La distribution du temps de génération et la distribution des délais doivent être transmises à l'aide des fonctions ` generation_time_opts()` et `delay_opts()` respectivement. -The function `epinow()` is a wrapper for the function `estimate_infections()` used to estimate cases by date of infection. The generation time distribution and delay distributions must be passed using the functions ` generation_time_opts()` and `delay_opts()` respectively. +Il existe de nombreuses autres entrées qui peuvent être transmises à `epinow()` voir `?EpiNow2::epinow()` pour plus de détails. +Une entrée optionnelle consiste à spécifier un a priori *log-normal* pour le nombre de reproduction effectif $R_t$ au début de l'épidémie. Nous spécifions une moyenne de 2 jours et un écart-type de 2 jours comme arguments de la commande `prior` dans `rt_opts()`: -There are numerous other inputs that can be passed to `epinow()`, see `?EpiNow2::epinow()` for more detail. -One optional input is to specify a *log normal* prior for the effective reproduction number $R_t$ at the start of the outbreak. We specify a mean of 2 days and standard deviation of 2 days as arguments of `prior` within `rt_opts()`: - -```{r, eval = TRUE} +```{r, eval=TRUE} # define Rt prior distribution rt_prior <- EpiNow2::rt_opts(prior = EpiNow2::LogNormal(mean = 2, sd = 2)) ``` ::::::::::::::::::::::::::::::::::::: callout -### Bayesian inference using Stan +### Inférence bayésienne à l'aide de Stan -The Bayesian inference is performed using MCMC methods with the program [Stan](https://mc-stan.org/). There are a number of default inputs to the Stan functions including the number of chains and number of samples per chain (see `?EpiNow2::stan_opts()`). +L'inférence bayésienne est réalisée à l'aide de méthodes MCMC avec le programme [Stan](https://mc-stan.org/). Les fonctions Stan disposent d'un certain nombre d'entrées par défaut, notamment le nombre de chaînes et le nombre d'échantillons par chaîne (voir `?EpiNow2::stan_opts()`). -To reduce computation time, we can run chains in parallel. To do this, we must set the number of cores to be used. By default, 4 MCMC chains are run (see `stan_opts()$chains`), so we can set an equal number of cores to be used in parallel as follows: +Pour réduire le temps de calcul, nous pouvons exécuter les chaînes en parallèle. Pour ce faire, nous devons définir le nombre de cœurs à utiliser. Par défaut, 4 chaînes MCMC sont exécutées (voir `stan_opts()$chains`), nous pouvons donc définir un nombre égal de cœurs à utiliser en parallèle comme suit : -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} withr::local_options(base::list(mc.cores = 4)) ``` -To find the maximum number of available cores on your machine, use `parallel::detectCores()`. +Pour connaître le nombre maximal de cœurs disponibles sur votre machine, utilisez la commande `parallel::detectCores()`. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: checklist -**Note:** In the code below `_fixed` distributions are used instead of `_variable` (delay distributions with uncertainty). This is to speed up computation time. It is generally recommended to use variable distributions that account for additional uncertainty. +**Note :** Dans le code ci-dessous `_fixed` les distributions sont utilisées à la place de `_variable` (distributions de retard avec incertitude). Cela permet d'accélérer le temps de calcul. Il est généralement recommandé d'utiliser des distributions variables qui tiennent compte d'une incertitude supplémentaire. -```{r, echo = TRUE} +```{r, echo=TRUE} # fixed alternatives generation_time_fixed <- EpiNow2::LogNormal( mean = 3.6, @@ -388,9 +377,9 @@ reporting_delay_fixed <- EpiNow2::LogNormal( ::::::::::::::::::::::::: -Now you are ready to run `EpiNow2::epinow()` to estimate the time-varying reproduction number for the first 90 days: +Vous êtes maintenant prêt à exécuter `EpiNow2::epinow()` pour estimer le nombre de reproduction variable dans le temps pour les 90 premiers jours : -```{r, message = FALSE, eval = TRUE, echo=TRUE} +```{r, message=FALSE, eval=TRUE, echo=TRUE} estimates <- EpiNow2::epinow( # reported cases data = cases, @@ -402,27 +391,37 @@ estimates <- EpiNow2::epinow( ) ``` - + + - - - - - - - - + + + + + + + + + + + + + + + + + - + ::::::::::::::::::::::::::::::::: callout -### Do not wait for this to continue +### N'attendez pas que cela se poursuive -For the purpose of this tutorial, we can optionally use `EpiNow2::stan_opts()` to reduce computation time. We can specify a fixed number of `samples = 1000` and `chains = 2` to the `stan` argument of the `EpiNow2::epinow()` function. We expect this to take approximately 3 minutes. +Pour les besoins de ce tutoriel, nous pouvons optionnellement utiliser `EpiNow2::stan_opts()` pour réduire le temps de calcul. Nous pouvons spécifier un nombre fixe de `samples = 1000` et `chains = 2` aux `stan` l'argument de la `EpiNow2::epinow()` de la fonction. Cette opération devrait prendre environ 3 minutes. - + ```r # you can add the `stan` argument @@ -432,89 +431,91 @@ EpiNow2::epinow( ) ``` -**Remember:** Using an appropriate number of *samples* and *chains* is crucial for ensuring convergence and obtaining reliable estimates in Bayesian computations using Stan. More accurate outputs come at the cost of speed. +**Rappelez-vous :** En utilisant un nombre approprié d' *échantillons* et de *chaînes* est cruciale pour garantir la convergence et obtenir des estimations fiables dans les calculs bayésiens utilisant Stan. L'obtention de résultats plus précis se fait au détriment de la vitesse. ::::::::::::::::::::::::::::::::: -### Results +### Résultats -We can extract and visualise estimates of the effective reproduction number through time: +Nous pouvons extraire et visualiser des estimations du nombre de reproductions effectives au fil du temps : ```{r} estimates$plots$R ``` -The uncertainty in the estimates increases through time. This is because estimates are informed by data in the past - within the delay periods. This difference in uncertainty is categorised into **Estimate** (green) utilises all data and **Estimate based on partial data** (orange) estimates that are based on less data (because infections that happened at the time are more likely to not have been observed yet) and therefore have increasingly wider intervals towards the date of the last data point. Finally, the **Forecast** (purple) is a projection ahead of time. +L'incertitude des estimations augmente avec le temps. Cela s'explique par le fait que les estimations sont fondées sur des données antérieures, c'est-à-dire sur les périodes de retard. Cette différence d'incertitude est classée dans les catégories suivantes **Estimation** (vert) utilise toutes les données et **Estimation basée sur des données partielles** (orange) des estimations basées sur moins de données (parce que les infections qui se sont produites à l'époque sont plus susceptibles de ne pas avoir encore été observées) et qui ont donc des intervalles de plus en plus larges vers la date du dernier point de données. Enfin, les **Prévision** (violet) est une projection dans le temps. + +Nous pouvons également visualiser l'estimation du taux de croissance dans le temps : -We can also visualise the growth rate estimate through time: ```{r} estimates$plots$growth_rate ``` -To extract a summary of the key transmission metrics at the *latest date* in the data: +Pour extraire un résumé des principaux paramètres de transmission à dernière date* dans les données : ```{r} summary(estimates) ``` -As these estimates are based on partial data, they have a wide uncertainty interval. +Ces estimations étant basées sur des données partielles, elles présentent un large intervalle d'incertitude. -+ From the summary of our analysis we see that the expected change in reports is `r summary(estimates)$estimate[summary(estimates)$measure=="Expected change in reports"]` with the estimated new infections `r summary(estimates)$estimate[summary(estimates)$measure=="New infections per day"]`. +- Le résumé de notre analyse montre que le changement attendu dans les déclarations est de `r summary(estimates)$estimate[summary(estimates)$measure=="Expected change in reports"]` avec l'estimation des nouvelles infections `r summary(estimates)$estimate[summary(estimates)$measure=="New infections per day"]`. -+ The effective reproduction number $R_t$ estimate (on the last date of the data) is `r summary(estimates)$estimate[summary(estimates)$measure=="Effective reproduction no."]`. +- Le nombre effectif de reproduction $R_t$ (à la dernière date des données) est de `r summary(estimates)$estimate[summary(estimates)$measure=="Effective reproduction no."]`. -+ The exponential growth rate of case numbers is `r summary(estimates)$estimate[summary(estimates)$measure=="Rate of growth"]`. +- Le taux de croissance exponentiel du nombre de cas est de `r summary(estimates)$estimate[summary(estimates)$measure=="Rate of growth"]`. -+ The doubling time (the time taken for case numbers to double) is `r summary(estimates)$estimate[summary(estimates)$measure=="Doubling/halving time (days)"]`. +- Le temps de doublement (le temps nécessaire pour que le nombre de cas double) est de `r summary(estimates)$estimate[summary(estimates)$measure=="Doubling/halving time (days)"]`. ::::::::::::::::::::::::::::::::::::: callout -### `Expected change in reports` -A factor describing the expected change in reports based on the posterior probability that $R_t < 1$. +### `Expected change in reports` + +Un facteur décrivant l'évolution attendue des déclarations sur la base de la probabilité a posteriori que $R_t < 1$.
-| Probability ($p$) | Expected change | +| Probabilité ($p$) | Changement attendu ($p$) | ------------- |-------------| -|$p < 0.05$ |Increasing | -|$0.05 \leq p< 0.4$ |Likely increasing | -|$0.4 \leq p< 0.6$ |Stable | -|$0.6 \leq p < 0.95$ |Likely decreasing | -|$0.95 \leq p \leq 1$ |Decreasing | +|p < 0.05$ |Augmentation |p < 0.05$ |Augmentation +| 0,05$ \leq p< 0,4$ |Augmentation probable | +| 0,4$ \leq p< 0,6$ |Stable | +| 0,6$ \leq p < 0,95$ |Vraisemblablement décroissante | +| 0,95$ \leq p \leq 1$ |Décroissante |
:::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::: callout -### Credible intervals +### Intervalles crédibles -In all `{EpiNow2}` output figures, shaded regions reflect 90%, 50%, and 20% credible intervals in order from lightest to darkest. +En tout `{EpiNow2}` les régions ombrées reflètent les intervalles de crédibilité de 90 %, 50 % et 20 %, du plus clair au plus foncé. :::::::::::::::::::::::::: ::::::::::: checklist -`EpiNow2` can be used to estimate transmission metrics from case data at any time in the course of an outbreak. The reliability of these estimates depends on the quality of the data and appropriate choice of delay distributions. In the next tutorial we will learn how to make forecasts and investigate some of the additional inference options available in `EpiNow2`. +`EpiNow2` peut être utilisé pour estimer les paramètres de transmission à partir des données relatives aux cas, à tout moment de l'évolution d'une épidémie. La fiabilité de ces estimations dépend de la qualité des données et du choix approprié des distributions de délais. Dans le prochain tutoriel, nous apprendrons à faire des prévisions et nous étudierons certaines des options d'inférence supplémentaires disponibles dans le logiciel `EpiNow2`. ::::::::::: -## Challenge +## Défi ::::::::::::::::::: challenge -**Quantify geographical heterogeneity** +**Quantifier l'hétérogénéité géographique** -The outbreak data of the start of the COVID-19 pandemic from the United Kingdom from the R package `{incidence2}` includes the region in which the cases were recorded. To find regional estimates of the effective reproduction number and cases, we must format the data to have three columns: +Les données relatives au début de la pandémie de COVID-19 au Royaume-Uni proviennent du paquet R `{incidence2}` comprennent la région dans laquelle les cas ont été enregistrés. Pour obtenir des estimations régionales du nombre effectif de reproductions et de cas, nous devons formater les données de manière à ce qu'elles comportent trois colonnes : -+ `date`: the date, -+ `region`: the region, -+ `confirm`: number of disease reports (confirm) for a region on a given date. +- `date` la date, +- `region`: la région, +- `confirm` le nombre de déclarations de maladies (confirmées) pour une région à une date donnée. -Generate regional Rt estimates from the `incidence2::covidregionaldataUK` data frame by: +Générer des estimations régionales de Rt à partir des `incidence2::covidregionaldataUK` à partir de la base de données : -- use `{incidence2}` to convert aggregated data to incidence data by the variable `region`, -- keep the first 90 dates for all regions, -- estimate the Rt per region using the defined generation time and delays in this episode. +- utiliser `{incidence2}` pour convertir les données agrégées en données d'incidence par la variable `region`, +- conserver les 90 premières dates pour toutes les régions, +- estimer le Rt par région en utilisant le temps de génération défini et les retards dans cet épisode. ```{r} regional_cases <- incidence2::covidregionaldataUK %>% @@ -524,7 +525,7 @@ regional_cases <- incidence2::covidregionaldataUK %>% ::::::::: hint -To wrangle data, you can: +Pour manipuler les données, vous pouvez ```{r} regional_cases <- incidence2::covidregionaldataUK %>% @@ -543,15 +544,15 @@ regional_cases <- incidence2::covidregionaldataUK %>% dplyr::filter(date < ymd(20200301)) ``` -To learn how to do the regional estimation of Rt, read the Get started vignette section on `regional_epinow()` at +Pour apprendre à faire l'estimation régionale de Rt, lisez la section de la vignette "Get started" sur `regional_epinow()` à l'adresse ::::::::: :::::::::::: solution -To find regional estimates, we use the same inputs as `epinow()` to the function `regional_epinow()`: +Pour obtenir des estimations régionales, nous utilisons les mêmes arguments de `epinow()` dans la fonction `regional_epinow()`: -```{r, message = FALSE, eval = FALSE} +```{r, message=FALSE, eval=FALSE} estimates_regional <- EpiNow2::regional_epinow( # cases data = regional_cases, @@ -563,9 +564,9 @@ estimates_regional <- EpiNow2::regional_epinow( ) ``` -Plot the results with: +Visualisez les résultats avec : -```{r, message = FALSE, eval = FALSE} +```{r, message=FALSE, eval=FALSE} estimates_regional$summary$summarised_results$table estimates_regional$summary$plots$R @@ -577,18 +578,16 @@ estimates_regional$summary$plots$R ::::::::::::::::::: - - - + - + - + +::::::::::::::::::::::::::::::::::::: keypoints -::::::::::::::::::::::::::::::::::::: keypoints - -- Transmission metrics can be estimated from case data after accounting for delays -- Uncertainty can be accounted for in delay distributions +- Les paramètres de transmission peuvent être estimés à partir des données du cas après prise en compte des retards. +- L'incertitude peut être prise en compte dans la distribution des retards. :::::::::::::::::::::::::::::::::::::::::::::::: + From 92598ef67620e03de4e1e902c35a9af1da910007 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 24 Sep 2025 17:44:58 +0100 Subject: [PATCH 11/29] homogenize paquet --- episodes/quantify-transmissibility.Rmd | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index 6837af11..4e22fc27 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -13,7 +13,7 @@ exercises: 0 ::::::::::::::::::::::::::::::::::::: objectives -- Apprenez à estimer les paramètres de transmission à partir d'une série chronologique de données sur les cas à l'aide du paquet `EpiNow2`. +- Apprenez à estimer les paramètres de transmission à partir d'une série chronologique de données sur les cas à l'aide du package `EpiNow2`. :::::::::::::::::::::::::::::::::::::::::::::::: @@ -49,7 +49,7 @@ Pour estimer ces paramètres clés à l'aide des données relatives aux cas, nou Dans les prochains tutoriels, nous nous concentrerons sur la manière d'utiliser les fonctions de `{EpiNow2}` pour estimer les paramètres de transmission des données de cas. Nous ne couvrirons pas le contexte théorique des modèles ou du cadre d'inférence, pour plus de détails sur ces concepts, consultez la [vignette.](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections.html). -Dans ce tutoriel, nous allons apprendre à utiliser le paquet `{EpiNow2}` pour estimer le nombre de reproduction variable dans le temps. Nous obtiendrons les données d'entrée de `{incidence2}`. Nous utiliserons le paquet `{tidyr}` et `{dplyr}` pour organiser certains de ses résultats, `{ggplot2}` pour visualiser la distribution des cas, et le tuyau `%>%` pour relier certaines de leurs fonctions, alors appelons aussi la fonction `{tidyverse}` paquet : +Dans ce tutoriel, nous allons apprendre à utiliser le package `{EpiNow2}` pour estimer le nombre de reproduction variable dans le temps. Nous obtiendrons les données d'entrée de `{incidence2}`. Nous utiliserons le package `{tidyr}` et `{dplyr}` pour organiser certains de ses résultats, `{ggplot2}` pour visualiser la distribution des cas, et le tuyau `%>%` pour relier certaines de leurs fonctions, alors appelons aussi la fonction `{tidyverse}` package : ```r library(EpiNow2) @@ -65,11 +65,11 @@ library(tidyverse) ### Le double point-virgule -Le double deux-points `::` dans R vous permet d'appeler une fonction spécifique d'un paquet sans charger l'ensemble du paquet dans l'environnement actuel. +Le double deux-points `::` dans R vous permet d'appeler une fonction spécifique d'un package sans charger l'ensemble du package dans l'environnement actuel. -Par exemple, vous pouvez appeler une fonction spécifique d'un paquet sans charger le paquet entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir du paquet `{dplyr}`. +Par exemple, vous pouvez appeler une fonction spécifique d'un package sans charger le package entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir du package `{dplyr}`. -Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les conflits d'espace de noms. +Cela nous permet de nous souvenir des fonctions du package et d'éviter les conflits d'espace de noms. ::::::::::::::::::: @@ -83,7 +83,7 @@ Ce tutoriel illustre l'utilisation de `epinow()` pour estimer le nombre de repro ### Inférence bayésienne -Le paquet R `EpiNow2` utilise une méthode d'inférence bayésienne [inférence bayésienne](../learners/reference.md#bayesian) pour estimer les nombres de reproduction et les durées d'infection sur la base des dates déclarées. En d'autres termes, il estime la transmission en fonction de la date à laquelle les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), en tenant compte des retards dans les données observées. En revanche, l'approche `{EpiEstim}` permet une estimation en temps réel plus rapide et plus simple du nombre de reproductions en utilisant uniquement les données de cas au fil du temps, reflétant la façon dont la transmission change en fonction du moment où les symptômes apparaissent. +Le package R `EpiNow2` utilise une méthode d'inférence bayésienne [inférence bayésienne](../learners/reference.md#bayesian) pour estimer les nombres de reproduction et les durées d'infection sur la base des dates déclarées. En d'autres termes, il estime la transmission en fonction de la date à laquelle les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), en tenant compte des retards dans les données observées. En revanche, l'approche `{EpiEstim}` permet une estimation en temps réel plus rapide et plus simple du nombre de reproductions en utilisant uniquement les données de cas au fil du temps, reflétant la façon dont la transmission change en fonction du moment où les symptômes apparaissent. Dans l'inférence bayésienne, nous utilisons les connaissances a priori (distributions a priori) et les données (via une fonction de vraisemblance) pour obtenir la probabilité a posteriori : @@ -103,7 +103,7 @@ Dans la ["`Expected change in reports`", l'appel](#expected-change-in-daily-case ### Données de cas -Pour illustrer les fonctions des `EpiNow2` nous utiliserons les données relatives au début de la pandémie de COVID-19 au Royaume-Uni. Les données sont disponibles dans le paquet R `{incidence2}`. +Pour illustrer les fonctions des `EpiNow2` nous utiliserons les données relatives au début de la pandémie de COVID-19 au Royaume-Uni. Les données sont disponibles dans le package R `{incidence2}`. ```{r} dplyr::as_tibble(incidence2::covidregionaldataUK) @@ -144,7 +144,7 @@ Explorez plus tard les [`incidence2::incidence()` manuel de référence](https:/ ### Pouvons-nous reproduire {incidence2} avec {dplyr}? -Nous pouvons obtenir un objet similaire à `cases` à partir de l'objet `incidence2::covidregionaldataUK` à l'aide du paquet `{dplyr}`. +Nous pouvons obtenir un objet similaire à `cases` à partir de l'objet `incidence2::covidregionaldataUK` à l'aide du package `{dplyr}`. ```{r, warning=FALSE, message=FALSE, eval=FALSE} incidence2::covidregionaldataUK %>% @@ -155,7 +155,7 @@ incidence2::covidregionaldataUK %>% dplyr::slice_head(n = 90) ``` -Cependant, `incidence2::incidence()` contient des arguments pratiques comme `complete_dates` qui facilitent l'obtention d'un objet d'incidence avec le même intervalle de dates pour chaque groupe sans nécessiter de lignes de code supplémentaires ou un paquet de séries temporelles. +Cependant, `incidence2::incidence()` contient des arguments pratiques comme `complete_dates` qui facilitent l'obtention d'un objet d'incidence avec le même intervalle de dates pour chaque groupe sans nécessiter de lignes de code supplémentaires ou un package de séries temporelles. ::::::::::::::::::::::::: @@ -505,7 +505,7 @@ En tout `{EpiNow2}` les régions ombrées reflètent les intervalles de crédibi **Quantifier l'hétérogénéité géographique** -Les données relatives au début de la pandémie de COVID-19 au Royaume-Uni proviennent du paquet R `{incidence2}` comprennent la région dans laquelle les cas ont été enregistrés. Pour obtenir des estimations régionales du nombre effectif de reproductions et de cas, nous devons formater les données de manière à ce qu'elles comportent trois colonnes : +Les données relatives au début de la pandémie de COVID-19 au Royaume-Uni proviennent du package R `{incidence2}` comprennent la région dans laquelle les cas ont été enregistrés. Pour obtenir des estimations régionales du nombre effectif de reproductions et de cas, nous devons formater les données de manière à ce qu'elles comportent trois colonnes : - `date` la date, - `region`: la région, @@ -580,7 +580,7 @@ estimates_regional$summary$plots$R - + From e08a2603f2e9421ca3aac36094aa71c29f8adfdd Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 24 Sep 2025 17:45:18 +0100 Subject: [PATCH 12/29] minor fix --- episodes/quantify-transmissibility.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index 4e22fc27..bd9e4811 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -49,7 +49,7 @@ Pour estimer ces paramètres clés à l'aide des données relatives aux cas, nou Dans les prochains tutoriels, nous nous concentrerons sur la manière d'utiliser les fonctions de `{EpiNow2}` pour estimer les paramètres de transmission des données de cas. Nous ne couvrirons pas le contexte théorique des modèles ou du cadre d'inférence, pour plus de détails sur ces concepts, consultez la [vignette.](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections.html). -Dans ce tutoriel, nous allons apprendre à utiliser le package `{EpiNow2}` pour estimer le nombre de reproduction variable dans le temps. Nous obtiendrons les données d'entrée de `{incidence2}`. Nous utiliserons le package `{tidyr}` et `{dplyr}` pour organiser certains de ses résultats, `{ggplot2}` pour visualiser la distribution des cas, et le tuyau `%>%` pour relier certaines de leurs fonctions, alors appelons aussi la fonction `{tidyverse}` package : +Dans ce tutoriel, nous allons apprendre à utiliser le package `{EpiNow2}` pour estimer le nombre de reproduction variable dans le temps. Nous obtiendrons les données d'entrée de `{incidence2}`. Nous utiliserons le package `{tidyr}` et `{dplyr}` pour organiser certains de ses résultats, `{ggplot2}` pour visualiser la distribution des cas, et le tuyau `%>%` pour relier certaines de leurs fonctions, alors appelons aussi le package `{tidyverse}` : ```r library(EpiNow2) From f770c23bc03d26efeabcae40c0f58e246bf412a5 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 24 Sep 2025 17:46:02 +0100 Subject: [PATCH 13/29] add delays function fr --- config.yaml | 2 +- episodes/delays-functions.Rmd | 306 ++++++++++++++++------------------ 2 files changed, 143 insertions(+), 165 deletions(-) diff --git a/config.yaml b/config.yaml index 6acbd3e3..a3b32e85 100644 --- a/config.yaml +++ b/config.yaml @@ -61,7 +61,7 @@ contact: 'andree.valle-campos@lshtm.ac.uk' episodes: - delays-access.Rmd - quantify-transmissibility.Rmd -#- delays-functions.Rmd +- delays-functions.Rmd #- create-forecast.Rmd #- severity-static.Rmd #- superspreading-estimate.Rmd diff --git a/episodes/delays-functions.Rmd b/episodes/delays-functions.Rmd index b3e4302a..1e2d8c0b 100644 --- a/episodes/delays-functions.Rmd +++ b/episodes/delays-functions.Rmd @@ -1,58 +1,46 @@ --- -title: 'Use delay distributions in analysis' +title: Utiliser les distributions de délais dans l'analyse teaching: 20 exercises: 10 -editor_options: +editor_options: chunk_output_type: inline --- -:::::::::::::::::::::::::::::::::::::: questions +:::::::::::::::::::::::::::::::::::::: questions -- How to reuse delays stored in the `{epiparameter}` library with my existing analysis pipeline? +- Comment réutiliser les délais enregistrés dans le `{epiparameter}` avec mon pipeline d'analyse existant ? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Use distribution functions to continuous and discrete distributions stored as `` objects. -- Convert a continuous to a discrete distribution with `{epiparameter}`. -- Connect `{epiparameter}` outputs with `{EpiNow2}` inputs. +- Utilisez les fonctions de distribution pour les distributions continues et discrètes enregistrées en tant que objets ``. +- Convertissez une distribution continue en distribution discrète à l'aide de la fonction `{epiparameter}`. +- Connecter les sorties de `{epiparameter}` avec les entrées `{EpiNow2}`. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +## Conditions préalables -- Complete tutorial [Quantifying transmission](https://epiverse-trace.github.io/tutorials-middle/quantify-transmissibility.html) +- Compléter le tutoriel [Quantifier la transmission](https://epiverse-trace.github.io/tutorials-middle/quantify-transmissibility.html) -This episode requires you to be familiar with: +Pour cet épisode, vous devez vous familiariser avec : -**Data science** : Basic programming with R. +**Science des données** Programmation de base avec R. -**Statistics** : Probability distributions. +**Statistiques** : Distributions de probabilité. -**Epidemic theory** : Epidemiological parameters, time periods, Effective reproductive number. +**Théorie des épidémies** : paramètres épidémiologiques, périodes de temps, nombre reproductif effectif. ::::::::::::::::::::::::::::::::: ## Introduction - - -`{epiparameter}` help us to *choose* one specific set of epidemiological parameters from the literature, instead of copy/pasting them *by hand*: - -```{r,message=FALSE} +```{r, message=FALSE} covid_serialint <- epiparameter::epiparameter_db( disease = "covid", @@ -62,7 +50,7 @@ covid_serialint <- ) ``` -Now, we have an epidemiological parameter we can use in our analysis! In the chunk below we replaced one of the **summary statistics** inputs into `EpiNow2::LogNormal()` +Nous avons maintenant un paramètre épidémiologique que nous pouvons utiliser dans notre analyse ! Dans le bloc de code ci-dessous, nous avons remplacé un des paramètres **statistiques sommaires** en `EpiNow2::LogNormal()` ```r generation_time <- @@ -73,11 +61,11 @@ generation_time <- ) ``` -In this episode, we will use the **distribution functions** that `{epiparameter}` provides to get a maximum value (`max`) for this and any other package downstream in your analysis pipeline! +Dans cet épisode, nous utiliserons les **fonctions de distribution** qui `{epiparameter}` fournit pour obtenir une valeur maximale (`max`) pour ce package et tout autre package en aval dans votre pipeline d'analyse ! -Let's load the `{epiparameter}` and `{EpiNow2}` package. For `{EpiNow2}`, we'll set 4 cores to be used in parallel computations. We'll use the pipe `%>%`, some `{dplyr}` verbs and `{ggplot2}`, so let's also call to the `{tidyverse}` package: +Chargeons le package`{epiparameter}` et `{EpiNow2}` . Pour `{EpiNow2}` nous mettrons 4 cœurs à utiliser pour les calculs parallèles. Nous utiliserons le tube `%>%`, quelques verbes de `{dplyr}` et `{ggplot2}` et donc appelons aussi à le package `{tidyverse}` : -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} library(epiparameter) library(EpiNow2) library(tidyverse) @@ -87,38 +75,38 @@ withr::local_options(list(mc.cores = 4)) ::::::::::::::::::: checklist -### The double-colon +### Le double point-virgule -The double-colon `::` in R lets you call a specific function from a package without loading the entire package into the current environment. +Le double point-virgule `::` dans R vous permet d'appeler une fonction spécifique d'un package sans charger l'ensemble du package dans l'environnement actuel. -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +Par example, `dplyr::filter(data, condition)` utilise la fonction`filter()` du paquet `{dplyr}'. -This helps us remember package functions and avoid namespace conflicts by explicitly specifying which package's function to use when multiple packages have functions with the same name. +Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les conflits d'espace de noms en spécifiant explicitement la fonction du paquet à utiliser lorsque plusieurs paquets ont des fonctions portant le même nom. ::::::::::::::::::: -## Distribution functions +## Fonctions de distribution +w +En R, toutes les distributions statistiques disposent de fonctions qui permettant d'accéder aux éléments suivants : -In R, all the statistical distributions have functions to access the following: - -- `density()`: Probability **Density** function (PDF), -- `cdf()`: Cumulative Distribution function (**CDF**), -- `quantile()`: **Quantile** function, and -- `generate()`: **Random** values from the given distribution. +- `density()`: fonction de densité de probabilité (*FDP*), +- `cdf()` fonction de distribution cumulative (**FDC**), +- `quantile()`: **Quantile** et +- `generate()`: **Aléatoire** valeurs aléatoires de la distribution donnée. :::::::::::: checklist -### Functions for the Normal distribution +### Fonctions pour la loi normale -If you need it, read in detail about the [R probability functions for the normal distribution](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc), each of its definitions and identify in which part of a distribution they are located! +Si vous en avez besoin, lisez en détail la rubrique [Fonctions de probabilité R pour la loinormale](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) Pour en savoir plus sur les fonctions de probabilité de la loi normale, lisez les définitions de chacune d'entre elles et identifiez la partie de la loi dans laquelle elles se situent ! -![The four probability functions for the normal distribution ([Jack Weiss, 2012](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc))](fig/fig5a-normaldistribution.png) +![Les quatre fonctions de probabilité de la loi normale ([Jack Weiss, 2012](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc))](fig/fig5a-normaldistribution.png) :::::::::::::::::::: -If you look at `?stats::Distributions`, each type of distribution has a unique set of functions. However, `{epiparameter}` gives you the same four functions to access each of the values above for any `` object you want! +Si vous regardez `?stats::Distributions`, chaque type de distribution possède un ensemble unique de fonctions. Cependant, `{epiparameter}` vous donne les mêmes quatre fonctions pour accéder à chacune des valeurs ci-dessus pour n'importe quelle objet `` de votre choix ! -```{r,eval=FALSE} +```{r, eval=FALSE} # plot this to have a visual reference plot(covid_serialint, day_range = 0:20) ``` @@ -140,7 +128,7 @@ generate(covid_serialint, times = 10) ::::::::: instructor -Access to the reference documentation (Help files) for these functions is accessible with the three double-colon notation: `epiparameter:::` +L'accès à la documentation de référence (fichiers d'aide) de ces fonctions est accessible avec la notation à trois doubles points : `epiparameter:::` - `?epiparameter:::density.epiparameter()` - `?epiparameter:::cdf.epiparameter()` @@ -151,70 +139,68 @@ Access to the reference documentation (Help files) for these functions is access ::::::::::::::::::::::::::::::::: challenge -### Window for contact tracing and the serial interval +### Fenêtre pour la recherche de contact et l'intervalle sériel -The **serial interval** is important in the optimisation of contact tracing since it provides a time window for the containment of a disease spread ([Fine, 2003](https://academic.oup.com/aje/article/158/11/1039/162725)). Depending on the serial interval, we can evaluate the need to increase the number of days considered for contact tracing to include more backwards contacts ([Davis et al., 2020](https://assets.publishing.service.gov.uk/media/61e9ab3f8fa8f50597fb3078/S0523_Oxford_-_Backwards_contact_tracing.pdf)). +L’**intervalle sériel** est important pour l'optimisation de la recherche des contacts, car il fournit une fenêtre temporelle pour l'endiguement de la propagation d'une maladie ([Fine, 2003](https://academic.oup.com/aje/article/158/11/1039/162725)). En fonction de l'intervalle sériel, nous pouvons évaluer la nécessité d'augmenter le nombre de jours pris en compte pour la recherche des contacts afin d'inclure un plus grand nombre de contacts rétrospectifs ([Davis et al., 2020](https://assets.publishing.service.gov.uk/media/61e9ab3f8fa8f50597fb3078/S0523_Oxford_-_Backwards_contact_tracing.pdf)). -With the COVID-19 serial interval (`covid_serialint`) calculate: +Avec l'intervalle sériel COVID-19 (`covid_serialint`), calculez : -- How much more of the backward cases could be captured if the contact tracing method considered contacts up to 6 days pre-onset compared to 2 days pre-onset? +- Quelle proportion supplémentaire des cas rétrospectifs pourrait être capturée si la méthode de recherche des contacts prenait en compte les contacts jusqu'à 6 jours avant l'apparition de la maladie par rapport à 2 jours avant l'apparition de la maladie ? ::::::::::::::::: hint -In Figure 5 from the [R probability functions for the normal distribution](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc), the shadowed section represents a cumulative probability of `0.997` for the quantile value at `x = 2`. +Dans la figure 5 du [Fonctions de probabilité R pour la loi normale](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) la partie ombrée représente une probabilité cumulée de `0.997` pour la valeur du quantile à `x = 2`. :::::::::::::::::::::: ::::::::::::::::: solution -```{r,eval=FALSE} +```{r, eval=FALSE} plot(covid_serialint) ``` -```{r,eval=TRUE} +```{r, eval=TRUE} cdf(covid_serialint, q = 2) cdf(covid_serialint, q = 6) ``` -Given the COVID-19 serial interval: +Étant donné l'intervalle sériel COVID-19 : -- A contact tracing method considering contacts up to 2 days pre-onset will capture around 11.1% of backward cases. +- Une méthode de recherche des contacts prenant en compte les contacts jusqu'à 2 jours avant l'apparition de la maladie permettra d'identifier environ 11,1 % des cas rétrospectifs. -- If this period is extended to 6 days pre-onset, this could include 76.2% of backward contacts. +- Si cette période est étendue à 6 jours avant l'apparition de la maladie, 76,2 % des cas rétrospectifs pourraient être pris en compte. :::::::::::::::::::::::::: ::::::::::::::::: solution -### What if +### Que se passerait-il si -If we exchange the question between days and cumulative probability to: +Si nous échangeons la question entre les jours et la probabilité cumulée à : -- When considering secondary cases, how many days following the symptom onset of primary cases can we expect 55% of symptom onset to occur? +- Considèrent les cas secondaires, combien de jours après l'apparition des symptômes des cas primaires peut-on s'attendre à ce que 55 % des symptômes apparaissent ? -```{r,eval=FALSE} +```{r, eval=FALSE} quantile(covid_serialint, p = 0.55) ``` -An interpretation could be: +L'interprétation pourrait être la suivante : -- The 55% percent of the symptom onset of secondary cases will happen after 4.2 days after the symptom onset of primary cases. +- Les 55 % de cas secondaires seront devenus symptômatique 4,2 jours après l'apparition des symptômes des cas primaires. :::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::::::::::::: +## Discrétiser une distribution continue -## Discretise a continuous distribution - -We are getting closer to the end! `EpiNow2::LogNormal()` still needs a maximum value (`max`). +Nous nous rapprochons de la fin ! `EpiNow2::LogNormal()` a encore besoin d'une valeur maximale (`max`). -One way to do this is to get the quantile value for the distribution's 99th percentile or `0.99` cumulative probability. For this, we need access to the set of distribution functions for our `` object. +Une façon d'y parvenir est d'obtenir la valeur du quantile pour le 99e percentile de la distribution ou `0.99` probabilité cumulative de la distribution. Pour le faire, nous devons accéder à l'ensemble des fonctions de distribution de notre objet ``. -We can use the set of distribution functions for a _continuous_ distribution (as above). However, these values will be _continuous_ numbers. We can **discretise** the continuous distribution stored in our `` object to get discrete values from a continuous distribution. +Nous pouvons utiliser l'ensemble des fonctions de distribution d'un distribution continue (comme ci-dessus). Cependant, ces valeurs seront des nombres continus. Nous pouvons **discrétiser** la distribution continue enregistréedans notre objet`` pour obtenir des valeurs discrètes à partir d'une distribution continue. -When we `epiparameter::discretise()` the continuous distribution we get a **discrete** distribution: +Lorsque nous `epiparameter::discretise()` la distribution continue, nous obtenons une distribution **discrète** : ```{r} covid_serialint_discrete <- @@ -223,15 +209,15 @@ covid_serialint_discrete <- covid_serialint_discrete ``` -We identify this change in the `Distribution:` output line of the `` object. Double check this line: +Nous identifions ce changement dans la `Distribution:` ligne de sortie de l’objet ``. Vérifiez à nouveau cette ligne : ``` Distribution: discrete lnorm ``` -While for a **continuous** distribution, we plot the *Probability Density Function (PDF)*, for a **discrete** distribution, we plot the *Probability Mass Function (PMF)*: +Alors que pour une distribution **continue** nous traçons la courbe de la *Fonction de densité de probabilité (FDP)* pour une distribution discrète, nous traçons la *Fonction de masse de probabilité (FMP)*: -```{r,eval=FALSE} +```{r, eval=FALSE} # continuous plot(covid_serialint) @@ -239,7 +225,7 @@ plot(covid_serialint) plot(covid_serialint_discrete) ``` -To finally get a `max` value, let's access the quantile value of the 99th percentile or `0.99` probability of the distribution with the `prob_dist$q` notation, similarly to how we access the `summary_stats` values. +Pour obtenir enfin une `max`, accédons à la valeur du quantile du 99e percentile ou `0.99` de la distribution à l'aide de la fonction `prob_dist$q` de la même manière que nous accédons à les valeurs `summary_stats`. ```{r} covid_serialint_discrete_max <- @@ -248,21 +234,21 @@ covid_serialint_discrete_max <- ::::::::::::::::::::::::::::::::: challenge -### Length of quarantine and incubation period +### Durée de la quarantaine et de la période d'incubation -The **incubation period** distribution is a useful delay to assess the length of active monitoring or quarantine ([Lauer et al., 2020](https://www.acpjournals.org/doi/10.7326/M20-0504)). Similarly, delays from symptom onset to recovery (or death) will determine the required duration of health care and case isolation ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). +La **période d'incubation** est un délai utile pour évaluer la durée de la surveillance active ou de la quarantaine ([Lauer et al., 2020](https://www.acpjournals.org/doi/10.7326/M20-0504)). De même, les délais entre l'apparition des symptômes et la guérison (ou le décès) détermineront la durée nécessaire des soins de santé et de l'isolement des cas ([Cori et al.](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). -Calculate: +Calculez : -- Within what exact time frame do 99% of individuals exhibiting COVID-19 symptoms exhibit them after infection? +- Dans quel délai précis 99 % des personnes présentant les symptômes de COVID-19 les manifestent-elles après l'infection ? ::::::::::::::::: hint -What delay distribution measures the time between infection and the onset of symptoms? +Quelle est la distribution des délais qui mesure le temps écoulé entre l'infection et l'apparition des symptômes ? -The probability functions for `` **discrete** distributions are the same that we used for the *continuous* ones! +Les fonctions de probabilité pour les distributions `` **discrètes** sont les mêmes que celles que nous avons utilisées pour les distributions *continues* ! -```{r,eval=FALSE} +```{r, eval=FALSE} # plot to have a visual reference plot(covid_serialint_discrete, day_range = 0:20) @@ -283,7 +269,7 @@ generate(covid_serialint_discrete, times = 10) ::::::::::::::::: solution -```{r,eval=TRUE} +```{r, eval=TRUE} covid_incubation <- epiparameter::epiparameter_db( disease = "covid", @@ -296,19 +282,19 @@ covid_incubation_discrete <- epiparameter::discretise(covid_incubation) quantile(covid_incubation_discrete, p = 0.99) ``` -99% of those who develop COVID-19 symptoms will do so within 16 days of infection. +99% des personnes qui développent les symptômes du COVID-19 le feront dans les 16 jours suivant l'infection. -Now, _Is this result expected in epidemiological terms?_ +Réfléchissez-y, *ce résultat est-il attendu en termes épidémiologiques ?* :::::::::::::::::::::::::: ::::::::::::::::: solution -### How to create a distribution plot? +### Comment créer un diagramme de distribution ? -From a maximum value with `quantile()`, we can create a sequence of quantile values as a numeric vector and calculate `density()` values for each: +A partir d'une valeur maximale avec `quantile()` nous pouvons créer une séquence de valeurs de quantiles sous la forme d'un tableau numérique et calculer `density()` pour chacune d'entre elles : -```{r,eval=TRUE} +```{r, eval=TRUE} # create a discrete distribution visualisation # from a maximum value from the distribution quantile(covid_serialint_discrete, p = 0.99) %>% @@ -336,29 +322,28 @@ quantile(covid_serialint_discrete, p = 0.99) %>% geom_col() ``` -**Remember:** In infections with pre-symptomatic transmission, serial intervals can have negative values ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712(20)30119-3/fulltext)). When we use the _serial interval_ to approximate the _generation time_ we need to make this distribution with positive values only! +**Rappelez-vous :** Dans les infections à transmission pré-symptomatique, les intervalles sériels peuvent avoir des valeurs négatives ([Nishiura et al., 2020](https://www.ijidonline.com/article/S1201-9712\(20\)30119-3/fulltext)). Lorsque nous utilisons la méthode *intervalle sériel* pour approximer le *temps de génération* nous devons effectuer cette distribution avec des valeurs positives uniquement ! :::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::: +## Plug-in `{epiparameter}` pour `{EpiNow2}` -## Plug-in `{epiparameter}` to `{EpiNow2}` +Maintenant, nous pouvons brancher le tout dans le fonction `EpiNow2::LogNormal()` ! -Now we can plug everything into the `EpiNow2::LogNormal()` function! +- les **statistiques sommaires** `mean` et `sd` de la distribution, +- une valeur maximale `max`, +- le nom de la `distribution`. -- the **summary statistics** `mean` and `sd` of the distribution, -- a maximum value `max`, -- the `distribution` name. - -When using `EpiNow2::LogNormal()` to define a **log normal** distribution like the one in the `covid_serialint` object we can specify the mean and sd as parameters. Alternatively, to get the "natural" parameters for a log normal distribution we can convert its summary statistics to distribution parameters named `meanlog` and `sdlog`. With `{epiparameter}` we can directly get the *distribution parameters* using `epiparameter::get_parameters()`: +Lors qu’on utilise `EpiNow2::LogNormal()` pour définir une **loi log-normale** comme celle de l’objet`covid_serialint`, nous pouvons spécifier la moyenne et l'écart-type comme paramètres. Pour obtenir les paramètres "naturels" d'une loi log-normale, nous pouvons également convertir ces statistiques sommaires en paramètres de distribution nommés `meanlog` et `sdlog`. Avec `{epiparameter}` nous pouvons obtenir directement les *paramètres de distribution* en utilisant `epiparameter::get_parameters()`: ```{r} covid_serialint_parameters <- epiparameter::get_parameters(covid_serialint) ``` -Then, we have: +On a alors : ```{r} serial_interval_covid <- @@ -371,9 +356,9 @@ serial_interval_covid <- serial_interval_covid ``` -Assuming a COVID-19 scenario, let's use the first 60 days of the `example_confirmed` data set from the `{EpiNow2}` package as `reported_cases` and the recently created `serial_interval_covid` object as inputs to estimate the time-varying reproduction number using `EpiNow2::epinow()`. +Dans l'hypothèse d'un scénario COVID-19, utilisons les 60 premiers jours de l’ensemble de données . `example_confirmed` du package `{EpiNow2}` comme `reported_cases` et l'objet récemment créé `serial_interval_covid` en tant que données d'entrée pour estimer le nombre de reproduction variable dans le temps à l'aide du fonction `EpiNow2::epinow()`. -```{r,message=FALSE} +```{r, message=FALSE} epinow_estimates_cg <- epinow( # cases data = example_confirmed[1:60], @@ -384,37 +369,37 @@ epinow_estimates_cg <- epinow( base::plot(epinow_estimates_cg) ``` -The `plot()` output includes the estimated cases by date of infection, which are reconstructed from the reported cases and delays. +La sortie `plot()` comprend les cas estimés par date d'infection, qui sont reconstitués à partir des cas déclarés et des retards. :::::::::: callout -### Warning +### Avertissement -Using the serial interval instead of the generation time is an alternative that can propagate bias in your estimates, even more so in diseases with reported pre-symptomatic transmission. ([Chung Lau et al., 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)) +L'utilisation de l'intervalle sériel au lieu du temps de génération est une alternative qui peut propager un biais dans vos estimations, d'autant plus pour les maladies dont la transmission pré-symptomatique est signalée. ([Chung Lau et al, 2021](https://academic.oup.com/jid/article/224/10/1664/6356465)) :::::::::::::::::: -## Adjusting for reporting delays +## Ajustement pour tenir compte des délais de déclaration -Estimating $R_t$ requires data on the daily number of new infections. Due to lags in the development of detectable viral loads, symptom onset, seeking care, and reporting, these numbers are not readily available. All observations reflect transmission events from some time in the past. In other words, if $d$ is the delay from infection to observation, then observations at time $t$ inform $R_{t−d}$, not $R_t$. [(Gostic et al., 2020)](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008409#sec007) +L’estimation de $R_t$ nécessite des données sur le nombre quotidien de nouvelles infections. En raison des délais dans le développement de charges virales détectables, l'apparition des symptômes, la recherche de soins et la déclaration, ces chiffres ne sont pas facilement disponibles. Toutes les observations reflètent des événements de transmission survenus dans le passé. En d'autres termes, si $d$ est le délai entre l'infection et l'observation, alors les observations au temps $t$ informent $R_{t−d}$ et non $R_t$. [(Gostic et al., 2020)](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008409#sec007) -![**Timeline for chain of disease reporting, the Netherlands.** Lab, laboratory; PHA, public health authority. From [Marinović et al., 2015](https://wwwnc.cdc.gov/eid/article/21/2/13-0504_article)](fig/disease-reporting.jpg) +![**Calendrier pour la déclaration de la chaîne de la maladie, Pays-Bas.** Lab, laboratoire ; PHA, autorité de santé publique. A partir de [Marinović et al, 2015](https://wwwnc.cdc.gov/eid/article/21/2/13-0504_article)](fig/disease-reporting.jpg) -The **delay distribution** could be inferred jointly with the underlying times of infection or estimated as the sum of the [incubation period](../learners/reference.md#incubation) distribution and the distribution of delays from symptom onset to observation from line list data ([reporting delay](../learners/reference.md#reportingdelay)). For `{EpiNow2}`, we can specify these two complementary delay distributions in the `delays` argument. +La **distribution des délais** pourrait être déduite conjointement avec les temps d'infection sous-jacents, ou estimée comme la somme des distributions de la . [période d'incubation](../learners/reference.md#incubation) et du délais entre l'apparition des symptômes et l'observation à partir des données de la liste d'attente ([délai de déclaration](../learners/reference.md#reportingdelay)). Pour `{EpiNow2}`, nous pouvons spécifier ces deux distributions de délais complémentaires dans l’argument `delays`. -![**$R_{t}$ is a measure of transmission at time $t$.** Observations after time $t$ must be adjusted. ICU, intensive care unit. From [Gostic et al., 2020](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008409#sec007)](fig/rt-adjusting-delays.png) +![**$R_{t}$ est une mesure de la transmission au moment $t$.** Les observations après le temps $t$ doivent être ajustées. ICU, unité de soins intensifs. A partir de [Gostic et al, 2020](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008409#sec007)](fig/rt-adjusting-delays.png) ::::::::::::::::::::::::::::::::: challenge -### Use an incubation period for COVID-19 to estimate Rt +### Utiliser une période d'incubation pour COVID-19 afin d'estimer Rt -Estimate the time-varying reproduction number for the first 60 days of the `example_confirmed` data set from `{EpiNow2}`. Access to an incubation period for COVID-19 from `{epiparameter}` to use it as a reporting delay. +Estimez le nombre de reproduction variable dans le temps pour les 60 premiers jours de l'ensemble de données `example_confirmed` de `{EpiNow2}`. Accédez à une période d'incubation pour COVID-19 à partir de `{epiparameter}` pour l'utiliser comme délai de déclaration. ::::::::::::::::: hint -Use the last `epinow()` calculation using the `delays` argument and the `delay_opts()` helper function. +Utilisez le dernier calcul d’ `epinow()` à l'aide de l’argument `delays` et la fonction d’aide `delay_opts()` e. -The `delays` argument and the `delay_opts()` helper function are analogous to the `generation_time` argument and the `generation_time_opts()` helper function. +L'argument `delays` et la fonction d’aide`delay_opts()` sont analogues à l’argument `generation_time` et à la fonction d’aide `generation_time_opts()`. ```r epinow_estimates <- epinow( @@ -430,7 +415,7 @@ epinow_estimates <- epinow( ::::::::::::::::: solution -```{r,eval=TRUE,message=FALSE} +```{r, eval=TRUE, message=FALSE} # generation time --------------------------------------------------------- @@ -497,7 +482,7 @@ epinow_estimates_cgi <- epinow( base::plot(epinow_estimates_cgi) ``` -Try to complement the `delays` argument with a reporting delay like the `reporting_delay_fixed` object of the previous episode. +Essayez de compléter le `delays` avec un délai de déclaration comme le `reporting_delay_fixed` de l'épisode précédent. :::::::::::::::::::::::::: @@ -505,64 +490,63 @@ Try to complement the `delays` argument with a reporting delay like the `reporti :::::::::::::::::::::::::::::::::::::::::::::::::::::::: discussion -### How much has it changed? +### Dans quelle mesure a-t-il changé ? -After adding the incubation period, discuss: +Après avoir ajouté la période d'incubation, discutez-en : -- Does the trend of the model fit in the "Estimate" section change? -- Has the uncertainty changed? -- How would you explain or interpret any of these changes? +- La tendance de l'ajustement du modèle dans la section "Estimation" change-t-elle ? +- L'incertitude a-t-elle changé ? +- Comment expliqueriez-vous ou interpréteriez-vous ces changements ? -Compare all the `{EpiNow2}` figures generated previously. +Comparez toutes les figures `{EpiNow2}` générées précédemment. :::::::::::::::::::::::::::::::::::::::::::::::::::::::: -## Challenges +## Défis :::::::::::::::::::::::::::::: callout -### A code completion tip +### Une astuce pour compléter le code -If we write the `[]` next to the object `covid_serialint_parameters[]`, within `[]` we can use the -Tab key -for [code completion feature](https://support.posit.co/hc/en-us/articles/205273297-Code-Completion-in-the-RStudio-IDE) +Si nous écrivons l'élément `[]` à côté de l'objet `covid_serialint_parameters[]` à l'intérieur de `[]` nous pouvons utiliser le touche de tabulation +pour accéder à la [fonctionnalité de complétion de code](https://support.posit.co/hc/en-us/articles/205273297-Code-Completion-in-the-RStudio-IDE) -This gives quick access to `covid_serialint_parameters["meanlog"]` and `covid_serialint_parameters["sdlog"]`. +Elle permet d'accéder rapidement aux éléments suivants `covid_serialint_parameters["meanlog"]` et `covid_serialint_parameters["sdlog"]`. -We invite you to try this out in code chunks and the R console! +Nous vous invitons à tester ceci dans des blocs de code et dans la console R ! :::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: challenge -### Ebola's effective reproduction number adjusted by reporting delays +### Nombre de reproduction effectif d'Ebola ajusté en fonction des délais de déclaration -Download and read the [Ebola dataset](data/ebola_cases.csv): +Téléchargez et lisez les [données Ebola](data/ebola_cases.csv): -- Estimate the effective reproduction number using `{EpiNow2}` -- Adjust the estimate by the available reporting delays in `{epiparameter}` -- Why did you choose that parameter? +- Estimez le nombre de reproduction effectif en utilisant `{EpiNow2}` +- Ajustez l'estimation en fonction des délais de déclaration disponibles en `{epiparameter}` +- Pourquoi avez-vous choisi ce paramètre ? ::::::::::::::::: hint -To calculate the $R_t$ using `{EpiNow2}`, we need: +Pour calculer la $R_t$ en utilisant `{EpiNow2}` nous avons besoin de : -- Aggregated incidence `data`, with confirmed cases per day, and -- The `generation` time distribution. -- Optionally, reporting `delays` distributions when available (e.g., incubation period). +- L’incidence agrégée `data` avec les cas confirmés par jour, et +- La distribution du temps `generation`. +- Optionnellement, les distributions des délais de déclaration lorsqu'elles sont disponibles (par exemple, la période d'incubation). -To get delay distribution using `{epiparameter}` we can use functions like: +Pour obtenir la distribution des délais à l'aide de `{epiparameter}`, nous pouvons utiliser des fonctions comme : - `epiparameter::epiparameter_db()` - `epiparameter::parameter_tbl()` - `discretise()` -- `quantile()` +- `quantile()` :::::::::::::::::::::: ::::::::::::::::: solution -```{r,eval=TRUE,echo=FALSE,message=FALSE} +```{r, eval=TRUE, echo=FALSE, message=FALSE} # read data from the tutorial repository R project ebola_confirmed <- read_csv(file.path("data", "ebola_cases.csv")) %>% @@ -576,7 +560,7 @@ ebola_confirmed <- dplyr::select(-count_variable) ``` -```{r,eval=FALSE,echo=TRUE} +```{r, eval=FALSE, echo=TRUE} # read data # e.g.: if path to file is data/raw-data/ebola_cases.csv then: ebola_confirmed <- @@ -595,7 +579,7 @@ epiparameter::epiparameter_db(disease = "ebola") %>% epiparameter::parameter_tbl() ``` -```{r,message=FALSE,eval=TRUE} +```{r, message=FALSE, eval=TRUE} # generation time --------------------------------------------------------- @@ -653,22 +637,21 @@ plot(epinow_estimates_egi) ::::::::::::::::::::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::: challenge -### What to do with Weibull distributions? +### Que faire avec les distributions de Weibull ? -Use the `influenza_england_1978_school` dataset from the `{outbreaks}` package to calculate the effective reproduction number using `{EpiNow2}` adjusting by the available reporting delays in `{epiparameter}`. +Utilisez les données `influenza_england_1978_school` du package `{outbreaks}` pour calculer le nombre de reproduction effectif à l'aide de `{EpiNow2}` en ajustant en fonction des délais de déclaration disponibles dans `{epiparameter}`. ::::::::::::::::: hint -`EpiNow2::NonParametric()` accepts Probability Mass Functions (PMF) from any distribution family. Read the reference guide on [Probability distributions](https://epiforecasts.io/EpiNow2/reference/Distributions.html). +`EpiNow2::NonParametric()` accepte les fonctions de masse de probabilité (FMP) de n'importe quelle famille de distribution. Lisez le guide de référence sur les [Distributions de probabilités](https://epiforecasts.io/EpiNow2/reference/Distributions.html). :::::::::::::::::::::: ::::::::::::::::: solution -```{r,message=FALSE,eval=TRUE} +```{r, message=FALSE, eval=TRUE} # What parameters are available for Influenza? epiparameter::epiparameter_db(disease = "influenza") %>% epiparameter::parameter_tbl() %>% @@ -762,45 +745,40 @@ plot(epinow_estimates_igi) ::::::::::::::::::::::::::::::::::::::::::: -## Next steps +## Prochaines étapes ::::::::::::::::: testimonial -### How to get distribution parameters from statistical distributions? +### Comment obtenir des paramètres de distribution à partir de distributions statistiques ? -How to get the mean and standard deviation from a generation time with *only* distribution parameters but no summary statistics like `mean` or `sd` for `EpiNow2::Gamma()` or `EpiNow2::LogNormal()`? +Comment obtenir la moyenne et l'écart-type d'un temps de génération avec *seulement* des paramètres de distribution mais aucune statistique sommaire tel que `mean` ou `sd` pour `EpiNow2::Gamma()` ou `EpiNow2::LogNormal()`? -Look at the `{epiparameter}` vignette on [parameter extraction and conversion](https://epiverse-trace.github.io/epiparameter/articles/extract_convert.html) and its [use cases](https://epiverse-trace.github.io/epiparameter/articles/extract_convert.html#use-cases)! +Regardez la vignette `{epiparameter}` sur [l'extraction et la conversion des paramètres](https://epiverse-trace.github.io/epiparameter/articles/extract_convert.html) et ses[cas d'utilisations](https://epiverse-trace.github.io/epiparameter/articles/extract_convert.html#use-cases)! ::::::::::::::::::::::::::::: ::::::::::::::::: testimonial -### How to estimate delay distributions for Disease X? +### Comment estimer la distribution des délais pour la maladie X ? -Refer to this excellent tutorial on estimating the serial interval and incubation period of Disease X accounting for *censoring* using Bayesian inference with packages like `{rstan}` and `{coarseDataTools}`. +Consultez cet excellent tutoriel sur l'estimation de l'intervalle sériel et de la période d'incubation de la maladie X en tenant compte de *la censure* en utilisant l'inférence bayésienne avec des packages comme `{rstan}` et `{coarseDataTools}`. -- Tutorial in English: -- Tutorial en Español: +- Tutoriel en anglais : +- Tutoriel en Español : -**Then,** after you get your estimated values, you can manually create your own` ` class objects with `epiparameter::epiparameter()`! Take a look at its [reference guide on "Create an `` object"](https://epiverse-trace.github.io/epiparameter/reference/epiparameter.html#ref-examples)! +**Ensuite,** Après avoir obtenu vos valeurs estimées, vous pouvez créer manuellement vos propres objets de classe ` ` à l'aide de la fonction `epiparameter::epiparameter()`! Jetez un coup d'œil à son[guide de référence sur "Créer un objet ``"](https://epiverse-trace.github.io/epiparameter/reference/epiparameter.html#ref-examples)! -Lastly, take a look at the latest R packages [{epidist}](https://epidist.epinowcast.org/) and [{primarycensored}](https://primarycensored.epinowcast.org/), which provide methods to address key challenges in estimating distributions, including truncation, interval censoring, and dynamical biases. +Enfin, jetez un coup d'œil au derniers packages R [`{epidist}`](https://epidist.epinowcast.org/) et [`{primarycensored}`](https://primarycensored.epinowcast.org/) qui fournissent des méthodes pour relever les principaux défis de l'estimation des distributions, y compris la troncature, la censure par intervalle et les biais dynamiques. ::::::::::::::::::::::::::::: - -::::::::::::::::::::::::::::::::::::: keypoints +::::::::::::::::::::::::::::::::::::: keypoints -- Use distribution functions with `` objects to get summary statistics and informative parameters for public health interventions like the Window for contact tracing and Length of quarantine. -- Use `discretise()` to convert continuous to discrete delay distributions. -- Use `{epiparameter}` to get reporting delays required in transmissibility estimates. +- Utilisez les fonctions de distribution avec `` pour obtenir des statistiques sommaires et des paramètres informatifs pour les interventions de santé publique, comme la fenêtre de recherche des contacts et la durée de la quarantaine. +- Utilisez `discretise()` pour convertir les distributions de délais continues en distributions discrètes. +- Utilisez `{epiparameter}` pour obtenir les délais de déclaration requis dans les estimations de transmissibilité. :::::::::::::::::::::::::::::::::::::::::::::::: From 0ed0c0b6921cfb3cec16589abfaf8bce03b12cde Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 29 Sep 2025 19:34:21 +0100 Subject: [PATCH 14/29] add edits from update after delivery --- episodes/quantify-transmissibility.Rmd | 74 ++++++++++++++++---------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index bd9e4811..769f908b 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -103,7 +103,7 @@ Dans la ["`Expected change in reports`", l'appel](#expected-change-in-daily-case ### Données de cas -Pour illustrer les fonctions des `EpiNow2` nous utiliserons les données relatives au début de la pandémie de COVID-19 au Royaume-Uni. Les données sont disponibles dans le package R `{incidence2}`. +Pour illustrer les fonctions des `EpiNow2` nous utiliserons les données relatives au début de la pandémie de COVID-19 au Royaume-Uni, mais uniquement pour les 90 premiers jours observés. Les données sont disponibles dans le package R `{incidence2}`. ```{r} dplyr::as_tibble(incidence2::covidregionaldataUK) @@ -117,7 +117,8 @@ Pour utiliser les données, nous devons les formater de manière à ce qu'elles Utilisons `{tidyr}` et `{incidence2}` pour cela : ```{r, warning=FALSE, message=FALSE} -cases <- incidence2::covidregionaldataUK %>% +cases_sliced <- incidence2::covidregionaldataUK %>% + dplyr::as_tibble() %>% # Preprocess missing values tidyr::replace_na(base::list(cases_new = 0)) %>% # Compute the daily incidence @@ -128,12 +129,8 @@ cases <- incidence2::covidregionaldataUK %>% date_names_to = "date", complete_dates = TRUE ) %>% - # Drop column for {EpiNow2} input format - dplyr::select(-count_variable) %>% # Keep the first 90 dates dplyr::slice_head(n = 90) - -cases ``` Avec `incidence2::incidence()` nous agrégeons des cas sur différentes périodes de temps (*intervalles*, c'est-à-dire des jours, des semaines ou des mois) ou par groupe. Nous pouvons également obtenir les dates complètes pour tous les intervalles de dates par catégorie de groupe à l'aide de la fonction @@ -142,7 +139,7 @@ Explorez plus tard les [`incidence2::incidence()` manuel de référence](https:/ ::::::::::::::::::::::::: spoiler -### Pouvons-nous reproduire {incidence2} avec {dplyr}? +**Pouvons-nous reproduire {incidence2} avec {dplyr}?** Nous pouvons obtenir un objet similaire à `cases` à partir de l'objet `incidence2::covidregionaldataUK` à l'aide du package `{dplyr}`. @@ -162,13 +159,17 @@ Cependant, `incidence2::incidence()` contient des arguments pratiques comme `com Dans une situation d'épidémie, il est probable que nous n'ayons accès qu'au début de l'ensemble des données d'entrée. Nous supposons donc que nous ne disposons que des 90 premiers jours de ces données. ```{r, echo=FALSE} -cases %>% - # use ggplot2 - ggplot(aes(x = date, y = confirm)) + - geom_col() + - theme_grey( - base_size = 15 - ) +plot(cases_sliced) +``` + +Pour transmettre les résultats de `{incidence2}` à `{EpiNow2}`, nous devons supprimer une colonne de l'objet `cases_filter` : + +```{r} +# Drop column for {EpiNow2} input format +cases <- cases_sliced %>% + dplyr::select(-count_variable) + +cases ``` ### Distribution des délais @@ -216,6 +217,13 @@ incubation_period_fixed L'argument `max` est la valeur maximale que la distribution peut prendre ; dans cet exemple, 20 jours. +Nous pouvons tracer les distributions générées par `{EpiNow2}` en utilisant `plot()`. + +```{r} +plot(incubation_period_fixed) +``` + + ::::::::::::::::::::::::::::::::::::: callout ### Pourquoi une distribution gamma ? @@ -250,6 +258,11 @@ incubation_period_variable <- EpiNow2::Gamma( incubation_period_variable ``` +Traçons la distribution que nous venons de configurer : +```{r} +plot(incubation_period_variable) +``` + #### Retards dans l'établissement des rapports Après la période d'incubation, il s'écoule un délai supplémentaire entre l'apparition des symptômes et la notification du cas : le délai de déclaration. Nous pouvons le spécifier comme une distribution fixe ou variable, ou estimer une distribution à partir de données. @@ -268,7 +281,7 @@ reporting_delay_variable <- EpiNow2::LogNormal( :::::::::::::::::::::: spoiler -### Visualisez une distribution log-normale en utilisant {epiparameter} +**Visualisez une distribution log-normale en utilisant {epiparameter}** En utilisant `epiparameter::epiparameter()` nous pouvons créer une distribution personnalisée. La distribution normale à logarithme fixe aura l'aspect suivant : @@ -294,24 +307,31 @@ epiparameter::epiparameter( :::::::::::::::::::::: -Nous pouvons tracer les distributions simples et combinées générées par `{EpiNow2}` en utilisant `plot()`. Combinons dans un même graphique le délai entre l'infection et la déclaration, qui comprend la période d'incubation et le délai de déclaration : +:::::::::::::::::: spoiler -```{r} -plot(incubation_period_variable + reporting_delay_variable) -``` - -:::::::::::::::::: callout +**Comment obtenir le délai de reporting à partir des données ?** Si l'on dispose de données sur le délai entre l'apparition des symptômes et la déclaration, on peut utiliser la fonction `estimate_delay()` pour estimer une distribution log-normale à partir d'un vecteur de délais. Le code ci-dessous illustre comment utiliser la fonction `estimate_delay()` avec des données synthétiques sur les délais. ```{r, eval=FALSE} -delay_data <- rlnorm(500, log(5), 1) # synthetic delay data +library(tidyverse) -reporting_delay <- EpiNow2::estimate_delay( - delay_data, - samples = 1000, - bootstraps = 10 -) +# Steps: +# - get Ebola data from package {outbreaks} +# - keep a subset of columns for this example only +# - calculate the time difference between two dates in linelist +# - extract the time difference as a vector class object +# - estimate the delay parameters using {EpiNow2} + +outbreaks::ebola_sim_clean$linelist %>% + tibble::as_tibble() %>% + dplyr::select(case_id, date_of_onset, date_of_hospitalisation) %>% + dplyr::mutate(reporting_delay = date_of_hospitalisation - date_of_onset) %>% + dplyr::pull(reporting_delay) %>% + EpiNow2::estimate_delay( + samples = 1000, + bootstraps = 10 + ) ``` :::::::::::::::::: From 6c13a3c8656eb89e8bc8654debaaa2bf3a8079d3 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 29 Sep 2025 19:40:06 +0100 Subject: [PATCH 15/29] fix lintr --- episodes/quantify-transmissibility.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index 769f908b..51605049 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -118,7 +118,7 @@ Utilisons `{tidyr}` et `{incidence2}` pour cela : ```{r, warning=FALSE, message=FALSE} cases_sliced <- incidence2::covidregionaldataUK %>% - dplyr::as_tibble() %>% + dplyr::as_tibble() %>% # Preprocess missing values tidyr::replace_na(base::list(cases_new = 0)) %>% # Compute the daily incidence From a35e4b7d6bd82d751404eadcf38f151a9a8ac402 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 29 Sep 2025 20:18:48 +0100 Subject: [PATCH 16/29] make visible key chunks --- episodes/quantify-transmissibility.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/episodes/quantify-transmissibility.Rmd b/episodes/quantify-transmissibility.Rmd index 51605049..3bc407db 100644 --- a/episodes/quantify-transmissibility.Rmd +++ b/episodes/quantify-transmissibility.Rmd @@ -158,7 +158,7 @@ Cependant, `incidence2::incidence()` contient des arguments pratiques comme `com Dans une situation d'épidémie, il est probable que nous n'ayons accès qu'au début de l'ensemble des données d'entrée. Nous supposons donc que nous ne disposons que des 90 premiers jours de ces données. -```{r, echo=FALSE} +```{r} plot(cases_sliced) ``` @@ -313,7 +313,7 @@ epiparameter::epiparameter( Si l'on dispose de données sur le délai entre l'apparition des symptômes et la déclaration, on peut utiliser la fonction `estimate_delay()` pour estimer une distribution log-normale à partir d'un vecteur de délais. Le code ci-dessous illustre comment utiliser la fonction `estimate_delay()` avec des données synthétiques sur les délais. -```{r, eval=FALSE} +```{r} library(tidyverse) # Steps: From 193c7d2742f63575157e42fcc724e2be27c961ca Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 1 Oct 2025 21:52:20 +0100 Subject: [PATCH 17/29] add verification step --- learners/setup.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/learners/setup.md b/learners/setup.md index 5b218455..1278d8c3 100644 --- a/learners/setup.md +++ b/learners/setup.md @@ -328,6 +328,8 @@ Vous devez mettre à jour **toutes les librairies** nécessaires à ce tutoriel, même si vous les avez installés récemment. Les nouvelles versions contiennent des améliorations et d'importantes corrections de bugs. +### 4. Vérifiez l'installation + Lorsque l'installation est terminée, vous pouvez essayer de charger les packages en copiant et collant le code suivant dans la console : @@ -367,7 +369,7 @@ library(tidyverse) Si vous ne voyez PAS d'erreur comme `there is no package called '...'` vous êtes prêt à commencer ! Si c'est le cas, [contactez-nous](#your-questions)! -### 4. Regardez et lisez le matériel de préformation +### 5. Regardez et lisez le matériel de préformation :::::::::::::::::::::::::: prereq From 7ce6de198f872c20c8587c42eede6a50e07db23d Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Wed, 8 Oct 2025 13:17:55 +0100 Subject: [PATCH 18/29] add update in english --- episodes/delays-access.Rmd | 18 +++---- episodes/delays-functions.Rmd | 97 +++++++++++++++++++---------------- 2 files changed, 61 insertions(+), 54 deletions(-) diff --git a/episodes/delays-access.Rmd b/episodes/delays-access.Rmd index 9f3ade81..315418a9 100644 --- a/episodes/delays-access.Rmd +++ b/episodes/delays-access.Rmd @@ -1,5 +1,5 @@ --- -title: Accéder aux distributions des retards épidémiologiques +title: Accéder aux distribution des délais épidémiologiques teaching: 20 exercises: 10 editor_options: @@ -15,7 +15,7 @@ editor_options: ::::::::::::::::::::::::::::::::::::: objectives - Obtenez les délais à partir d'une base de données de recherche documentaire avec `{epiparameter}`. -- Obtenez les paramètres de distribution et les statistiques sommaires des distributions de retards. +- Obtenez les paramètres de distribution et les statistiques sommaires des distributions de délais. :::::::::::::::::::::::::::::::::::::::::::::::: @@ -78,7 +78,7 @@ Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les confl ## Le problème -Si nous voulons estimer la transmissibilité d'une infection, il est courant d'utiliser un package tel que `{EpiEstim}` ou `{EpiNow2}`. Le paquet `{EpiEstim}` permet d'estimer en temps réel le nombre de reproductions à l'aide des données relatives aux cas dans le temps, reflétant ainsi l'évolution de la transmission en fonction de la date d'apparition des symptômes. Pour estimer la transmission en fonction du moment où les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), le logiciel `{EpiNow2}` étend cette idée en la combinant avec un modèle qui tient compte des retards dans les données observées. Les deux logiciels requièrent certaines informations épidémiologiques en entrée. Par exemple, dans `{EpiNow2}` nous utilisons `EpiNow2::Gamma()` pour spécifier un [temps de génération](../learners/reference.md#generationtime) sous la forme d'une distribution de probabilité ajoutant son `mean` l'écart-type (`sd`) et sa valeur maximale (`max`). +Si nous voulons estimer la transmissibilité d'une infection, il est courant d'utiliser un package tel que `{EpiEstim}` ou `{EpiNow2}`. Le paquet `{EpiEstim}` permet d'estimer en temps réel le nombre de reproductions à l'aide des données relatives aux cas dans le temps, reflétant ainsi l'évolution de la transmission en fonction de la date d'apparition des symptômes. Pour estimer la transmission en fonction du moment où les personnes ont été effectivement infectées (plutôt que de l'apparition des symptômes), le logiciel `{EpiNow2}` étend cette idée en la combinant avec un modèle qui tient compte des délais dans les données observées. Les deux logiciels requièrent certaines informations épidémiologiques en entrée. Par exemple, dans `{EpiNow2}` nous utilisons `EpiNow2::Gamma()` pour spécifier un [temps de génération](../learners/reference.md#generationtime) sous la forme d'une distribution de probabilité ajoutant son `mean` l'écart-type (`sd`) et sa valeur maximale (`max`). Pour spécifier une valeur `generation_time` qui suit un *Gamma* avec une moyenne $\mu = 4$ écart-type $\sigma = 2$ et une valeur maximale de 20, nous écrivons : @@ -134,7 +134,7 @@ Si nous mesurons les *intervalle sériel* dans des données réelles, nous const ![Intervalles sériels des paires de cas possibles dans (a) COVID-19 et (b) MERS-CoV. Les paires représentent un infecteur présumé et son contaminé présumé en fonction de la date d'apparition des symptômes ([Althobaity et al., 2022](https://www.sciencedirect.com/science/article/pii/S2468042722000537#fig6)).](fig/serial-interval-pairs.jpg) -Pour résumer ces données relatives aux périodes individuelles et aux paires, il est donc utile de quantifier les **distribution statistique** des retards qui correspondent le mieux aux données, plutôt que de se concentrer sur la moyenne ([McFarland et al., 2023](https://www.eurosurveillance.org/content/10.2807/1560-7917.ES.2023.28.27.2200806)). +Pour résumer ces données relatives aux périodes individuelles et aux paires, il est donc utile de quantifier les **distribution statistique** des délais qui correspondent le mieux aux données, plutôt que de se concentrer sur la moyenne ([McFarland et al., 2023](https://www.eurosurveillance.org/content/10.2807/1560-7917.ES.2023.28.27.2200806)). @@ -286,7 +286,7 @@ distribution[[4]]$metadata$inference_method ::::::::::::::::::::::::::::::::: challenge -### Trouvez vos distributions de retard ! +### Trouvez vos distributions de délais ! Prenez 2 minutes pour explorer les `{epiparameter}` bibliothèque. @@ -309,7 +309,7 @@ Posez la question : L'analyse `epiparameter_db()` fonction avec `disease` compte à elle seule le nombre d'entrées comme : - études, et -- les répartitions des retards. +- les répartitions des délais. Les `epiparameter_db()` avec `disease` et `epi_name` obtient une liste de toutes les entrées avec : @@ -326,7 +326,7 @@ La combinaison de `epiparameter_db()` plus `parameter_tbl()` permet d'obtenir un ::::::::::::::::: solution -Nous avons choisi d'explorer les distributions des retards d'Ebola : +Nous avons choisi d'explorer les distributions des délais d'Ebola : ```{r} # we expect 16 delay distributions for Ebola @@ -633,9 +633,9 @@ la mettre à jour à partir du dernier test d'épiparamètre ::::::::::::::::::::::::::::::::::::: keypoints -- Utilisez `{epiparameter}` pour accéder au catalogue des distributions de retards épidémiologiques. +- Utilisez `{epiparameter}` pour accéder au catalogue des distributions de délais épidémiologiques. - Utilisez cette fonction pour accéder au catalogue de la littérature sur les distributions de délais épidémiologiques. `epiparameter_db()` pour sélectionner une seule distribution de délais. -- Utilisez cette option pour sélectionner les distributions à retard unique. `parameter_tbl()` pour obtenir une vue d'ensemble des distributions de délais multiples. +- Utilisez cette option pour sélectionner les distributions à délais unique. `parameter_tbl()` pour obtenir une vue d'ensemble des distributions de délais multiples. - Réutiliser les estimations connues pour une maladie inconnue au début d'une épidémie lorsqu'il n'y a pas de données sur la recherche des contacts. :::::::::::::::::::::::::::::::::::::::::::::::: diff --git a/episodes/delays-functions.Rmd b/episodes/delays-functions.Rmd index 1e2d8c0b..12527c30 100644 --- a/episodes/delays-functions.Rmd +++ b/episodes/delays-functions.Rmd @@ -24,7 +24,8 @@ editor_options: ## Conditions préalables -- Compléter le tutoriel [Quantifier la transmission](https://epiverse-trace.github.io/tutorials-middle/quantify-transmissibility.html) +- Compléter le tutoriel [Accéder aux distribution des délais épidémiologiques](../episodes/delays-functions.md) +- Compléter le tutoriel [Quantifier la transmission](../episodes/quantify-transmissibility.md) Pour cet épisode, vous devez vous familiariser avec : @@ -38,7 +39,15 @@ Pour cet épisode, vous devez vous familiariser avec : ## Introduction -`{epiparameter}` nous aide à *choisir* un ensemble spécifique de paramètres épidémiologiques issus de la littérature, au lieu de les copier/coller *à la main*: +Cet épisode intégrera le contenu des deux épisodes précédents. Commençons par charger le package`{epiparameter}` et `{EpiNow2}` . Nous utiliserons le tube `%>%`, quelques verbes de `{dplyr}` et `{ggplot2}` et donc appelons aussi à le package `{tidyverse}` : + +```{r, warning=FALSE, message=FALSE} +library(epiparameter) +library(EpiNow2) +library(tidyverse) +``` + +Pour résumer, nous avons appris que `{epiparameter}` nous aide à *choisir* un ensemble spécifique de paramètres épidémiologiques issus de la littérature, au lieu de les copier/coller *à la main*: ```{r, message=FALSE} covid_serialint <- @@ -50,7 +59,7 @@ covid_serialint <- ) ``` -Nous avons maintenant un paramètre épidémiologique que nous pouvons utiliser dans notre analyse ! Dans le bloc de code ci-dessous, nous avons remplacé un des paramètres **statistiques sommaires** en `EpiNow2::LogNormal()` +Nous avons maintenant un paramètre épidémiologique que nous pouvons utiliser dans notre analyse ! Par exemple, pour quantifier la transmission, nous pouvons utiliser l'intervalle sériel comme approximation du temps de génération. Dans le bloc de code ci-dessous, nous avons remplacé un des paramètres **statistiques sommaires** en `EpiNow2::LogNormal()` ```r generation_time <- @@ -61,17 +70,7 @@ generation_time <- ) ``` -Dans cet épisode, nous utiliserons les **fonctions de distribution** qui `{epiparameter}` fournit pour obtenir une valeur maximale (`max`) pour ce package et tout autre package en aval dans votre pipeline d'analyse ! - -Chargeons le package`{epiparameter}` et `{EpiNow2}` . Pour `{EpiNow2}` nous mettrons 4 cœurs à utiliser pour les calculs parallèles. Nous utiliserons le tube `%>%`, quelques verbes de `{dplyr}` et `{ggplot2}` et donc appelons aussi à le package `{tidyverse}` : - -```{r, warning=FALSE, message=FALSE} -library(epiparameter) -library(EpiNow2) -library(tidyverse) - -withr::local_options(list(mc.cores = 4)) -``` +Dans cet épisode, nous utiliserons les **fonctions de distribution** qui `{epiparameter}` fournit pour obtenir une médiane, valeur maximale (`max`), percentiles ou quantiles pour tout objet de classe ``. Ils vous seront utiles en aval dans votre pipeline d'analyse ! ::::::::::::::::::: checklist @@ -98,17 +97,19 @@ En R, toutes les distributions statistiques disposent de fonctions qui permettan ### Fonctions pour la loi normale -Si vous en avez besoin, lisez en détail la rubrique [Fonctions de probabilité R pour la loinormale](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) Pour en savoir plus sur les fonctions de probabilité de la loi normale, lisez les définitions de chacune d'entre elles et identifiez la partie de la loi dans laquelle elles se situent ! +Si vous en avez besoin, lisez en détail la rubrique [Fonctions de probabilité R pour la loinormale](https://web.archive.org/web/20240210121034/https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) Pour en savoir plus sur les fonctions de probabilité de la loi normale, lisez les définitions de chacune d'entre elles et identifiez la partie de la loi dans laquelle elles se situent ! -![Les quatre fonctions de probabilité de la loi normale ([Jack Weiss, 2012](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc))](fig/fig5a-normaldistribution.png) +![Les quatre fonctions de probabilité de la loi normale ([Jack Weiss, 2012](https://web.archive.org/web/20240210121034/https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc))](fig/fig5a-normaldistribution.png) :::::::::::::::::::: Si vous regardez `?stats::Distributions`, chaque type de distribution possède un ensemble unique de fonctions. Cependant, `{epiparameter}` vous donne les mêmes quatre fonctions pour accéder à chacune des valeurs ci-dessus pour n'importe quelle objet `` de votre choix ! -```{r, eval=FALSE} +```{r} # plot this to have a visual reference -plot(covid_serialint, day_range = 0:20) + +# continuous distribution +plot(covid_serialint, xlim = c(0, 20)) ``` ```{r} @@ -116,14 +117,14 @@ plot(covid_serialint, day_range = 0:20) density(covid_serialint, at = 10) # the cumulative probability at quantile value of 10 (days) -cdf(covid_serialint, q = 10) +epiparameter::cdf(covid_serialint, q = 10) # the quantile value (day) at a cumulative probability of 60% quantile(covid_serialint, p = 0.6) # generate 10 random values (days) given # the distribution family and its parameters -generate(covid_serialint, times = 10) +epiparameter::generate(covid_serialint, times = 10) ``` ::::::::: instructor @@ -149,7 +150,7 @@ Avec l'intervalle sériel COVID-19 (`covid_serialint`), calculez : ::::::::::::::::: hint -Dans la figure 5 du [Fonctions de probabilité R pour la loi normale](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) la partie ombrée représente une probabilité cumulée de `0.997` pour la valeur du quantile à `x = 2`. +Dans la figure 5 du [Fonctions de probabilité R pour la loi normale](https://web.archive.org/web/20240210121034/https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) la partie ombrée représente une probabilité cumulée de `0.997` pour la valeur du quantile à `x = 2`. :::::::::::::::::::::: @@ -160,8 +161,8 @@ plot(covid_serialint) ``` ```{r, eval=TRUE} -cdf(covid_serialint, q = 2) -cdf(covid_serialint, q = 6) +epiparameter::cdf(covid_serialint, q = 2) +epiparameter::cdf(covid_serialint, q = 6) ``` Étant donné l'intervalle sériel COVID-19 : @@ -217,11 +218,8 @@ Distribution: discrete lnorm Alors que pour une distribution **continue** nous traçons la courbe de la *Fonction de densité de probabilité (FDP)* pour une distribution discrète, nous traçons la *Fonction de masse de probabilité (FMP)*: -```{r, eval=FALSE} -# continuous -plot(covid_serialint) - -# discrete +```{r} +# discrete distribution plot(covid_serialint_discrete) ``` @@ -250,19 +248,19 @@ Les fonctions de probabilité pour les distributions `` **discrèt ```{r, eval=FALSE} # plot to have a visual reference -plot(covid_serialint_discrete, day_range = 0:20) +plot(covid_serialint_discrete, xlim = c(0, 20)) # density value at quantile value 10 (day) density(covid_serialint_discrete, at = 10) # cumulative probability at quantile value 10 (day) -cdf(covid_serialint_discrete, q = 10) +epiparameter::cdf(covid_serialint_discrete, q = 10) # In what quantile value (days) do we have the 60% cumulative probability? quantile(covid_serialint_discrete, p = 0.6) # generate random values -generate(covid_serialint_discrete, times = 10) +epiparameter::generate(covid_serialint_discrete, times = 10) ``` :::::::::::::::::::::: @@ -359,11 +357,14 @@ serial_interval_covid Dans l'hypothèse d'un scénario COVID-19, utilisons les 60 premiers jours de l’ensemble de données . `example_confirmed` du package `{EpiNow2}` comme `reported_cases` et l'objet récemment créé `serial_interval_covid` en tant que données d'entrée pour estimer le nombre de reproduction variable dans le temps à l'aide du fonction `EpiNow2::epinow()`. ```{r, message=FALSE} -epinow_estimates_cg <- epinow( +# Set 4 cores to be used in parallel computations +withr::local_options(list(mc.cores = 4)) + +epinow_estimates_cg <- EpiNow2::epinow( # cases data = example_confirmed[1:60], # delays - generation_time = generation_time_opts(serial_interval_covid) + generation_time = EpiNow2::generation_time_opts(serial_interval_covid) ) base::plot(epinow_estimates_cg) @@ -379,6 +380,12 @@ L'utilisation de l'intervalle sériel au lieu du temps de génération est une a :::::::::::::::::: +::::::::::::::::::: instructor + +We can stop the livecoding at this stage and move on with the practical. + +::::::::::::::::::: + ## Ajustement pour tenir compte des délais de déclaration L’estimation de $R_t$ nécessite des données sur le nombre quotidien de nouvelles infections. En raison des délais dans le développement de charges virales détectables, l'apparition des symptômes, la recherche de soins et la déclaration, ces chiffres ne sont pas facilement disponibles. Toutes les observations reflètent des événements de transmission survenus dans le passé. En d'autres termes, si $d$ est le délai entre l'infection et l'observation, alors les observations au temps $t$ informent $R_{t−d}$ et non $R_t$. [(Gostic et al., 2020)](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008409#sec007) @@ -402,12 +409,12 @@ Utilisez le dernier calcul d’ `epinow()` à l'aide de l’argument `delays` et L'argument `delays` et la fonction d’aide`delay_opts()` sont analogues à l’argument `generation_time` et à la fonction d’aide `generation_time_opts()`. ```r -epinow_estimates <- epinow( +epinow_estimates <- EpiNow2::epinow( # cases reported_cases = example_confirmed[1:60], # delays - generation_time = generation_time_opts(covid_serial_interval), - delays = delay_opts(covid_incubation_time) + generation_time = EpiNow2::generation_time_opts(covid_serial_interval), + delays = EpiNow2::delay_opts(covid_incubation_time) ) ``` @@ -471,12 +478,12 @@ covid_incubation_time <- # epinow ------------------------------------------------------------------ # run epinow -epinow_estimates_cgi <- epinow( +epinow_estimates_cgi <- EpiNow2::epinow( # cases data = example_confirmed[1:60], # delays - generation_time = generation_time_opts(covid_serial_interval), - delays = delay_opts(covid_incubation_time) + generation_time = EpiNow2::generation_time_opts(covid_serial_interval), + delays = EpiNow2::delay_opts(covid_incubation_time) ) base::plot(epinow_estimates_cgi) @@ -622,12 +629,12 @@ incubation_period_ebola <- # epinow ------------------------------------------------------------------ # run epinow -epinow_estimates_egi <- epinow( +epinow_estimates_egi <- EpiNow2::epinow( # cases data = ebola_confirmed, # delays - generation_time = generation_time_opts(serial_interval_ebola), - delays = delay_opts(incubation_period_ebola) + generation_time = EpiNow2::generation_time_opts(serial_interval_ebola), + delays = EpiNow2::delay_opts(incubation_period_ebola) ) plot(epinow_estimates_egi) @@ -730,12 +737,12 @@ influenza_cleaned <- select(date, confirm = in_bed) # Run epinow() -epinow_estimates_igi <- epinow( +epinow_estimates_igi <- EpiNow2::epinow( # cases data = influenza_cleaned, # delays - generation_time = generation_time_opts(generation_time_influenza), - delays = delay_opts(incubation_time_influenza) + generation_time = EpiNow2::generation_time_opts(generation_time_influenza), + delays = EpiNow2::delay_opts(incubation_time_influenza) ) plot(epinow_estimates_igi) From f80788546a53f245e2b97edeb7e0456050f85677 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Thu, 9 Oct 2025 19:15:52 +0100 Subject: [PATCH 19/29] remove author argument --- episodes/delays-functions.Rmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/episodes/delays-functions.Rmd b/episodes/delays-functions.Rmd index 12527c30..e1a5acd1 100644 --- a/episodes/delays-functions.Rmd +++ b/episodes/delays-functions.Rmd @@ -54,7 +54,6 @@ covid_serialint <- epiparameter::epiparameter_db( disease = "covid", epi_name = "serial", - author = "Nishiura", single_epiparameter = TRUE ) ``` @@ -431,7 +430,6 @@ covid_serialint <- epiparameter::epiparameter_db( disease = "covid", epi_name = "serial", - author = "Nishiura", single_epiparameter = TRUE ) @@ -456,7 +454,6 @@ covid_serial_interval <- covid_incubation <- epiparameter::epiparameter_db( disease = "covid", epi_name = "incubation", - author = "Natalie", single_epiparameter = TRUE ) From 40ca97be5d973aae758b4621d05dd24809f5fa97 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 13 Oct 2025 18:18:54 +0100 Subject: [PATCH 20/29] add initial translated version --- config.yaml | 2 +- episodes/severity-static.Rmd | 682 ++++++++++++++++++----------------- 2 files changed, 343 insertions(+), 341 deletions(-) diff --git a/config.yaml b/config.yaml index a3b32e85..be8a2ec5 100644 --- a/config.yaml +++ b/config.yaml @@ -63,7 +63,7 @@ episodes: - quantify-transmissibility.Rmd - delays-functions.Rmd #- create-forecast.Rmd -#- severity-static.Rmd +- severity-static.Rmd #- superspreading-estimate.Rmd #- superspreading-simulate.Rmd diff --git a/episodes/severity-static.Rmd b/episodes/severity-static.Rmd index 6cb0c2b1..2f8833fb 100644 --- a/episodes/severity-static.Rmd +++ b/episodes/severity-static.Rmd @@ -1,78 +1,91 @@ --- -title: 'Estimation of outbreak severity' +title: "Estimation de la gravité d'une épidémie" teaching: 10 exercises: 2 -editor_options: +editor_options: chunk_output_type: inline --- -:::::::::::::::::::::::::::::::::::::: questions +:::::::::::::::::::::::::::::::::::::: questions -- Why do we estimate the clinical severity of an epidemic? +- Pourquoi estime-t-on la gravité clinique d'une épidémie ? -- How can the Case Fatality Risk (CFR) be estimated early in an ongoing epidemic? +- Comment peut-on estimer le risque de létalité (RL) au début d'une épidémie en cours ? :::::::::::::::::::::::::::::::::::::::::::::::: -::::::::::::::::::::::::::::::::::::: objectives +::::::::::::::::::::::::::::::::::::: objectifs -- Estimate the CFR from aggregated case data using `{cfr}`. +- Estimer le risque de létalité (RL) à partir de données épidémiologiques agrégées en utilisant la librairie `{cfr}`. -- Estimate a delay-adjusted CFR using `{epiparameter}` and `{cfr}`. +- Estimer le RL ajusté au délai épidémiologique à l'aide des librairies `{epiparameter}` et `{cfr}`. -- Estimate a delay-adjusted severity for an expanding time series using `{cfr}`. +- Estimer la sévérité ajustée au délai épidémiologique pour une série +chronologique en expansion en utilisant le package `{cfr}`. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +Les concepts abordés dans cet épisode supposent que vous êtes familiers avec : -This episode requires you to be familiar with: +**Science des données**: Programmation de base avec R. -**Data science**: Basic programming with R. +**Théorie des épidémies**: [Distributions des délais](../learners/reference.md#delaydist). -**Epidemic theory**: [Delay distributions](../learners/reference.md#delaydist). +**R packages installés**: `{cfr}`, `{epiparameter}`, `{outbreaks}`, `{tidyverse}`. ::::::::::::::::::::::::::::::::: +:::::::::::::: spoiler + +Installer les packages si elles ne le sont pas déjà: + +```{r} +# si {pak} n'est pas disponible, exécutez : install.packages("pak") +pak::pak("cfr") +pak::pak("epiparameter") +pak::pak("tidyverse") +pak::pak("outbreaks") +``` + +Si vous recevez un message d'erreur, rendez-vous sur la [page principale de configuration](../learners/setup#configuration-des-logiciels). + +:::::::::::::: + ## Introduction -Common questions at the early stage of an epidemic include: +Les questions les plus fréquentes au début d'une épidémie sont: -- What is the likely public health impact of the outbreak in terms of clinical severity? -- What are the most severely affected groups? -- Does the outbreak have the potential to cause a very severe pandemic? +- Quel est l'impact probable de l'épidémie sur la santé publique en termes de gravité clinique ? +- Quels sont les groupes les plus gravement touchés ? +- L'épidémie risque-t-elle de provoquer une pandémie très grave ? -We can assess the pandemic potential of an epidemic with two critical measurements: the transmissibility and the clinical severity -([Fraser et al., 2009](https://www.science.org/doi/full/10.1126/science.1176062), +Nous pouvons évaluer le potentiel pandémique d'une épidémie à l'aide de deux mesures essentielles : la transmissibilité et la gravité clinique. +([Fraser et al. 2009](https://www.science.org/doi/full/10.1126/science.1176062), [CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html)). -![HHS Pandemic Planning Scenarios based on the Pandemic Severity Assessment Framework. This uses a combined measure of clinical severity and transmissibility to characterise influenza pandemic scenarios. **HHS**: United States Department of Health and Human Services ([CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html)).](fig/cfr-hhs-scenarios-psaf.png){alt='The horizontal axis is the scaled measure of clinical severity, ranging from 1 to 7, where 1 is low, 4 is moderate, and 7 is very severe. The vertical axis is the scaled measure of transmissibility, ranging from 1 to 5, where 1 is low, 3 is moderate, and 5 is highly transmissible. On the graph, HHS pandemic planning scenarios are labeled across four quadrants (A, B, C and D). From left to right, the scenarios are “seasonal range,” “moderate pandemic,” “severe pandemic” and “very severe pandemic.” As clinical severity increases along the horizontal axis, or as transmissibility increases along the vertical axis, the severity of the pandemic planning scenario also increases.'} +![Scénarios de planification pandémique du HHS basés sur le cadre d'évaluation de la gravité de la pandémie. Ce cadre utilise une mesure combinant la gravité clinique et la transmissibilité pour caractériser les scénarios de pandémie de grippe. **HHS**: United States Department of Health and Human Services ([CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html))](../../../episodes/fig/cfr-hhs-scenarios-psaf.png){alt='L'axe horizontal représente la mesure de la gravité clinique, échelonnée de 1 à 7, où 1 correspond à faible, 4 à modérée et 7 à très grave. L'axe vertical représente la mesure de la transmissibilité, échelonnée de 1 à 5, où 1 correspond à faible, 3 à modérée et 5 à forte transmissibilité. Sur le graphique, les scénarios de planification d'une pandémie sont présentés en quatre quadrants (A, B, C et D). De gauche à droite, les scénarios sont: “variation saisonnière”, “pandémie modérée”, “pandémie grave” et “pandémie très grave”. À mesure que la gravité clinique augmente sur l'axe horizontal, ou que la transmissibilité augmente sur l'axe vertical, la gravité du scénario de planification de la pandémie augmente également.'} -One epidemiological approach to estimating the clinical severity is quantifying the Case Fatality Risk (CFR). CFR is the conditional probability of death given confirmed diagnosis, calculated as the ratio of the cumulative number of deaths from an infectious disease to the number of confirmed diagnosed cases. However, calculating this directly during the course of an epidemic tends to result in a naive or biased CFR given the time [delay](../learners/reference.md#delaydist) from onset to death, varying substantially as the epidemic progresses and stabilising at the later stages of the outbreak ([Ghani et al., 2005](https://academic.oup.com/aje/article/162/5/479/82647?login=false#620743)). +Une approche épidémiologique pour estimer la gravité clinique consiste à quantifier le risque de létalité (RL). Le risque de létalité est la probabilité conditionnelle de décès en cas de diagnostic confirmé, calculée comme le rapport entre le nombre cumulé de décès dus à une maladie infectieuse et le nombre de +cas diagnostiqués confirmés. Toutefois, le calcule de ce paramètre de cette façon au cours d'une épidémie tend à aboutir à un RL naïf ou biaisé, compte tenu du [délai](../../../learners/reference.md#delaydist) entre l'apparition de la maladie et le décès, qui varie considérablement au fur et à mesure que l'épidémie progresse et se stabilise aux derniers stades de l'épidémie ([Ghani et al. 2005](https://academic.oup.com/aje/article/162/5/479/82647?login=false#620743)). -![Observed biased confirmed case fatality risk (CFR) estimates as a function of time (thick line) calculated as the cumulative number -of deaths over confirmed cases at time t. The estimate at the end of an outbreak (~May 30) is the realised CFR by the end of the epidemic. - The horizontal continuous line and dotted lines show the expected value and the 95% confidence intervals ($95\%$ CI) of the predicted delay-adjusted - CFR estimate only by using the observed data until 27 Mar 2003 - ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_c.png){alt='The periods are relevant: Period 1 -- 15 days where CFR is zero to indicate this is due to no reported deaths; Period from Mar 15 -- Apr 26 where CFR appears to be rising; Period Apr 30 -- May 30 where the CFR estimate stabilises.'} +![Estimations du risque de létalité (RL) observé biaisé confirmé en fonction du temps (ligne épaisse), calculé comme le rapport entre le nombre cumulé de décès et de cas confirmés à un instant $t$. La valeur atteinte à la fin d'une épidémie (~30 mai) est le risque de létalité observé à la fin de l'épidémie. La ligne horizontale continue et les lignes pointillées indiquent la valeur du RL prédit et leurs intervalles de confiance à 95% (IC $95%$) des valeurs prédites du taux de mortalité ajusté au délai en utilisant uniquement les données observées jusqu'au 27 mars 2003. ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_c.png){fig-alt="Les périodes sont pertinentes : Période 1 -- 15 jours où le RL est nul, ce qui indique qu'aucun décès n'a été signalé ; Période du 15 mars au 26 avril où le RL semble augmenter ; Période du 30 avril au 30 mai où l'estimation du RL se stabilise."} -::::::::::::::::::::::: instructor +::::::::::::::::::::::: instructeur -The periods are relevant: Period 1 -- 15 days where CFR is zero to indicate this is due to no reported deaths; Period from Mar 15 -- Apr 26 where CFR appears to be rising; Period Apr 30 -- May 30 where the CFR estimate stabilises. +Les périodes sont pertinentes : Période 1 -- 15 jours où le RL est nul, ce qui indique qu'aucun décès n'a été signalé ; Période du 15 mars au 26 avril où le RL semble augmenter ; Période du 30 avril au 30 mai où l'estimation du RL se stabilise. ::::::::::::::::::::::: -More generally, estimating severity can be helpful even outside of a pandemic planning scenario and in the context of routine public health. -Knowing whether an outbreak has or had a different severity from the historical record can motivate causal investigations, -which could be intrinsic to the infectious agent (e.g., a new, more severe strain) or due to underlying factors in the population (e.g. reduced immunity or morbidity factors) ([Lipsitch et al., 2015](https://journals.plos.org/plosntds/article?id=10.1371/journal.pntd.0003846)). +Généralement, l'estimation de la gravité clinique d'une maladie peut être utile même en dehors d'un scénario de planification d'une pandémie et dans le contexte de la santé publique courante. Le fait de savoir si une épidémie a ou a eu une gravité différente de celle observée dans le passé peut motiver des recherches pour identifier les causes. Celles-ci peuvent être intrinsèques à l'agent infectieux (par exemple, une nouvelle souche plus grave) ou liées à des facteurs sous-jacents dans la population (par exemple, une immunité réduite ou des facteurs de morbidité) ([Lipsitch et al., 2015](https://journals.plos.org/plosntds/article?id=10.1371/journal.pntd.0003846)). -In this tutorial we are going to learn how to use the `{cfr}` package to calculate and adjust a CFR estimation using [delay distributions](../learners/reference.md#delaydist) from `{epiparameter}` or elsewhere, based on the methods developed by [Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852), also, how we can reuse `{cfr}` functions for more severity measurements. +Dans ce tutoriel, nous allons apprendre à utiliser la librairie `{cfr}` pour calculer et ajuster le risque de gravité clinique en utilisant [la distribution des délais](../learners/reference.md#delaydist) obtenue de la librairie `{epiparameter}` ou de d'autres sources, sur la base des méthodes développées par [Nishiura et al. 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852). Nous allons aussi explorer la libraire `{cfr}` pour determiner comment l'utiliser pour calculer d'autres mesures de sévérité clinique. -We'll use the pipe `%>%` operator to connect functions, so let's also call to the `{tidyverse}` package: +Nous utiliserons l'opérateur pipe (`%>%`) de la librairie `{magrittr}` pour relier facilement certaines fonctions de la librairie `{cfr}`, y compris les fonctions de la librairie de formatage de données `{dplyr}`. Nous chargerons donc la librairie `{tidyverse}`, qui comprend à la fois les librairies `{magrittr}` et `{dplyr}`. -```{r,message=FALSE,warning=FALSE} +```{r message=FALSE, warning=FALSE} +# charger les packages library(cfr) library(epiparameter) library(tidyverse) @@ -81,63 +94,61 @@ library(outbreaks) ::::::::::::::::::: checklist -### The double-colon +### L'opérateur double deux-points (`::`) -The double-colon `::` in R lets you call a specific function from a package without loading the entire package into the current environment. +L'opérateur `::` de R permet d'accéder aux fonctions ou aux objets d'un package spécifique sans attacher l'intégralité du package (sans faire appel à la function `libray()`). Il offre plusieurs avantages, notamment : -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +* Indiquer explicitement le package d'origine d'une fonction, réduisant ainsi les ambiguïtés et les conflits potentiels lorsque plusieurs packages possèdent des fonctions portant le même nom. +* Permettre d'appeler une fonction depuis un package sans charger l'intégralité du package avec un appel à la fonction `library()`. -This helps us remember package functions and avoid namespace conflicts. +Par exemple, la commande `dplyr::filter(data, condition)` signifie que nous appelons la fonction `filter()` depuis la librairie `{dplyr}`. ::::::::::::::::::: :::::::::::::::::::: discussion -Based on your experience: - -- Share any previous outbreak in which you participated in its response. - -Answer to these questions: +Etiez-vous membre d'une équipe chargée de de concevoir des stratégies de réponse à une épidémie? Si oui: -- How did you assess the clinical severity of the outbreak? -- What were the primary sources of bias? -- What did you do to take into account the identified bias? -- What complementary analysis would you do to solve the bias? +- Comment évaluez-vous la gravité clinique de l'épidémie ? +- Quelles étaient les principales sources de biais ? +- Qu'aviez-vous fait pour prendre en compte les biais identifiés ? +- Quelle analyse complémentaire feriez-vous pour résoudre le biais ? -:::::::::::::::::::: +:::::::::::::::::::: -## Data sources for clinical severity +## Sources de données pour la gravité clinique -What data sources can we use to estimate the clinical severity of a disease outbreak? [Verity et al., 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099(20)30243-7/fulltext) summarises the spectrum of COVID-19 cases: +Quelles sont les sources de données qu'on peut utiliser pour estimer la gravité clinique d'une épidémie? +[Verity et al, 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(20\)30243-7/fulltext) résume le spectre des cas de COVID-19 : -![Spectrum of COVID-19 cases. The CFR aims to estimate the proportion of deaths among confirmed cases in an epidemic. -([Verity et al., 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099(20)30243-7/fulltext#gr1))](fig/cfr-spectrum-cases-covid19.jpg) +![Spectre des cas de COVID-19. Le CFR vise à estimer la proportion de décès parmi les cas confirmés d'une épidémie. +([Verity et al., 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(20\)30243-7/fulltext#gr1))](../../../episodes/fig/cfr-spectrum-cases-covid19.jpg) -- At the top of the pyramid, those who met the WHO case criteria for **severe** or critical cases would likely have been identified in the hospital setting, presenting with atypical viral pneumonia. These cases would have been identified in mainland China and among those categorised internationally as local transmission. -- Many more cases are likely to be **symptomatic** (i.e., with fever, cough, or myalgia) but might not require hospitalisation. These cases would have been identified through links to international travel to high-risk areas and through contact-tracing of contacts of confirmed cases. They might be identifiable through population surveillance of, for example, influenza-like illness. -- The bottom part of the pyramid represents **mild** (and possibly **asymptomatic**) cases. These cases might be identifiable through contact tracing and subsequently via serological testing. +- Au sommet de la pyramide, les cas définis comme **grave** ou **critiques** selon les critères établis par l'OMS. Ces cas auraient probablement été identifiés en milieu hospitalier, présentant une pneumonie virale atypique. Ils auraient été identifiés en Chine continentale et parmi ceux classés au niveau international comme émanants d'une transmission locale. +- Beaucoup d'autres sont probablement **symptomatiques** (c'est-à-dire avec de la fièvre, de la toux ou des myalgies), mais ne nécessiteront peut-être pas d'hospitalisation. Ces cas auraient été identifiés grâce à leurs liens avec des voyageurs internationaux dans des zones à haut risque et grâce à la recherche des personnes en contact avec les cas confirmés. Ils pourraient être identifiés grâce à la surveillance de la population, par exemple en cas de syndrome grippal. +- La partie inférieure de la pyramide représente les cas **bénins** (et éventuellement **asymptomatiques**). Ces cas pourraient être identifiés par la recherche de cas contacts et, puis par des tests sérologiques. -## Naive CFR +## Estimation du risque de létalité (RL) naïf -We measure disease severity in terms of case fatality risk (CFR). The CFR is interpreted as the conditional probability of death given confirmed diagnosis, calculated as the ratio of the cumulative number of deaths $D_{t}$ to the cumulative number of confirmed cases $C_{t}$ at a certain time $t$. We can refer to the _naive CFR_ (also crude or biased CFR, $b_{t}$): +Nous mesurons la gravité d'une maladie en termes de risque de létalité (RL). Le RL est interprété comme la probabilité conditionnelle de décès en cas de diagnostic confirmé, calculée comme le ratio du nombre cumulé de décès $D_{t}$ sur le nombre cumulé de cas confirmés $C_{t}$ à un moment donné $t$. Nous pouvons le référer au *RL naïf* (également RL brut ou biaisé, $b_{t}$) : $$ b_{t} = \frac{D_{t}}{C_{t}} $$ -This calculation is _naive_ because it tends to yield a biased and mostly underestimated CFR due to the time-delay from onset to death, only stabilising at the later stages of the outbreak. +Cette formule est considérée comme *naïve* parce qu'elle tend à produire un RL biaisé et largement sous-estimé en raison du délai entre l'apparition de la maladie et le décès, qui ne se stabilise que vers la fin de l'épidémie. -To calculate the naive CFR, the `{cfr}` package requires an input data frame with three columns named: +Pour calculer le RL naïf à l'aide de la librairie `{cfr}`, on a besoin d'un tableau de données comportant au minimum trois colonnes nommées : - `date` - `cases` - `deaths` -Let's explore the `ebola1976` dataset, included in {cfr}, which comes from the first Ebola outbreak in what was then called Zaire (now the Democratic Republic of the Congo) in 1976, as analysed by Camacho et al. (2014). +Explorons le tableau de données `ebola1976` inclus dans le package `{cfr}`, et qui contient les données provenant de la première épidémie d'Ebola au Zaïre (actuelle la République Démocratique du Congo) en 1976, comme l'ont analysé Camacho et al. (2014). ```{r} -# Load the Ebola 1976 data provided with the {cfr} package +# charger le tableau de donnees ebola1976 du package {cfr} data("ebola1976") -# Plot the incidence of cases and death reports +# Visualiser l'incidence du nombre de cas et de deces repertorie ebola1976 %>% incidence2::incidence( date_index = "date", @@ -146,10 +157,10 @@ ebola1976 %>% plot() ``` -We'll frame this episode under the context of an **ongoing outbreak** with only the **first 30 days** of data observed. +Nous supposerons que nous sommes dans le contexte d'une **épidémie d'Ebola en cours** où nous disposons que des données collectées durant les **30 premiers jours** de l'épidémie. ```{r} -# Assume we only have the first 30 days of this data +# supposons que nous disposons des donnees des 30 premiers jours de l'epidemie ebola_30days <- ebola1976 %>% dplyr::slice_head(n = 30) %>% dplyr::as_tibble() @@ -159,267 +170,268 @@ ebola_30days :::::::::::::::::: callout -### We need aggregated incidence data +### Nous avons besoin de données d'incidence agrégées -`{cfr}` reads **aggregated** incidence data. +Les données d'entrée des fonctions de la `{cfr}` sont des données d'incidence, qui sont ont été **agrégées** à partir des données de cas individuels. - + -```{r,eval=FALSE,echo=FALSE} +```{r, eval=FALSE, echo=FALSE} EpiNow2::example_confirmed %>% dplyr::as_tibble() ``` -This data input should be **aggregated** by day, which means one observation *per day*, containing the *daily* number of reported cases and deaths. Observations with zero or missing values should also be included, similar to time-series data. +Ces données doivent être **agrégées** par “unité de temps”, c'est-à-dire une observation par unité de temps, contenant le nombre de cas et de décès signalés en un temps donné. Les observations avec des valeurs nulles ou manquantes doivent également être incluses, comme pour les données de séries temporelles. + +Cependant, il faut noter que la version actuelle de `{cfr}` requière des données agrégées *journaliers*. Les autres unités temporelles d'agrégation de données telles que les semaines, mois, etc ne sont pour le moment pas pris en charge. -Also, `{cfr}` currently works for *daily* data only, but not for other temporal units of data aggregation, e.g., weeks. + - :::::::::::::::::: -When we apply `cfr_static()` to `data` directly, we are calculating the naive CFR: +La fonction `cfr::cfr_static()` permet de calculer le RL naïf. ```{r} -# Calculate the naive CFR for the first 30 days +# Calculer le RL naïf durant les 30 premiers jours cfr::cfr_static(data = ebola_30days) ``` :::::::::::::::::::::::::::::::::::::::: challenge -Download the file [sarscov2_cases_deaths.csv](data/sarscov2_cases_deaths.csv) and read it into R. +Téléchargez le fichier [sarscov2_cases_deaths.csv](../../../episodes/data/sarscov2_cases_deaths.csv) et importez-le dans R. Puis estimez le RL naïf. -Estimate the naive CFR. +:::::::::::::::::::: :::::::::::::::::::: hint -Inspect the format of the data input. +Vérifier le format des données d'entrée en répondant aux questions suivantes: -- Does it contain daily data? -- Does the column names are as required by `cfr_static()`? -- How would you rename column names from a data frame? +- Contient-il des données d'incidences quotidiennes ? +- Les noms des colonnes sont-ils conformes aux exigences de la fonction `cfr_static()` ? +- Comment renommer les noms de colonnes d'un tableau de données ? :::::::::::::::::::: :::::::::::::::::::: solution -We read the data input using `readr::read_csv()`. This function recognize that the column `date` is a `` class vector. +Importez les données téléchargées à l'aide de la fonction `readr::read_csv()`. Cette fonction reconnaît que la colonne `date` est de type ``. -```{r, eval=TRUE,echo=FALSE,warning=FALSE,message=FALSE} -# read data from the tutorial repository R project -sarscov2_input <- - readr::read_csv(file.path("data", "sarscov2_cases_deaths.csv")) +```{r, eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE} +# importer les données dans R +sarscov2_input <- readr::read_csv( + file = file.path("data", "sarscov2_cases_deaths.csv") +) ``` -```{r,eval=FALSE,echo=TRUE,warning=FALSE,message=FALSE} -# read data -# e.g.: if path to file is data/raw-data/ebola_cases.csv then: -sarscov2_input <- - readr::read_csv(here::here("data", "raw-data", "sarscov2_cases_deaths.csv")) +```{r, eval=FALSE, echo=TRUE, warning=FALSE, message=FALSE} +# importer les données dans R +# supposons que le chemin d'accès au fichier est data/raw-data/ebola_cases.csv +sarscov2_input <- readr::read_csv( + file = here::here("data", "raw-data", "sarscov2_cases_deaths.csv") +) ``` ```{r} -# Inspect data +# voir un aperçu des données sarscov2_input ``` -We can use `dplyr::rename()` to adapt the external data to fit the data input for `cfr_static()`. +Nous pouvons utiliser la fonction `cleanepi::standardize_column_names()` pour renommer les noms des colonnes de sorte qu'elles soient conforment aux exigences de la fonction `cfr::cfr_static()`. ```{r} -# Rename before Estimate naive CFR -sarscov2_input %>% - dplyr::rename( - cases = cases_jpn, - deaths = deaths_jpn - ) %>% - cfr::cfr_static() +# renommer les noms des colonnes +sarscov2_input <- sarscov2_input %>% + cleanepi::standardize_column_names( + rename = c(cases = "cases_jpn", deaths = "deaths_jpn") + ) + +# estimer le RL naïf +cfr::cfr_static(sarscov2_input) ``` :::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::: -## Biases that affect CFR estimation +## Biais affectant l'estimation du CFR ::::::::::::::::::::::::::::: discussion -### Two biases that affect CFR estimation +### Deux biais qui affectent l'estimation du RL -[Lipsitch et al., 2015](https://journals.plos.org/plosntds/article?id=10.1371/journal.pntd.0003846) describe two potential biases that can affect the estimation of CFR (and their potential solutions): +[Lipsitch et al, 2015](https://journals.plos.org/plosntds/article?id=10.1371/journal.pntd.0003846) ont décrit deux biais potentiels qui peuvent affecter l'estimation du RL (et comment y remédier) : ::::::::::::::::::::::::::::: ::::::::::::: solution -### 1. Preferential ascertainment of severe cases +### 1. Études préférentielle des cas graves -For diseases with a _spectrum_ of clinical presentations, those cases that come to the attention of public health authorities and are registered into surveillance databases will typically be people with the most severe symptoms who seek medical care, are admitted to a hospital, or die. +Pour les maladies ayant un *spectre* de présentations cliniques, les cas qui sont portés à l'attention des autorités de santé publique et enregistrés dans les bases de données de surveillance sont généralement des personnes présentant les symptômes les plus graves, qui consultent un médecin, admises à l'hôpital ou décèdent. -Therefore, the CFR will typically be higher among _detected cases_ than among the entire population of cases, given that the latter may include individuals with mild, subclinical, and (under some definitions of “case”) asymptomatic presentations. +Par conséquent, le RL sera généralement plus élevé chez les *cas confirmés* que dans l'ensemble de la population des cas, étant donné que cette dernière peut inclure des personnes présentant des symptômes légers, subcliniques et (selon certaines définitions de "cas") asymptomatiques. ::::::::::::: :::::::::::: solution -### 2. Bias due to delayed reporting of death +### 2. Biais dû à une déclaration tardive du décès -During an _ongoing_ epidemic, there is a delay between the time someone dies and the time their death is reported. Therefore, at any given moment in time, the list of cases includes people who will die and whose death has not yet occurred or has occurred but not yet been reported. Thus, dividing the cumulative number of reported deaths by the cumulative number of reported cases at a specific time point during an outbreak will underestimate the true CFR. +Lors d'une épidémie *en cours*, il y a un délai entre le moment où une personne décède et le moment où son décès est signalé. Par conséquent, à tout moment, la liste des cas contient des individus qui vont mourir et dont le décès n'est pas encore survenu ou qui est survenu mais n'a pas encore été signalé. Ainsi, la division du nombre cumulé de décès déclarés par le nombre cumulé de cas déclarés en un moment donné d'une épidémie sous-évaluera le véritable RL. -The key determinants of the magnitude of the bias are the epidemic _growth rate_ and the _distribution of delays_ from case-reporting to death-reporting; the longer the delays and the faster the growth rate, the greater the bias. +Les principaux facteurs déterminants de l'ampleur du biais sont, le *taux de croissance de l'épidémie* et la *distribution des délais* entre la déclaration des cas et la déclaration des décès ; plus les délais sont longs, plus le taux de croissance est rapide, et plus le biais est important. -In this tutorial episode, we are going to focus on solutions to deal with this specific bias using `{cfr}`! +Dans les sections suivantes de cet épisode du tutoriel, nous allons nous concentrer sur les solutions concernant spécifiquement ce biais en utilisant la librairie `{cfr}`. :::::::::::: :::::::::::::::::::: solution -### Case study: Influenza A (H1N1), Mexico, 2009 +### Étude de cas : Grippe A (H1N1), Mexique, 2009 -Improving an _early_ epidemiological assessment of a delay-adjusted CFR is crucial for determining virulence, shaping the level and choices of public health intervention, and providing advice to the general public. +Il est crucial d'améliorer l'estimation du RL ajusté au délais au début d'une épidémie pour déterminer sa virulence, mais aussi le niveau et les choix des interventions de santé publique et fournir des conseils au grand public. -In 2009, during the swine-flu virus, Influenza A (H1N1), Mexico had an early biased estimation of the CFR. Initial reports from the government of Mexico suggested a virulent infection, whereas, in other countries, the same virus was perceived as mild ([TIME, 2009](https://content.time.com/time/health/article/0,8599,1894534,00.html)). +En 2009, lors de l'épidémie de grippe porcine A (H1N1), le Mexique a effectué une estimation précoce biaisée du RL. Les premiers rapports du gouvernement mexicain faisaient état d'une infection virulente, alors que dans d'autres pays, le même virus était perçu comme bénin ([TIME, 2009](https://content.time.com/time/health/article/0,8599,1894534,00.html)). -In the USA and Canada, no deaths were attributed to the virus in the first ten days following the World Health Organization's declaration of a public health emergency. Even under similar circumstances at the early stage of the global pandemic, public health officials, policymakers and the general public want to know the virulence of an emerging infectious agent. +Aux États-Unis et au Canada, aucun décès n'a été attribué au virus durant les dix jours qui ont suivi la déclaration d'urgence de santé publique par l'OMS. Même dans des circonstances similaires, au début d'une pandémie mondiale, les responsables de la santé publique, les décideurs et le grand public veulent connaître la virulence d'un agent infectieux émergent. -[Garske et al., 2009](https://www.bmj.com/content/339/bmj.b2840) assess the challenges to estimate the severity of this pandemic, emphasising that accurately capturing the cases for the denominator can improve the capacity to obtain informative CFR estimates. +[Fraser et al, 2009](https://www.science.org/doi/full/10.1126/science.1176062) ont réinterprété les données en évaluant les biais et ont obtenu une gravité clinique inférieure à celle de la pandémie de grippe de 1918, mais comparable à celle observée lors de la pandémie de 1957. :::::::::::::::::::: :::::::::::::::::::: instructor -We can showcase this last bias using the [concept described in this `{cfr}` vignette](https://epiverse-trace.github.io/cfr/articles/cfr.html#concept-how-reporting-delays-bias-cfr-estimates). +Vous trouverez plus d'informations concernant l'effet des délais dans l'estimation du RL dans cette section de la [vignette de la librairie `{cfr}` ](https://epiverse-trace.github.io/cfr/articles/cfr.html#concept-how-reporting-delays-bias-cfr-estimates). - + :::::::::::::::::::: -## Delay-adjusted CFR +## RL ajusté au délai -[Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) developed a method that considers the **time delay** from the onset of symptoms to death. +[Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) ont développé une méthode de calcul du RL qui prend en compte les **délais** entre l'apparition des symptômes et le décès. -Real-time outbreaks may have a number of deaths that are insufficient to determine the time distribution between onset and death. Therefore, we can estimate the _distribution delay_ from historical outbreaks or reuse the ones accessible via R packages like `{epiparameter}` or `{epireview}`, which collect them from published scientific literature. For a step-by-step guide, read the tutorial episode on how to [access epidemiological delays](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html). +Durant certaines phases d'une épidémie en cours, il peut arriver que le nombre de décès soit insuffisant pour déterminer la distribution du temps entre l'apparition des symptômes et le décès. Par conséquent, nous pouvons obtenir une estimation de la *distribution de ce délai* à partir d'épidémies antérieures ou en réutilisant celles qui sont accessibles via des librairies R tels que `{epiparameter}` ou `{epireview}` qui les collectent à partir de la littérature scientifique publiée. Lisez l'épisode [accéder aux délais épidémiologiques](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html) de ce tutoriel pour de plus amples informations. -Let's use `{epiparameter}`: +Obtenons la distribution du délai entre la date d'apparition des symptômes et la +date de décès via la librairie `{epiparameter}`. ```{r, message=FALSE, warning=FALSE} -# Get delay distribution -onset_to_death_ebola <- - epiparameter::epiparameter_db( - disease = "Ebola", - epi_name = "onset_to_death", - single_epiparameter = TRUE - ) +# obtenir la distribution du délai +onset_to_death_ebola <- epiparameter::epiparameter_db( + disease = "Ebola", + epi_name = "onset_to_death", + single_epiparameter = TRUE +) -# Plot object +# visualiser la distribution du délai plot(onset_to_death_ebola, day_range = 0:40) ``` -To calculate the delay-adjusted CFR, we can use the `cfr_static()` function with the `data` and `delay_density` arguments. +Pour prendre en compte la distribution du délai lors du calcul le RL ajusté au délai, nous devons fournir à l'arguemt `delay_density` de la fonction `cfr::cfr_static()` la valeur correspondante. ```{r} -# Calculate the delay-adjusted CFR -# for the first 30 days +# calculer le RL ajusté au délai pour les 30 premiers jours cfr::cfr_static( data = ebola_30days, delay_density = function(x) density(onset_to_death_ebola, x) ) ``` -```{r,echo=FALSE} -out_delay_adjusted <- - cfr::cfr_static( - data = ebola_30days, - delay_density = function(x) density(onset_to_death_ebola, x) - ) +```{r, echo=FALSE} +out_delay_adjusted <- cfr::cfr_static( + data = ebola_30days, + delay_density = function(x) density(onset_to_death_ebola, x) +) -out_estimate <- out_delay_adjusted %>% pull(severity_estimate) -out_low <- out_delay_adjusted %>% pull(severity_low) -out_high <- out_delay_adjusted %>% pull(severity_high) +out_estimate <- out_delay_adjusted %>% dplyr::pull(severity_estimate) +out_low <- out_delay_adjusted %>% dplyr::pull(severity_low) +out_high <- out_delay_adjusted %>% dplyr::pull(severity_high) ``` -The delay-adjusted CFR indicated that the overall disease severity _at the end of the outbreak_ or with the _latest data available at the moment_ is `r out_estimate` with a 95% confidence interval between `r out_low` and `r out_high`, slightly higher than the naive one. +Le RL ajusté au délai indique que la gravité globale de la maladie *à la fin de l'épidémie* ou selon les *récentes données disponibles à ce moment-là* est `r out_estimate` avec un intervalle de confiance de 95% entre `r out_low` et `r out_high`, légèrement supérieure à la valeur naïve. :::::::::::::::::: callout -### Use the epiparameter class +### Utilisation des objets de la classe epiparameter -When using an `` class object we can use this expression as a template: +Lorsque vous utilisez un object de la classe ``, vous pouvez utiliser cette expression comme modèle : -`function(x) density(, x)` +`function(x) density(, x)` -For distribution functions with parameters not available in `{epiparameter}`, we suggest you two alternatives: +Pour les fonctions de distribution dont les paramètres ne sont pas disponibles dans `{epiparameter}` nous vous proposons deux alternatives : -- Create an `` class object, to plug into other R packages of the outbreak analytics pipeline. Read the [reference documentation of `epiparameter::epiparameter()`](https://epiverse-trace.github.io/epiparameter/reference/epiparameter.html), or +- Créer un objet de la classe `` pour l'intégrer dans d'autres packages R d'un pipeline d'analyse épidémiologique. Lisez l'article [document de référence de `epiparameter::epiparameter()`](https://epiverse-trace.github.io/epiparameter/reference/epiparameter.html) pour plus de clarifications. -- Read `{cfr}` vignette for [a primer on working with delay distributions](https://epiverse-trace.github.io/cfr/articles/delay_distributions.html). +- Liser la vignette de `{cfr}` portant sur [l'utilisation des distributions des délais](https://epiverse-trace.github.io/cfr/articles/delay_distributions.html). :::::::::::::::::: :::::::::::::::::::::::::::::::::::::::: challenge -Use the same file from the previous challenge ([sarscov2_cases_deaths.csv](data/sarscov2_cases_deaths.csv)). - -Estimate the delay-adjusted CFR using the appropriate distribution delay. Then: +Utilisez le même fichier ([sarscov2_cases_deaths.csv](data/sarscov2_cases_deaths.csv)) que celui du défi précédent pour: -- Compare the naive and the delay-adjusted CFR solutions! +- Estimer le RL ajusté au délai en utilisant la distribution de délai adéquate. +- Comparer les résultats du RL naïf et du RL ajusté au délai. :::::::::::::::::::: hint -- Find the appropriate `` object! +- Trouver l'objet de la classe `` approprié pour ces données. :::::::::::::::::::: :::::::::::::::::::: solution -We use `{epiparameter}` to access a delay distribution for the SARS-CoV-2 aggregated incidence data: +Nous utiliserons la librairie `{epiparameter}` pour accéder à une distribution des délais pour les données d'incidence du SARS-CoV-2. -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} library(epiparameter) -sarscov2_delay <- - epiparameter::epiparameter_db( - disease = "covid", - epi_name = "onset to death", - single_epiparameter = TRUE - ) +sarscov2_delay <- epiparameter::epiparameter_db( + disease = "covid", + epi_name = "onset to death", + single_epiparameter = TRUE +) ``` -We read the data input using `readr::read_csv()`. This function recognize that the column `date` is a `` class vector. +Les données seront importées dans R à l'aide de la fonction `readr::read_csv()`. Cette fonction reconnaît que la colonne `date` est de type ``. -```{r, eval=TRUE,echo=FALSE,warning=FALSE,message=FALSE} -# read data from the tutorial repository R project -sarscov2_input <- - readr::read_csv(file.path("data", "sarscov2_cases_deaths.csv")) +```{r, eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE} +# importer les donnees +sarscov2_input <- readr::read_csv( + file = file.path("data", "sarscov2_cases_deaths.csv") +) ``` -```{r,eval=FALSE,echo=TRUE} -# read data -# e.g.: if path to file is data/raw-data/ebola_cases.csv then: -sarscov2_input <- - readr::read_csv(here::here("data", "raw-data", "sarscov2_cases_deaths.csv")) +```{r, eval=FALSE, echo=TRUE} +# importer les donnees +# supposons que le chemin d'accès au fichier est: data/raw-data/ebola_cases.csv +sarscov2_input <- readr::read_csv( + file = here::here("data", "raw-data", "sarscov2_cases_deaths.csv") +) ``` ```{r} -# Inspect data +# voir un apperçu des donnees sarscov2_input ``` -We can use `dplyr::rename()` to adapt the external data to fit the data input for `cfr_static()`. +Nous pouvons utiliser la fonction `cleanepi::standardize_column_names()` pour renommer les noms des colonnes de sorte qu'elles soient conforment à la fonction `cfr::cfr_static()`. ```{r} -# Rename before Estimate naive CFR +# renommer les noms des colonnes avant d'estimer le RL ajusté au délai sarscov2_input %>% - dplyr::rename( - cases = cases_jpn, - deaths = deaths_jpn + cleanepi::standardize_column_names( + rename = c(cases = "cases_jpn", deaths = "deaths_jpn") ) %>% cfr::cfr_static( delay_density = function(x) density(sarscov2_delay, x) ) ``` -Interpret the comparison between the naive and delay-adjusted CFR estimates. +Comparer et interpréter les estimations du RL naïfs et ajusté au délais. :::::::::::::::::::: @@ -427,92 +439,90 @@ Interpret the comparison between the naive and delay-adjusted CFR estimates. :::::::::::::::::: spoiler -### When to use discrete distributions? +### Quand doit-on utiliser les distributions discrètes ? -For `cfr_static()` and all the `cfr_*()` family of functions, the most appropriate choice to pass are **discrete** distributions. This is because we will work with daily case and death data. +Pour la fonction `cfr_static()` et les autres de la famille `cfr_*()`, les distributions les plus appropriées sont les **distributions discrets**. Ceci en raison du fait que nous travaillerons avec des données d'incidence quotidiennes sur le nombre de cas et de décès. -We can assume that evaluating the Probability Distribution Function (PDF) of a *continuous* distribution is equivalent to the Probability Mass Function (PMF) of the equivalent *discrete* distribution. +Nous pouvons supposer que l'évaluation de la fonction de distribution de probabilité (FDP) d'une distribution *continue* est équivalente à la fonction de masse de probabilité (FMP) de la distribution *discrète* correspondante. -However, this assumption may not be appropriate for distributions with larger peaks. For instance, diseases with an onset-to-death distribution that is strongly peaked with a low variance. In such cases, the average disparity between the PDF and PMF is expected to be more pronounced compared to distributions with broader spreads. One way to deal with this is to discretise the continuous distribution using `epiparameter::discretise()` to an `` object. +Toutefois, cette hypothèse pourrait être inappropriée en présence de distributions présentant des pics énormes. C'est le cas, par exemple, des maladies dont la distribution du délai entre la date d'apparition des symptômes et la date du décès présente un pic très élevé et une faible variance. Dans ce cas, la disparité moyenne entre la FDP et la FMP devrait être plus prononcée que pour les distributions avec de larges variances. Une façon d'y remédier est de discrétiser la distribution continue en appliquant la fonction `epiparameter::discretise()` à un objet de la classe ``. :::::::::::::::::: - ::::::::::::::::::::::::::: spoiler -### How does {cfr} works? +### Comment fonctionne la librairie {cfr} ? -To adjust the CFR, [Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) use the case and death incidence data to estimate the number of cases with known outcomes: +Pour ajuster le RL, [Nishiura et al. 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) ont utilisé les incidences des cas et des décès pour estimer le nombre de cas dont les pronostiques vitaux sont connus : $$ - u_t = \dfrac{\sum_{i = 0}^t - \sum_{j = 0}^\infty c_{i - j} f_{j}}{\sum_{i = 0} c_i}, +u_t = \dfrac{\sum_{i = 0}^t +\sum_{j = 0}^\infty c_{i - j} f_{j}}{\sum_{i = 0} c_i}, $$ -where: +où : -- $c_{t}$ is the daily case incidence at time $t$, -- $f_{t}$ is the value of the Probability Mass Function (PMF) of the **delay distribution** between onset and death, and -- $u_{t}$ represents the underestimation factor of the known outcomes. +- $c_{t}$ est l'incidence quotidienne des cas à l'instant $t$, +- $f_{t}$ est la valeur de la fonction de masse de probabilité (FMP) de la **distribution des délais** entre l'apparition des symptômes et le décès, et +- $u_{t}$ représente le facteur de sous-estimation des statuts vitals connus. -$u_{t}$ is used to **scale** the value of the cumulative number of cases in the denominator in the calculation of the CFR. This is calculated internally with the [`estimate_outcomes()`](https://epiverse-trace.github.io/cfr/reference/estimate_outcomes.html) function. +$u_{t}$ est utilisé pour **ajuster l'échelle** du nombre cumulé de cas au niveau du dénominateur dans le calcul du RL. Ce calcul est effectué en interne à l'aide de la fonction [`estimate_outcomes()`](https://epiverse-trace.github.io/cfr/reference/estimate_outcomes.html). -The estimator for CFR can be written as: +L'estimateur du RL peut être écrit comme suit : $$p_{t} = \frac{b_{t}}{u_{t}}$$ -where $p_{t}$ is the realized proportion of confirmed cases to die from the infection (or the unbiased CFR), and $b_{t}$, the crude and biased estimate of CFR (also naive CFR). +où $p_{t}$ est la proportion réelle de cas confirmés qui meurent de l'infection (ou le RL non biaisé), et $b_{t}$ est l'estimation brute et biaisée du RL (ou RL naïf). -From this last equation, we observe that the unbiased CFR $p_{t}$ is larger than biased CFR $b_{t}$ because in $u_{t}$ the numerator is smaller than the denominator (note that $f_{t}$ is the probability distribution of the *delay distribution* between onset and death). Therefore, we refer to $b_{t}$ as the biased estimator of CFR. +D'après cette dernière équation, nous observons que le RL non biaisé $p_{t}$ est plus élevé que le RL biaisé $b_{t}$, car le numérateur dans $u_{t}$ est plus petit que le dénominateur (notez que $f_{t}$ est la distribution de probabilité de la *distribution des délais* entre l'apparition des symptômes et le décès). Par conséquent, $b_{t}$ est considérer comme l'estimateur biaisé du RL. -When we observe the entire course of an epidemic (from $t \rightarrow \infty$), $u_{t}$ tends to 1, making $b_{t}$ tends to $p_{t}$ and become an unbiased estimator ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852)). +Lorsque nous observons toute l'évolution d'une épidémie (de $t \rightarrow \infty$), $u_{t}$ tend vers 1, ce qui fait que $b_{t}$ tend à $p_{t}$ et devient un estimateur sans biais ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852)). ::::::::::::::::::::::::::: +## Estimation du RL au début d'une épidémie -## An early-stage CFR estimate +L'estimation du RL **naïf** est utile pour obtenir une estimation globale de la gravité d'une épidémie (jusqu'au moment $t$). À la fin de l'épidémie ou lorsqu'on atteint un niveau où on a de plus en plus de décès sont signalés, le RL estimé sera alors plus proche du "véritable" RL non biaisé. -The **naive** estimate is useful to get an overall severity estimate of the outbreak (so far). Once the outbreak has ended or has progressed such that more deaths are reported, the estimated CFR is then closest to the 'true' unbiased CFR. +Par ailleurs, la valeur RL **ajusté au délai** estimée au début d'une épidémie refléte mieux la gravité d'une maladie infectieuse émergente que le RL biaisé ou naïf obtenu au cours de l'épidémie. -On the other hand, the **delay-adjusted** estimate can assess the severity of an emerging infectious disease *earlier* than the biased or naive CFR, during an epidemic. - -We can explore the **early** determination of the _delay-adjusted CFR_ using the `cfr_rolling()` function. +Nous pouvons calculer le *RL ajusté au délai* au début d'une épidémie à l'aide de la fonction `cfr::cfr_rolling()`. :::::::::::::::::::::: callout -`cfr_rolling()` is a utility function that automatically calculates CFR for each day of the outbreak with the data available up to that day, saving the user time. +`cfr::cfr_rolling()` est une fonction utilitaire qui calcule automatiquement le RL à chaque jour de l'épidémie à l'aide des données disponibles au jour de l'estimation, permettant ainsi à l'utilisateur de gagner du temps. :::::::::::::::::::::: -`cfr_rolling()` shows the estimated CFR on each outbreak day, given that future data on cases and deaths is unavailable at the time. The final value of `cfr_rolling()` estimates is identical to `cfr_static()` on the same data. +`cfr::cfr_rolling()` montre le RL estimé à chaque jour de l'épidémie, étant donné que les données futures sur les nombres de cas et de décès ne sont pas disponibles à ce moment-là. Pour un même jeu de données, la valeur finale de `cfr::cfr_rolling()` est identique à celle de `cfr::cfr_static()`. ```{r} -# for all the 73 days in the Ebola dataset -# Calculate the rolling daily naive CFR +# Calculer le RL naïf quotidien à chacun des 73 jours dans un jeu de donnees +# d'Ebola rolling_cfr_naive <- cfr::cfr_rolling(data = ebola1976) ``` ```{r} -# for all the 73 days in the Ebola dataset -# Calculate the rolling daily delay-adjusted CFR +# Calculer le RL quotidien ajusté au délai à chacun des 73 jours dans un jeu de +# donnees d'Ebola rolling_cfr_adjusted <- cfr::cfr_rolling( data = ebola1976, delay_density = function(x) density(onset_to_death_ebola, x) ) ``` -With `utils::tail()`, we show that the latest CFR estimates. The naive and delay-adjusted estimates have overlapping ranges of 95% confidence intervals. +Avec la fonction `utils::tail()` nous pouvons monter les dernières estimations du RL. On voit que les intervalles de confiance à 95% des valeurs naïves et corrigées se chevauchent. -```{r,eval=FALSE,echo=TRUE} -# Print the tail of the data frame +```{r, eval=FALSE, echo=TRUE} +# voir un aperçu des dernieres valeurs du RL utils::tail(rolling_cfr_naive) utils::tail(rolling_cfr_adjusted) ``` -Now, let's visualise both results in a time series. How would the naive and delay-adjusted CFR estimates perform in real time? +Visualisons maintenant les deux résultats dans une série chronologique. Quelle serait la performance des estimations naïves et ajustées au délai en temps réel ? -```{r,echo=TRUE,warning=FALSE,message=FALSE} -# bind by rows both output data frames +```{r, echo=TRUE, warning=FALSE, message=FALSE} +# concatener les deux resultats dplyr::bind_rows( list( naive = rolling_cfr_naive, @@ -520,7 +530,7 @@ dplyr::bind_rows( ), .id = "method" ) %>% - # visualise both adjusted and unadjusted rolling estimates + # visualiser les valeurs journalieres du RL naif et corrige ggplot() + geom_ribbon( aes( @@ -536,51 +546,51 @@ dplyr::bind_rows( ) ``` -The horizontal line represents the delay-adjusted CFR estimated at the outbreak's end. The dotted line means the estimate has a 95% confidence interval (95% CI). +Les lignes rouges et bleues représentent respectivement le RL journalier ajusté au délai et naïf tout au long de l'épidémie. Les bandes autour d'elles représentent les intervalles de confiance à 95% (IC 95%). -**Notice** that this delay-adjusted calculation is particularly useful when an _epidemic curve of confirmed cases_ is the only data available (i.e. when individual data from onset to death are unavailable, especially during the early stage of the epidemic). When there are few deaths or none at all, an assumption has to be made for the *delay distribution* from onset to death, e.g. from literature based on previous outbreaks. [Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) depict this in the figures with data from the SARS outbreak in Hong Kong, 2003. +**Notez** que le calcul du RL ajusté au délai est particulièrement utile lorsqu'une *courbe épidémique de cas confirmés* est la seule donnée disponible (c'est-à-dire lorsque les données concernant le temps entre l'apparition des symptômes jusqu'au décès ne sont pas disponibles, comme c'est le cas au début de l'épidémie). Lorsqu'il y a peu ou pas de décès, une hypothèse sur la *distribution des délais* entre l'apparition des symptômes et le décès doit être formulée, par exemple à partir de la littérature basée sur les épidémies précédentes. [Nishiura et al. 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852) illustrent ce phénomène dans les figures à l'aide de données relatives à l'épidémie de SARS survenue à Hong Kong en 2003. :::::::::::::::::::::::::::::::::: spoiler -### Case study: SARS outbreak, Hong Kong, 2003 +### Étude de cas : Épidémie de SARS, Hong Kong, 2003 -Figures A and B show the cumulative numbers of cases and deaths of SARS, and Figure C shows the observed (biased) CFR estimates as a function of time, i.e. the cumulative number of deaths over cases at time $t$. Due to the delay from the onset of symptoms to death, the biased estimate of CFR at time $t$ underestimates the realised CFR at the end of an outbreak (i.e. 302/1755 = 17.2 %). +Les figures A et B montrent les nombres cumulés de cas et de décès dus au SARS, et la figure C montre les estimations observées (biaisées) du RL en fonction du temps, c'est-à-dire le nombre cumulé de décès par rapport au nombre de cas à l'instant $t$. En raison du délai entre l'apparition des symptômes et le décès, l'estimation biaisée du RL au temps $t$ est inférieure au RL obtenu à la fin de l'épidémie (302/1755 = 17,2 %). -![Observed (biased) confirmed case fatality risk of severe acute respiratory syndrome (SARS) in Hong Kong, 2003. ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_abc.png) +![Risque observé (biaisé) de létalité des cas confirmés du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_abc.png) -Nevertheless, even by only using the observed data for the period March 19 to April 2, `cfr_static()` can yield an appropriate prediction (Figure D), e.g. the delay-adjusted CFR at March 27 is 18.1 % (95% CI: 10.5, 28.1). An overestimation is seen in the very early stages of the epidemic, but the 95% confidence limits in the later stages include the realised CFR (i.e. 17.2 %). +Néanmoins, même en n'utilisant que les données observées sur la période du 19 mars au 2 avril, `cfr::cfr_static()` peut produire une prédiction appropriée (figure D), par exemple le RL ajusté au délai au 27 mars est de 18,1% (IC 95% : 10,5 - 28,1). Une surestimation est notée au tout début de l'épidémie, mais les limites de l'intervalle de confiance à 95% pour les phases ultérieures incluent le RL réel (c'est-à-dire 17,2 %). -![Early determination of the delay-adjusted confirmed case fatality risk of severe acute respiratory syndrome (SARS) in Hong Kong, 2003. ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_d.png) +![Détermination précoce du risque de létalité confirmé, ajusté au délai, du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_d.png) :::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::: discussion -### Interpret the early-stage CFR estimate +### Interpréter l'estimation du RL au début de l'épidémie -Based on the figure above: +Sur la base de la figure ci-dessus : -- How much difference in days is between the date in which the 95% CI of the estimated _delay-adjusted CFR_ vs _naive CFR_ cross with the CFR estimated at the end of the outbreak? +- Quelle est la différence, en jours, entre la date à laquelle l'IC à 95% du *RL ajusté aux délais* et du *RL naïf* se croisent avec le RL estimé à la fin de l'épidémie ? -Discuss: +Discutez-en : -- What are the Public health policy implications of having a _delay-adjusted CFR_ estimate? +- En quoi le fait de disposer d'un RL *ajusté aux délai* peut-il influer sur les stratégies de santé publique ? -:::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::: hint -We can use either visual inspection or analysis of the output data frames. +Nous pouvons soit inspecter visuellement ou analyser les tableaux des données de sortie. :::::::::::::::::::::: -:::::::::::::::::::::: instructor +:::::::::::::::::::::: solution -There is almost one month of difference. +Il y a presque un mois de différence. -Note that the estimate has considerable uncertainty at the beginning of the time series. After two weeks, the delay-adjusted CFR approaches the overall CFR estimate at the outbreak's end. +Notez que l'estimation présente une incertitude considérable au début de la série chronologique. Après deux semaines, le RL corrigé au délai se rapproche de l'estimation globale du RL à la fin de l'épidémie. -Is this pattern similar to other outbreaks? We can use the data sets in this episode's challenges. We invite you to find it out! +Ce schéma est-il similaire à celui d'autres épidémies ? Nous vous invitons à utiliser les ensembles de données dans les défis de cet épisode pour le découvrir. :::::::::::::::::::::: @@ -588,40 +598,40 @@ Is this pattern similar to other outbreaks? We can use the data sets in this epi ### Checklist -With `{cfr}`, we estimate the CFR as the proportion of deaths among **confirmed** cases. +Avec `{cfr}` nous estimons le RL comme la proportion de décès parmi les cas **confirmés**. -By only using **confirmed** cases, it is clear that all cases that do not seek medical treatment or are not notified will be missed, as well as all asymptomatic cases. This means that the CFR estimate is higher than the proportion of deaths among the infected. +En n'utilisant que les cas **confirmés** il est clair que tous les cas qui ne cherchent pas de traitement médical ou qui ne sont pas notifiés ne sont pas pris en compte, de même que tous les cas asymptomatiques. Cela signifie que le RL estimé est plus élevé que la proportion de décès parmi l'ensemble des personnes infectées. :::::::::::::::::::::: ::::::::::::::::::::::::::: solution -### Why the naive and delay-adjusted differ? +### Pourquoi les estimations naïves et ajustées aux délais diffèrent-elles ? -`{cfr}` method aims to obtain an unbiased estimator "well before" observing the entire course of the outbreak. For this, `{cfr}` uses the underestimation factor $u_{t}$ to estimate the unbiased CFR $p_{t}$ using maximum-likelihood methods, given the *sampling process* defined by [Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852). +La méthode de la librairie `{cfr}` vise à obtenir un estimateur non biaisé "bien avant" d'observer toute l'évolution de l'épidémie. Pour ce faire, `{cfr}` utilise le facteur de sous-estimation $u_{t}$ pour estimer le RL non biaisé $p_{t}$ à l'aide de la méthode du maximum de vraisemblance, étant donné le *processus d'échantillonnage* défini par [Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852). ::::::::::::::::::::::::::: :::::::::::::::::::::::::: solution -### What is the sampling process? +### Quel est le processus d'échantillonnage ? -![The population of confirmed cases and sampling process for estimating the unbiased CFR during the course of an outbreak. ([Nishiura et al., 2009](https://doi.org/10.1371/journal.pone.0006852.g001))](fig/cfr-pone.0006852.g001.png) +![La population des cas confirmés et le processus d'échantillonnage pour l'estimation du RL non biaisé au cours d'une épidémie selon [Nishiura et al. 2009](https://doi.org/10.1371/journal.pone.0006852.g001)](../../../episodes/fig/cfr-pone.0006852.g001.png) -From *aggregated incidence data*, at time $t$ we know the cumulative number of confirmed cases and deaths, $C_{t}$ and $D_{t}$, and wish to estimate the unbiased CFR $\pi$, by way of the factor of underestimation $u_{t}$. +Nous connaissons le nombre cumulé de cas confirmés et de décès $C_{t}$ et $D_{t}$ à l'instant $t$ à partir des *données d'incidence agrégées* et souhaitons estimer le RL non biaisé $\pi$ au moyen du facteur de sous-estimation $u_{t}$. -If we knew the factor of underestimation $u_{t}$ we could specify the size of the population of confirmed cases no longer at risk ($u_{t}C_{t}$, **shaded**), although we do not know which surviving individuals belong to this group. A proportion $\pi$ of those in the group of cases still at risk (size $(1- u_{t})C_{t}$, **unshaded**) is expected to die. +Si nous connaissions le facteur de sous-estimation $u_{t}$ nous pourrions préciser la taille de la population des cas confirmés qui ne sont plus à risque ($u_{t}C_{t}$, **ombré**), bien que nous ne sachions pas quels individus survivants appartiennent à ce groupe. Une proportion $\pi$ de ceux qui font partie du groupe de cas encore à risque (taille $(1- u_{t})C_{t}$, **non ombré**) devrait mourir. -Because each case no longer at risk had an independent probability of dying, $\pi$, the number of deaths, $D_{t}$, is a sample from a binomial distribution with sample size $u_{t}C_{t}$, and probability of dying $p_{t}$ = $\pi$. +Parce que chaque cas qui n'est plus à risque avait une probabilité indépendante de mourir, $\pi$ le nombre de décès, $D_{t}$ est un échantillon d'une distribution binomiale avec une taille d'échantillon de $u_{t}C_{t}$ et la probabilité de décès $p_{t}$ = $\pi$. -This is represented by the following likelihood function to obtain the maximum likelihood estimate of the unbiased CFR $p_{t}$ = $\pi$: +Ceci est représenté par la fonction de vraisemblance suivante permettant d'obtenir l'estimation du maximum de vraisemblance du RL non biaisé $p_{t}$ = $\pi$: $$ - {\sf L}(\pi | C_{t},D_{t},u_{t}) = \log{\dbinom{u_{t}C_{t}}{D_{t}}} + D_{t} \log{\pi} + - (u_{t}C_{t} - D_{t})\log{(1 - \pi)}, +{\sf L}(\pi | C_{t},D_{t},u_{t}) = \log{\dbinom{u_{t}C_{t}}{D_{t}}} + D_{t} \log{\pi} + +(u_{t}C_{t} - D_{t})\log{(1 - \pi)}, $$ -This estimation is performed by the internal function `?cfr:::estimate_severity()`. +Ce calcule est réalisé par la fonction interne `?cfr:::estimate_severity()`. :::::::::::::::::::::::::: @@ -629,7 +639,7 @@ This estimation is performed by the internal function `?cfr:::estimate_severity( ### Limitations -- The delay-adjusted CFR does not address all sources of error in data like the underdiagnosis of infected individuals. +- Le RL ajusté aux délais ne prend pas en charge toutes les sources d'erreur dans les données, telle que la non-détection de toutes les personnes infectées. :::::::::::::::::::::::::: @@ -637,58 +647,58 @@ This estimation is performed by the internal function `?cfr:::estimate_severity( :::::::::::::::::::::::::::::::: discussion -### More severity measures +### Autres mesures de sévérité -Suppose we need to assess the clinical severity of the epidemic in a context different from surveillance data, like the severity among cases that arrive at hospitals or cases you collected from a representative serological survey. +Supposons que nous ayons besoin d'évaluer la gravité clinique de l'épidémie dans un contexte autre aue la surveillance épidémiologique, comme la gravité parmi les cas qui arrivent à l'hôpital ou les cas que vous avez recueillis lors d'une enquête sérologique représentative. -Using `{cfr}`, we can change the inputs for the numerator (`cases`) and denominator (`deaths`) to estimate more severity measures like the Infection fatality risk (IFR) or the Hospitalisation Fatality Risk (HFR). We can follow this analogy: +En utilisant `{cfr}` nous pouvons modifier les valeurs du numérateur (`cases`) et du dénominateur (`deaths`) pour estimer des mesures plus sévères comme le risque d'infection mortelle (RIM) ou le risque d'hospitalisation mortelle (RHM). Nous pouvons suivre analogie ci-après : -:::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::: solution -### Infection and Hospitalization fatality risk +### Risque de létalité lié à l'infection et à l'hospitalisation -If for a _Case_ fatality risk (CFR), we require: +Si pour le risque de décès (RL) d'un *cas*, nous exigeons : -- _case_ and death incidence data, with a -- case-to-death delay distribution (or close approximation, such as symptom onset-to-death). +- les données sur l'incidence des cas et des décès, avec une +- distribution des délais entre les cas et les décès (ou une approximation proche, comme le délai entre l'apparition des symptômes et le décès). -Then, the _Infection_ fatality risk (IFR) requires: +Dans ce cas, le *risque d'infection mortelle (RIM)* nécessite : -- _infection_ and death incidence data, with an -- exposure-to-death delay distribution (or close approximation). +- les données sur l'incidence des infections et des décès, avec une +- distribution des délais entre l'exposition et le décès (ou une approximation proche). -Similarly, the _Hospitalisation_ Fatality Risk (HFR) requires: +De la même manière, le *risque d'hospitalisation mortelle* requière : -- _hospitalisation_ and death incidence data, and a -- hospitalisation-to-death delay distribution. +- les données d'incidence des cas d'hospitalisation et de décès, ainsi qu'une +- distribution des délais entre l'hospitalisation et le décès. :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::: solution -### Data sources for more severity measures +### Sources de données pour d'autres mesures de la gravité -[Yang et al., 2020](https://www.nature.com/articles/s41467-020-19238-2/figures/1) summarises different definitions and data sources: +[Yang et al, 2020](https://www.nature.com/articles/s41467-020-19238-2/figures/1) résume les différentes définitions et sources de données : -![Severity levels of infections with SARS-CoV-2 and parameters of interest. Each level is assumed to be a subset of the level below.](fig/cfr-s41467-020-19238-2-fig_a.png) +![Niveaux de gravité des infections par le SARS-CoV-2 et les paramètres d'intérêt. Chaque niveau est supposé être un sous-ensemble du niveau inférieur.](../../../episodes/fig/cfr-s41467-020-19238-2-fig_a.png) -- sCFR symptomatic case-fatality risk, -- sCHR symptomatic case-hospitalisation risk, -- mCFR medically attended case-fatality risk, -- mCHR medically attended case-hospitalisation risk, -- HFR hospitalisation-fatality risk. +- sCFR risque de létalité des cas symptomatiques (sRL), +- sCHR risque d'hospitalisation des cas symptomatiques (sRH), +- mCFR risque de létalité des cas médicalement pris en charge (mRL), +- mCHR risque d'hospitalisation d'un cas médicalement pris en charge (mRH), +- HFR risque d'hospitalisation mortelle (RHM). -![Schematic diagram of the baseline analyses. Red, blue, and green arrows denote the data flow from laboratory-confirmed cases of passive surveillance, clinically-diagnosed cases, and laboratory-confirmed cases of active screenings.](fig/cfr-s41467-020-19238-2-fig_b.png){alt='Data source of COVID-19 cases in Wuhan: D1) 32,583 laboratory-confirmed COVID-19 cases as of March 84, D2) 17,365 clinically-diagnosed COVID-19 cases during February 9–194, D3)daily number of laboratory-confirmed cases on March 9–April 243, D4) total number of COVID-19 deaths as of April 24 obtained from the Hubei Health Commission3, D5) 325 laboratory-confirmed cases and D6) 1290 deaths were added as of April 16 through a comprehensive and systematic verification by Wuhan Authorities3, and D7) 16,781 laboratory-confirmed cases identified through universal screening10,11. Pse: RT-PCR sensitivity12. Pmed.care: proportion of seeking medical assistance among patients suffering from acute respiratory infections13.'} +![Schéma des analyses de base. Les flèches rouges, bleues et vertes indiquent le flux de données provenant des cas confirmés en laboratoire dans le cadre de la surveillance passive, des cas diagnostiqués cliniquement et des cas confirmés en laboratoire dans le cadre des dépistages actifs.](../../../episodes/fig/cfr-s41467-020-19238-2-fig_b.png){fig-alt="Source des données sur les cas de COVID-19 à Wuhan : D1) 32 583 cas de COVID-19 confirmés en laboratoire en mars 84, D2) 17 365 cas de COVID-19 diagnostiqués cliniquement entre le 9 février et le 24 avril, D3) nombre quotidien de cas confirmés en laboratoire entre le 9 mars et le 24 avril, D4) nombre total de décès dus au COVID-19 en date du 24 avril, obtenus auprès de la Commission de la santé du Hubei3, D5) 325 cas confirmés en laboratoire et D6) 1 290 décès ont été ajoutés au 16 avril grâce à une vérification complète et systématique effectuée par les autorités de Wuhan3, et D7) 16 781 cas confirmés en laboratoire identifiés par le biais d'un dépistage universel10,11. Pse : sensibilité de la RT-PCR12. Pmed.care : proportion de patients souffrant d'infections respiratoires aiguës qui demandent une assistance médicale13."} :::::::::::::::::::::::::::: ::::::::::::::::: callout -### Aggregated data differ from linelists +### Les données agrégées diffèrent des données de cas individuels (linelist) -*Aggregated* incidence data differs from **linelist** data, where each observation contains individual-level data. +Les données d'incidence **agrégées** diffèrent des **linelist** où chaque observation contient des données concernant un cas individuel. ```{r} outbreaks::ebola_sierraleone_2014 %>% as_tibble() @@ -698,23 +708,23 @@ outbreaks::ebola_sierraleone_2014 %>% as_tibble() :::::::::::::::::::::::::::::::::: challenge -### Use incidence2 to rearrange your data +### Utilisez {incidence2} pour réorganiser vos données -From the `{outbreaks}` package, load the MERS linelist of cases from the `mers_korea_2015` object. +Utilisez la librairie `{outbreaks}` pour chargez le linelist des cas de MERS issues de l'objet `mers_korea_2015` . -Rearrange your this linelist to fit into the `{cfr}` package input. +Réorganisez cet objet linelist de sorte qu'il soit utilisable par les fonctions de la librairie `{cfr}`. -Estimate the delay-adjusted CFR using the corresponding distribution delay. +Estimez le RL ajusté au délai en utilisant la distribution de délai correspondante. ::::::::::::::::: hint -**How to rearrange my input data?** +**Comment réorganiser les données d'entrée ?** -Rearranging the input data for data analysis can take most of the time. To get ready-to-analyse _aggregated incidence data_, we encourage you to use `{incidence2}`! +Le réorganisation des données d'entrée durant le processus d'analyse des données peut prendre beaucoup de temps. Pour obtenir des *données d'incidence agrégées* prêtes à être analysées nous vous encourageons à utiliser le package `{incidence2}`. -First, in the [Get started](https://www.reconverse.org/incidence2/articles/incidence2.html) vignette from the `{incidence2}` package, explore how to use the `date_index` argument when reading a linelist with dates in multiple column. +Tout d'abord, consultez la vignette [Get started](https://www.reconverse.org/incidence2/articles/incidence2.html) de la librairie `{incidence2}` pour savoir comment utiliser l'argument `date_index` lors de la lecture d'un linelist contenant plusieurs colonnes de type . -Then, refer to the `{cfr}` reference manual on [Prepare common epidemiological data formats for CFR estimation](https://epiverse-trace.github.io/cfr/reference/prepare_data.html) on how to use the `cfr::prepare_data()` function from incidence2 objects. +Ensuite, référez-vous [au manuel de référence](https://epiverse-trace.github.io/cfr/reference/prepare_data.html) sur la façon d'utiliser la fonction `cfr::prepare_data()` sur les objets de classe . @@ -722,45 +732,44 @@ Then, refer to the `{cfr}` reference manual on [Prepare common epidemiological d ::::::::::::::::: solution -```{r,message=FALSE,warning=FALSE} -# Load packages +```{r, message=FALSE, warning=FALSE} +# charger les packages library(cfr) library(epiparameter) library(incidence2) library(outbreaks) library(tidyverse) -# Access delay distribution -mers_delay <- - epiparameter::epiparameter_db( - disease = "mers", - epi_name = "onset to death", - single_epiparameter = TRUE - ) +# Acceder a la distribution des delais +mers_delay <- epiparameter::epiparameter_db( + disease = "mers", + epi_name = "onset to death", + single_epiparameter = TRUE +) -# Read linelist +# lire le linelist mers_korea_2015$linelist %>% as_tibble() %>% select(starts_with("dt_")) -# Use {incidence2} to count daily incidence +# utiliser {incidence2} pour determiner les incidences journalieres mers_incidence <- mers_korea_2015$linelist %>% - # converto to incidence2 object - incidence(date_index = c("dt_onset", "dt_death")) %>% - # complete dates from first to last + # convertir en objet incidence2 + incidence2::incidence(date_index = c("dt_onset", "dt_death")) %>% + # completer les dates du début a la fin incidence2::complete_dates() -# Inspect incidence2 output +# voir un aperçu des donnees d'incidence mers_incidence -# Prepare data from {incidence2} to {cfr} +# Preparer les donnees d'incidence pour utilisation dans {cfr} mers_incidence %>% - prepare_data( + cfr::prepare_data( cases_variable = "dt_onset", deaths_variable = "dt_death" ) -# Estimate delay-adjusted CFR +# Estimer le RL ajuste au delai mers_incidence %>% cfr::prepare_data( cases_variable = "dt_onset", @@ -769,105 +778,98 @@ mers_incidence %>% cfr::cfr_static(delay_density = function(x) density(mers_delay, x)) ``` - - ::::::::::::::::: :::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: challenge -### Severity heterogeneity +### Hétérogénéité de la gravité -The CFR may differ across populations (e.g. age, space, treatment); quantifying these heterogeneities can help target resources appropriately and compare different care regimens ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). +Le RL peut varier d'une population à l'autre (par exemple en fonction de l'âge, l'espace géographique, du traitement, etc) ; la quantification de ces hétérogénéités peut aider à mobiliser les ressources de manière appropriée et à comparer différents régimes de soins ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). -Use the `cfr::covid_data` data frame to estimate a delay-adjusted CFR stratified by country. +Utilisez le tableau de données `cfr::covid_data` pour estimer un RL ajusté aux délais, stratifié par pays. ::::::::::::::::::::::::: hint -One way to do a _stratified analysis_ is to apply a model to nested data. This [`{tidyr}` vignette](https://tidyr.tidyverse.org/articles/nest.html#nested-data-and-models) shows you how to apply the `group_by()` + `nest()` to nest data, and then `mutate()` + `map()` to apply the model. +Une façon d'effectuer une *analyse stratifiée* consiste à appliquer un modèle à des données imbriquées. Cette [vignette de la librairie `{tidyr}` vignette](https://tidyr.tidyverse.org/articles/nest.html#nested-data-and-models) vous montre comment appliquer la méthode `dplyr::group_by()` + `tidyr::nest()` aux données de imbriquées, puis `dplyr::mutate()` + `purrr::map()` pour appliquer le modèle. ::::::::::::::::::::::::: ::::::::::::::::::::::::: solution -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} library(cfr) library(epiparameter) library(tidyverse) -covid_data %>% glimpse() +covid_data %>% dplyr::glimpse() -delay_onset_death <- - epiparameter::epiparameter_db( - disease = "covid", - epi_name = "onset to death", - single_epiparameter = TRUE - ) +delay_onset_death <- epiparameter::epiparameter_db( + disease = "covid", + epi_name = "onset to death", + single_epiparameter = TRUE +) covid_data %>% - group_by(country) %>% - nest() %>% - mutate( - temp = - map( - .x = data, - .f = cfr::cfr_static, - delay_density = function(x) density(delay_onset_death, x) - ) + dplyr::group_by(country) %>% + tidyr::nest() %>% + dplyr::mutate( + temp = purrr::map( + .x = data, + .f = cfr::cfr_static, + delay_density = function(x) density(delay_onset_death, x) + ) ) %>% - unnest(cols = temp) + tidyr::unnest(cols = temp) ``` -Great! Now you can use similar code for any other stratified analysis like age, regions or more! +C'est génial ! Vous pouvez maintenant utiliser un code similaire pour stratifier vos analyses en fonction de l'âge, des régions ou autres facteurs utiles. -But, how can we interpret that there is a country variability of severity from the same diagnosed pathogen? +Mais comment interpréter le fait qu'on ait une variabilité nationale de la gravité clinique pour un même agent pathogène diagnostiqué ? -Local factors like testing capacity, the case definition, and sampling regime can affect the report of cases and deaths, thus affecting case ascertainment. Take a look to the `{cfr}` vignette on [Estimating the proportion of cases that are ascertained during an outbreak](https://epiverse-trace.github.io/cfr/articles/estimate_ascertainment.html)! +Des facteurs locaux tels que la capacité de test, la définition de cas et le régime d'échantillonnage peuvent influer sur la déclaration des cas et des décès, et donc sur la détermination de la grvité clinique. Jetez un coup d'œil à la vignette de `{cfr}` sur [Estimation de la proportion de cas confirmés au cours d'une épidémie](https://epiverse-trace.github.io/cfr/articles/estimate_ascertainment.html). ::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: +## Annexe -## Appendix - -The `{cfr}` package has a function called `cfr_time_varying()` with functionality that differs from `cfr_rolling()`. +La librairie `{cfr}` possède une fonction appelée `cfr_time_varying()` dont la fonctionnalité diffère de celle de `cfr_rolling()`. ::::::::::::::::: callout -### When to use cfr_rolling()? +### Quand doit-on utiliser cfr_rolling() ? -`cfr_rolling()` shows the estimated CFR on each outbreak day, given that future data on cases and deaths is unavailable at the time. The final value of `cfr_rolling()` estimates is identical to `cfr_static()` on the same data. +`cfr::cfr_rolling()` calcule le RL estimé à chaque jour de l'épidémie, vue que les données futures sur les cas et les décès ne sont pas disponibles à ce moment-là. La valeur finale de `cfr_rolling()` est identique à celle de `cfr_static()` pour les mêmes données. -Remember, as shown above, `cfr_rolling()` is helpful to get early-stage CFR estimates and check whether an outbreak's CFR estimate has stabilised. Thus, `cfr_rolling()` is not sensitive to the length or size of the epidemic. +Rappelez-vous, comme indiqué ci-dessus, `cfr_rolling()` est utile pour obtenir des estimations du RL à un stade précoce de l'épidémie et vérifier si l'estimation du RL d'une épidémie s'est stabilisée. C'est pourquoi, `cfr_rolling()` n'est pas sensible à la durée ou à la taille de l'épidémie. ::::::::::::::::: ::::::::::::::::: callout -### When to use `cfr_time_varying()`? +### Quand doit-on utiliser `cfr_time_varying()` ? -On the other hand, `cfr_time_varying()` calculates the CFR over a moving window and helps to understand changes in CFR due to changes in the epidemic, e.g. due to a new variant or increased immunity from vaccination. +D'autre part, `cfr::cfr_time_varying()`, utilisée pour calculer le RL mobile (RL par intervalle de temps régulier), aide à comprendre les variations du RL dues à des changements durant l'épidémie, comme par exemple en raison d'un nouveau variant du pathogène ou d'une immunité accrue due à la vaccination. -However, `cfr_time_varying()` is sensitive to sampling uncertainty. Thus, it is sensitive to the size of the outbreak. The higher the number of cases with expected outcomes on a given day, the more reasonable estimates of the time-varying CFR we will get. +Cependant, `cfr_time_varying()` est sensible à l'incertitude de l'échantillonnage. Son résultat est donc sensible à la taille de l'épidémie. Plus le nombre de cas dont on connaitra le pronostique au moment de l'estimation est élevé, plus nous obtiendrons des estimations raisonnables du RL variable par intervalle de temps consécutif. -For example, with 100 cases, the fatality risk estimate will, roughly speaking, have a 95% confidence interval ±10% of the mean estimate (binomial CI). So if we have >100 cases with expected outcomes *on a given day*, we can get reasonable estimates of the time varying CFR. But if we only have >100 cases *over the course of the whole epidemic*, we probably need to rely on `cfr_rolling()` that uses the cumulative data. +Par exemple, avec 100 cas, le taux de létalité estimé aura, grosso modo, un intervalle de confiance de 95% ± 10% de la valeur moyenne (IC binomial). Donc, si le nombre de cas dont on connaitra le pronostique à *un jour donné* est supérieur 100, nous pouvons obtenir des estimations raisonnables du RL mobile. Mais si nous disposons que de >100 cas *sur toute la durée de l'épidémie* nous devrons probablement nous appuyer sur la fonction `cfr_rolling()` qui utilise les données cumulées. -We invite you to read this [vignette about the `cfr_time_varying()` function](https://epiverse-trace.github.io/cfr/articles/estimate_time_varying_severity.html). +Nous vous invitons à lire la [vignette sur la fonction `cfr_time_varying()`](https://epiverse-trace.github.io/cfr/articles/estimate_time_varying_severity.html). ::::::::::::::::: +::::::::::::::::::::::::::::::::::::: keypoints -::::::::::::::::::::::::::::::::::::: keypoints +- Utilisez la librairie `{cfr}` pour estimer la gravité clinique -- Use `{cfr}` to estimate severity +- Utilisez la fonction `cfr::cfr_static()` pour estimer le RL global à l'aide des plus récentes données disponibles. -- Use `cfr_static()` to estimate the overall CFR with the latest data available. +- Utilisez la fonction `cfr::cfr_rolling()` pour obtenir les estimations du RL durant chaque jour de l'épidémie. -- Use `cfr_rolling()` to show what the estimated CFR would be on each day of the outbreak. - -- Use the `delay_density` argument to adjust the CFR by the corresponding delay distribution. +- Utiliser l'argument `delay_density` pour ajuster les valeurs du RL au délai épidémiologique en fonction de la distribution des délais correspondants. :::::::::::::::::::::::::::::::::::::::::::::::: - From 04b3b50005ac668c459b6cbc413d0670c445f181 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 13 Oct 2025 19:23:38 +0100 Subject: [PATCH 21/29] fix review added issues --- episodes/severity-static.Rmd | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/episodes/severity-static.Rmd b/episodes/severity-static.Rmd index 2f8833fb..ad45c7c8 100644 --- a/episodes/severity-static.Rmd +++ b/episodes/severity-static.Rmd @@ -14,14 +14,13 @@ editor_options: :::::::::::::::::::::::::::::::::::::::::::::::: -::::::::::::::::::::::::::::::::::::: objectifs +::::::::::::::::::::::::::::::::::::: objectives - Estimer le risque de létalité (RL) à partir de données épidémiologiques agrégées en utilisant la librairie `{cfr}`. - Estimer le RL ajusté au délai épidémiologique à l'aide des librairies `{epiparameter}` et `{cfr}`. -- Estimer la sévérité ajustée au délai épidémiologique pour une série -chronologique en expansion en utilisant le package `{cfr}`. +- Estimer la sévérité ajustée au délai épidémiologique pour une série chronologique en expansion en utilisant le package `{cfr}`. :::::::::::::::::::::::::::::::::::::::::::::::: @@ -65,14 +64,14 @@ Nous pouvons évaluer le potentiel pandémique d'une épidémie à l'aide de deu ([Fraser et al. 2009](https://www.science.org/doi/full/10.1126/science.1176062), [CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html)). -![Scénarios de planification pandémique du HHS basés sur le cadre d'évaluation de la gravité de la pandémie. Ce cadre utilise une mesure combinant la gravité clinique et la transmissibilité pour caractériser les scénarios de pandémie de grippe. **HHS**: United States Department of Health and Human Services ([CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html))](../../../episodes/fig/cfr-hhs-scenarios-psaf.png){alt='L'axe horizontal représente la mesure de la gravité clinique, échelonnée de 1 à 7, où 1 correspond à faible, 4 à modérée et 7 à très grave. L'axe vertical représente la mesure de la transmissibilité, échelonnée de 1 à 5, où 1 correspond à faible, 3 à modérée et 5 à forte transmissibilité. Sur le graphique, les scénarios de planification d'une pandémie sont présentés en quatre quadrants (A, B, C et D). De gauche à droite, les scénarios sont: “variation saisonnière”, “pandémie modérée”, “pandémie grave” et “pandémie très grave”. À mesure que la gravité clinique augmente sur l'axe horizontal, ou que la transmissibilité augmente sur l'axe vertical, la gravité du scénario de planification de la pandémie augmente également.'} +![Scénarios de planification pandémique du HHS basés sur le cadre d'évaluation de la gravité de la pandémie. Ce cadre utilise une mesure combinant la gravité clinique et la transmissibilité pour caractériser les scénarios de pandémie de grippe. **HHS**: United States Department of Health and Human Services ([CDC, 2016](https://www.cdc.gov/flu/pandemic-resources/national-strategy/severity-assessment-framework-508.html))](fig/cfr-hhs-scenarios-psaf.png){alt='L'axe horizontal représente la mesure de la gravité clinique, échelonnée de 1 à 7, où 1 correspond à faible, 4 à modérée et 7 à très grave. L'axe vertical représente la mesure de la transmissibilité, échelonnée de 1 à 5, où 1 correspond à faible, 3 à modérée et 5 à forte transmissibilité. Sur le graphique, les scénarios de planification d'une pandémie sont présentés en quatre quadrants (A, B, C et D). De gauche à droite, les scénarios sont: “variation saisonnière”, “pandémie modérée”, “pandémie grave” et “pandémie très grave”. À mesure que la gravité clinique augmente sur l'axe horizontal, ou que la transmissibilité augmente sur l'axe vertical, la gravité du scénario de planification de la pandémie augmente également.'} Une approche épidémiologique pour estimer la gravité clinique consiste à quantifier le risque de létalité (RL). Le risque de létalité est la probabilité conditionnelle de décès en cas de diagnostic confirmé, calculée comme le rapport entre le nombre cumulé de décès dus à une maladie infectieuse et le nombre de cas diagnostiqués confirmés. Toutefois, le calcule de ce paramètre de cette façon au cours d'une épidémie tend à aboutir à un RL naïf ou biaisé, compte tenu du [délai](../../../learners/reference.md#delaydist) entre l'apparition de la maladie et le décès, qui varie considérablement au fur et à mesure que l'épidémie progresse et se stabilise aux derniers stades de l'épidémie ([Ghani et al. 2005](https://academic.oup.com/aje/article/162/5/479/82647?login=false#620743)). -![Estimations du risque de létalité (RL) observé biaisé confirmé en fonction du temps (ligne épaisse), calculé comme le rapport entre le nombre cumulé de décès et de cas confirmés à un instant $t$. La valeur atteinte à la fin d'une épidémie (~30 mai) est le risque de létalité observé à la fin de l'épidémie. La ligne horizontale continue et les lignes pointillées indiquent la valeur du RL prédit et leurs intervalles de confiance à 95% (IC $95%$) des valeurs prédites du taux de mortalité ajusté au délai en utilisant uniquement les données observées jusqu'au 27 mars 2003. ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_c.png){fig-alt="Les périodes sont pertinentes : Période 1 -- 15 jours où le RL est nul, ce qui indique qu'aucun décès n'a été signalé ; Période du 15 mars au 26 avril où le RL semble augmenter ; Période du 30 avril au 30 mai où l'estimation du RL se stabilise."} +![Estimations du risque de létalité (RL) observé biaisé confirmé en fonction du temps (ligne épaisse), calculé comme le rapport entre le nombre cumulé de décès et de cas confirmés à un instant $t$. La valeur atteinte à la fin d'une épidémie (~30 mai) est le risque de létalité observé à la fin de l'épidémie. La ligne horizontale continue et les lignes pointillées indiquent la valeur du RL prédit et leurs intervalles de confiance à 95% (IC $95%$) des valeurs prédites du taux de mortalité ajusté au délai en utilisant uniquement les données observées jusqu'au 27 mars 2003. ([Nishiura et al., 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_c.png){fig-alt="Les périodes sont pertinentes : Période 1 -- 15 jours où le RL est nul, ce qui indique qu'aucun décès n'a été signalé ; Période du 15 mars au 26 avril où le RL semble augmenter ; Période du 30 avril au 30 mai où l'estimation du RL se stabilise."} -::::::::::::::::::::::: instructeur +::::::::::::::::::::::: instructor Les périodes sont pertinentes : Période 1 -- 15 jours où le RL est nul, ce qui indique qu'aucun décès n'a été signalé ; Période du 15 mars au 26 avril où le RL semble augmenter ; Période du 30 avril au 30 mai où l'estimation du RL se stabilise. @@ -122,7 +121,7 @@ Quelles sont les sources de données qu'on peut utiliser pour estimer la gravit [Verity et al, 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(20\)30243-7/fulltext) résume le spectre des cas de COVID-19 : ![Spectre des cas de COVID-19. Le CFR vise à estimer la proportion de décès parmi les cas confirmés d'une épidémie. -([Verity et al., 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(20\)30243-7/fulltext#gr1))](../../../episodes/fig/cfr-spectrum-cases-covid19.jpg) +([Verity et al., 2020](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(20\)30243-7/fulltext#gr1))](fig/cfr-spectrum-cases-covid19.jpg) - Au sommet de la pyramide, les cas définis comme **grave** ou **critiques** selon les critères établis par l'OMS. Ces cas auraient probablement été identifiés en milieu hospitalier, présentant une pneumonie virale atypique. Ils auraient été identifiés en Chine continentale et parmi ceux classés au niveau international comme émanants d'une transmission locale. - Beaucoup d'autres sont probablement **symptomatiques** (c'est-à-dire avec de la fièvre, de la toux ou des myalgies), mais ne nécessiteront peut-être pas d'hospitalisation. Ces cas auraient été identifiés grâce à leurs liens avec des voyageurs internationaux dans des zones à haut risque et grâce à la recherche des personnes en contact avec les cas confirmés. Ils pourraient être identifiés grâce à la surveillance de la population, par exemple en cas de syndrome grippal. @@ -200,9 +199,7 @@ cfr::cfr_static(data = ebola_30days) :::::::::::::::::::::::::::::::::::::::: challenge -Téléchargez le fichier [sarscov2_cases_deaths.csv](../../../episodes/data/sarscov2_cases_deaths.csv) et importez-le dans R. Puis estimez le RL naïf. - -:::::::::::::::::::: +Téléchargez le fichier [sarscov2_cases_deaths.csv](data/sarscov2_cases_deaths.csv) et importez-le dans R. Puis estimez le RL naïf. :::::::::::::::::::: hint @@ -556,11 +553,11 @@ Les lignes rouges et bleues représentent respectivement le RL journalier ajust Les figures A et B montrent les nombres cumulés de cas et de décès dus au SARS, et la figure C montre les estimations observées (biaisées) du RL en fonction du temps, c'est-à-dire le nombre cumulé de décès par rapport au nombre de cas à l'instant $t$. En raison du délai entre l'apparition des symptômes et le décès, l'estimation biaisée du RL au temps $t$ est inférieure au RL obtenu à la fin de l'épidémie (302/1755 = 17,2 %). -![Risque observé (biaisé) de létalité des cas confirmés du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_abc.png) +![Risque observé (biaisé) de létalité des cas confirmés du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_abc.png) Néanmoins, même en n'utilisant que les données observées sur la période du 19 mars au 2 avril, `cfr::cfr_static()` peut produire une prédiction appropriée (figure D), par exemple le RL ajusté au délai au 27 mars est de 18,1% (IC 95% : 10,5 - 28,1). Une surestimation est notée au tout début de l'épidémie, mais les limites de l'intervalle de confiance à 95% pour les phases ultérieures incluent le RL réel (c'est-à-dire 17,2 %). -![Détermination précoce du risque de létalité confirmé, ajusté au délai, du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](../../../episodes/fig/cfr-pone.0006852.g003-fig_d.png) +![Détermination précoce du risque de létalité confirmé, ajusté au délai, du syndrome respiratoire aigu sévère (SARS) à Hong Kong, 2003. ([Nishiura et al, 2009](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0006852))](fig/cfr-pone.0006852.g003-fig_d.png) :::::::::::::::::::::::::::::::::: @@ -616,7 +613,7 @@ La méthode de la librairie `{cfr}` vise à obtenir un estimateur non biaisé "b ### Quel est le processus d'échantillonnage ? -![La population des cas confirmés et le processus d'échantillonnage pour l'estimation du RL non biaisé au cours d'une épidémie selon [Nishiura et al. 2009](https://doi.org/10.1371/journal.pone.0006852.g001)](../../../episodes/fig/cfr-pone.0006852.g001.png) +![La population des cas confirmés et le processus d'échantillonnage pour l'estimation du RL non biaisé au cours d'une épidémie selon [Nishiura et al. 2009](https://doi.org/10.1371/journal.pone.0006852.g001)](fig/cfr-pone.0006852.g001.png) Nous connaissons le nombre cumulé de cas confirmés et de décès $C_{t}$ et $D_{t}$ à l'instant $t$ à partir des *données d'incidence agrégées* et souhaitons estimer le RL non biaisé $\pi$ au moyen du facteur de sous-estimation $u_{t}$. @@ -682,7 +679,7 @@ De la même manière, le *risque d'hospitalisation mortelle* requière : [Yang et al, 2020](https://www.nature.com/articles/s41467-020-19238-2/figures/1) résume les différentes définitions et sources de données : -![Niveaux de gravité des infections par le SARS-CoV-2 et les paramètres d'intérêt. Chaque niveau est supposé être un sous-ensemble du niveau inférieur.](../../../episodes/fig/cfr-s41467-020-19238-2-fig_a.png) +![Niveaux de gravité des infections par le SARS-CoV-2 et les paramètres d'intérêt. Chaque niveau est supposé être un sous-ensemble du niveau inférieur.](fig/cfr-s41467-020-19238-2-fig_a.png) - sCFR risque de létalité des cas symptomatiques (sRL), - sCHR risque d'hospitalisation des cas symptomatiques (sRH), @@ -690,7 +687,7 @@ De la même manière, le *risque d'hospitalisation mortelle* requière : - mCHR risque d'hospitalisation d'un cas médicalement pris en charge (mRH), - HFR risque d'hospitalisation mortelle (RHM). -![Schéma des analyses de base. Les flèches rouges, bleues et vertes indiquent le flux de données provenant des cas confirmés en laboratoire dans le cadre de la surveillance passive, des cas diagnostiqués cliniquement et des cas confirmés en laboratoire dans le cadre des dépistages actifs.](../../../episodes/fig/cfr-s41467-020-19238-2-fig_b.png){fig-alt="Source des données sur les cas de COVID-19 à Wuhan : D1) 32 583 cas de COVID-19 confirmés en laboratoire en mars 84, D2) 17 365 cas de COVID-19 diagnostiqués cliniquement entre le 9 février et le 24 avril, D3) nombre quotidien de cas confirmés en laboratoire entre le 9 mars et le 24 avril, D4) nombre total de décès dus au COVID-19 en date du 24 avril, obtenus auprès de la Commission de la santé du Hubei3, D5) 325 cas confirmés en laboratoire et D6) 1 290 décès ont été ajoutés au 16 avril grâce à une vérification complète et systématique effectuée par les autorités de Wuhan3, et D7) 16 781 cas confirmés en laboratoire identifiés par le biais d'un dépistage universel10,11. Pse : sensibilité de la RT-PCR12. Pmed.care : proportion de patients souffrant d'infections respiratoires aiguës qui demandent une assistance médicale13."} +![Schéma des analyses de base. Les flèches rouges, bleues et vertes indiquent le flux de données provenant des cas confirmés en laboratoire dans le cadre de la surveillance passive, des cas diagnostiqués cliniquement et des cas confirmés en laboratoire dans le cadre des dépistages actifs.](fig/cfr-s41467-020-19238-2-fig_b.png){fig-alt="Source des données sur les cas de COVID-19 à Wuhan : D1) 32 583 cas de COVID-19 confirmés en laboratoire en mars 84, D2) 17 365 cas de COVID-19 diagnostiqués cliniquement entre le 9 février et le 24 avril, D3) nombre quotidien de cas confirmés en laboratoire entre le 9 mars et le 24 avril, D4) nombre total de décès dus au COVID-19 en date du 24 avril, obtenus auprès de la Commission de la santé du Hubei3, D5) 325 cas confirmés en laboratoire et D6) 1 290 décès ont été ajoutés au 16 avril grâce à une vérification complète et systématique effectuée par les autorités de Wuhan3, et D7) 16 781 cas confirmés en laboratoire identifiés par le biais d'un dépistage universel10,11. Pse : sensibilité de la RT-PCR12. Pmed.care : proportion de patients souffrant d'infections respiratoires aiguës qui demandent une assistance médicale13."} :::::::::::::::::::::::::::: @@ -873,3 +870,4 @@ Nous vous invitons à lire la [vignette sur la fonction `cfr_time_varying()`](ht - Utiliser l'argument `delay_density` pour ajuster les valeurs du RL au délai épidémiologique en fonction de la distribution des délais correspondants. :::::::::::::::::::::::::::::::::::::::::::::::: + From 3d7107b58da077b573eedc004ddb714341e23451 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 13 Oct 2025 20:08:49 +0100 Subject: [PATCH 22/29] fix installation chunk --- episodes/severity-static.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/episodes/severity-static.Rmd b/episodes/severity-static.Rmd index ad45c7c8..aacc5286 100644 --- a/episodes/severity-static.Rmd +++ b/episodes/severity-static.Rmd @@ -40,7 +40,7 @@ Les concepts abordés dans cet épisode supposent que vous êtes familiers avec Installer les packages si elles ne le sont pas déjà: -```{r} +```{r, eval = FALSE} # si {pak} n'est pas disponible, exécutez : install.packages("pak") pak::pak("cfr") pak::pak("epiparameter") @@ -48,7 +48,7 @@ pak::pak("tidyverse") pak::pak("outbreaks") ``` -Si vous recevez un message d'erreur, rendez-vous sur la [page principale de configuration](../learners/setup#configuration-des-logiciels). +Si vous recevez un message d'erreur, rendez-vous sur la [page principale de configuration](../learners/setup.md#configuration-des-logiciels). :::::::::::::: @@ -294,7 +294,7 @@ En 2009, lors de l'épidémie de grippe porcine A (H1N1), le Mexique a effectué Aux États-Unis et au Canada, aucun décès n'a été attribué au virus durant les dix jours qui ont suivi la déclaration d'urgence de santé publique par l'OMS. Même dans des circonstances similaires, au début d'une pandémie mondiale, les responsables de la santé publique, les décideurs et le grand public veulent connaître la virulence d'un agent infectieux émergent. -[Fraser et al, 2009](https://www.science.org/doi/full/10.1126/science.1176062) ont réinterprété les données en évaluant les biais et ont obtenu une gravité clinique inférieure à celle de la pandémie de grippe de 1918, mais comparable à celle observée lors de la pandémie de 1957. +[Garske et al, 2009](https://www.bmj.com/content/339/bmj.b2840) évaluer les défis afin d'estimer la gravité de cette pandémie, en soulignant que le fait de recenser avec précision les cas pour le dénominateur peut améliorer la capacité à obtenir des estimations informatives du taux de létalité. :::::::::::::::::::: From f123d4e1d04c01a0463155a6069e21474076447f Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Tue, 14 Oct 2025 15:37:07 +0100 Subject: [PATCH 23/29] add automatic translation --- episodes/create-forecast.Rmd | 246 +++++++++++++++++------------------ 1 file changed, 118 insertions(+), 128 deletions(-) diff --git a/episodes/create-forecast.Rmd b/episodes/create-forecast.Rmd index 40858433..7f369793 100644 --- a/episodes/create-forecast.Rmd +++ b/episodes/create-forecast.Rmd @@ -1,86 +1,84 @@ --- -title: 'Create a short-term forecast' +title: Établir des prévisions à court terme teaching: 30 exercises: 30 -editor_options: +editor_options: chunk_output_type: inline --- -```{r setup, echo = FALSE, warning = FALSE, message = FALSE} +```{r setup, echo=FALSE, warning=FALSE, message=FALSE} withr::local_options(base::list(mc.cores = 4)) ``` +:::::::::::::::::::::::::::::::::::::: questions -:::::::::::::::::::::::::::::::::::::: questions - -- How do I create short-term forecasts from case data? -- How do I account for incomplete reporting in forecasts? - +- Comment créer des prévisions à court terme à partir de données de cas ? +- Comment tenir compte des rapports incomplets dans les prévisions ? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Learn how to make forecasts of cases using R package `EpiNow2` -- Learn how to include an observation process in estimation +- Apprenez à faire des prévisions de cas à l'aide du progiciel R `EpiNow2` +- Apprenez à inclure un processus d'observation dans l'estimation :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +## Conditions préalables -+ Complete tutorial [Quantifying transmission](../episodes/quantify-transmissibility.md) +- Compléter le tutoriel [Quantifier la transmission](../episodes/quantify-transmissibility.md) -Learners should familiarise themselves with following concept dependencies before working through this tutorial: +Les apprenants doivent se familiariser avec les dépendances conceptuelles suivantes avant de suivre ce tutoriel : -**Statistics**: probability distributions, principle of [Bayesian analysis](../learners/reference.md#bayesian). +**Statistiques**: distributions de probabilités, principe de [Analyse bayésienne](../learners/reference.md#bayesian). -**Epidemic theory**: [Effective reproduction number](../learners/reference.md#effectiverepro). +**Théorie des épidémies**: [Nombre de reproduction effectif](../learners/reference.md#effectiverepro). ::::::::::::::::::::::::::::::::: ## Introduction -Given case data of an epidemic, we can create estimates of the current and future number of cases by accounting for both delays -in reporting and under reporting. To make predictions about the future course of the epidemic, we need to make an assumption of how -observations up to the present are related to what we expect to happen in the future. The simplest way of doing so is to assume "no change", i.e., the reproduction number remains the same in the future as last observed. In this tutorial we will create short-term [forecasts](../learners/reference.md#forecast) by assuming the reproduction number will remain the same as its estimate was on the final date for which data was available. +À partir des données relatives aux cas d'une épidémie, il est possible d'estimer le nombre actuel et futur de cas en tenant compte à la fois des retards et de l'évolution de l'épidémie. +de la déclaration et de la sous-déclaration. Pour faire des prévisions sur l'évolution future de l'épidémie, nous devons faire une hypothèse sur la façon dont les cas sont déclarés. +observations faites jusqu'à présent sont liées à ce que nous attendons à l'avenir. La façon la plus simple de procéder est de supposer qu'il n'y a pas de changement, c'est-à-dire que le nombre de reproduction reste le même à l'avenir que celui qui a été observé en dernier lieu. Dans ce tutoriel, nous créerons des [prévisions](../learners/reference.md#forecast) en supposant que le nombre de reproductions restera le même que son estimation à la dernière date pour laquelle des données étaient disponibles. -In this tutorial we are going to learn how to use the `{EpiNow2}` package to forecast cases accounting for incomplete observations and forecast secondary observations like deaths. +Dans ce tutoriel, nous allons apprendre à utiliser la fonction `{EpiNow2}` pour prévoir les cas en tenant compte des observations incomplètes et pour prévoir les observations secondaires telles que les décès. -We'll use the pipe `%>%` operator to connect functions, so let's also call to the `{tidyverse}` package: +Nous utiliserons le tuyau `%>%` pour connecter des fonctions, donc appelons aussi l'opérateur `{tidyverse}` au paquetage : ```r library(EpiNow2) library(tidyverse) ``` -```{r,echo=FALSE,eval=TRUE,message=FALSE,warning=FALSE} +```{r, echo=FALSE, eval=TRUE, message=FALSE, warning=FALSE} library(tidyverse) ``` ::::::::::::::::::: checklist -### The double-colon +### Le double point-virgule -The double-colon `::` in R let you call a specific function from a package without loading the entire package into the current environment. +Le double point-virgule `::` dans R vous permettent d'appeler une fonction spécifique d'un paquetage sans charger le paquetage entier dans l'environnement actuel. -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +Par exemple, vous pouvez appeler une fonction spécifique d'un paquet sans charger le paquet entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir de l'outil `{dplyr}` paquet. -This helps us remember package functions and avoid namespace conflicts. +Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les conflits d'espace de noms. ::::::::::::::::::: -## Create a short-term forecast +## Créez une prévision à court terme -The function `epinow()` described in the [quantifying transmission](../episodes/quantify-transmissibility.md) episode is a wrapper for the functions: +La fonction `epinow()` décrite dans le [quantifier la transmission](../episodes/quantify-transmissibility.md) est une enveloppe pour les fonctions : -- `estimate_infections()` used to estimate cases by date of infection. -- `forecast_infections()` used to simulate infections using an existing fit (estimate) to observed cases. +- `estimate_infections()` utilisées pour estimer le nombre de cas par date d'infection. +- `forecast_infections()` utilisé pour simuler des infections à l'aide d'un ajustement existant (estimation) aux cas observés. -Let's use the same code used in [quantifying transmission](../episodes/quantify-transmissibility.md) episode to get the input data, delays and priors: +Utilisons le même code que celui utilisé dans [quantifier la transmission](../episodes/quantify-transmissibility.md) pour obtenir les données d'entrée, les délais et les priorités : -```{r, echo = TRUE} +```{r, echo=TRUE} # Read cases dataset cases <- incidence2::covidregionaldataUK %>% # use {tidyr} to preprocess missing values @@ -126,9 +124,9 @@ generation_time_fixed <- EpiNow2::LogNormal( rt_prior <- EpiNow2::rt_opts(prior = EpiNow2::LogNormal(mean = 2, sd = 2)) ``` -Now we can extract the short-term forecast using: +Nous pouvons maintenant extraire les prévisions à court terme à l'aide de : -```{r, message = FALSE, warning=FALSE, eval = TRUE} +```{r, message=FALSE, warning=FALSE, eval=TRUE} # Assume we only have the first 90 days of this data reported_cases <- cases %>% dplyr::slice(1:90) @@ -144,39 +142,38 @@ estimates <- EpiNow2::epinow( ::::::::::::::::::::::::::::::::: callout -### Do not wait for this to complete! +### N'attendez pas que cela se termine ! -This last chunk may take 10 minutes to run. Keep reading this tutorial episode while this runs in the background. For more information on computing time, read the "Bayesian inference using Stan" section within the [quantifying transmission](../episodes/quantify-transmissibility.md) episode. +Ce dernier morceau peut prendre 10 minutes à s'exécuter. Continuez à lire cet épisode du tutoriel pendant qu'il s'exécute en arrière-plan. Pour plus d'informations sur le temps de calcul, lisez la section "Inférence bayésienne à l'aide de Stan" dans la section [quantifier la transmission](../episodes/quantify-transmissibility.md) de quantification de la transmission. ::::::::::::::::::::::::::::::::: -We can visualise the estimates of the effective reproduction number and the estimated number of cases using `plot()`. The estimates are split into three categories: +Nous pouvons visualiser les estimations du nombre de reproductions effectives et du nombre estimé de cas à l'aide de `plot()`. Les estimations sont réparties en trois catégories : -+ **Estimate** (green): utilises all data, +- **Estimation** (vert) : utilise toutes les données, -+ **Estimate based on partial data** (orange): contains a higher degree of uncertainty because such estimates are based on less data, - -+ **Forecast** (purple): forecasts into the future. +- **Estimation basée sur des données partielles** (orange) : contient un degré d'incertitude plus élevé car ces estimations sont basées sur moins de données, +- **Prévision** (violet) : prévisions pour l'avenir. ```{r} plot(estimates) ``` -### Forecasting with incomplete observations +### Prévision avec des observations incomplètes -In the [quantifying transmission](../episodes/quantify-transmissibility.md) episode we accounted for delays in reporting. In `EpiNow2` we also can account for incomplete observations as in reality, 100% of cases are not reported. -We will pass an additional argument called `obs` into the `epinow()` function to define an observation model. The format of `obs` is defined by the `obs_opt()` function (see `?EpiNow2::obs_opts` for more detail). +Dans le cadre de la [quantifier la transmission](../episodes/quantify-transmissibility.md) nous avons tenu compte des délais de déclaration. Dans l'épisode de quantification de la transmission, nous avons tenu compte des retards de déclaration. `EpiNow2` nous pouvons également tenir compte des observations incomplètes, car dans la réalité, 100 % des cas ne sont pas déclarés. +Nous passerons un argument supplémentaire appelé `obs` dans le `epinow()` pour définir un modèle d'observation. Le format de `obs` est défini par la fonction `obs_opt()` (voir `?EpiNow2::obs_opts` pour plus de détails). -Let's say we believe the COVID-19 outbreak data in the `cases` object do not include all reported cases. We estimate that only 40% of actual cases are reported. To specify this in the observation model, we must pass a scaling factor with a mean and standard deviation. If we assume that 40% of cases are reported (with standard deviation 1%), then we specify the `scale` input to `obs_opts()` as follows: +Supposons que nous croyons que les données de l'épidémie COVID-19 dans l'article `cases` n'incluent pas tous les cas déclarés. Nous estimons que seuls 40 % des cas réels sont déclarés. Pour spécifier cela dans le modèle d'observation, nous devons passer un facteur d'échelle avec une moyenne et un écart type. Si nous supposons que 40 % des cas sont déclarés (avec un écart-type de 1 %), nous spécifions alors le facteur d'échelle `scale` à `obs_opts()` comme suit : ```{r} obs_scale <- EpiNow2::Normal(mean = 0.4, sd = 0.01) ``` -To run the inference framework with this observation process, we add `obs = obs_opts(scale = obs_scale)` to the input arguments of `epinow()`: +Pour exécuter le cadre d'inférence avec ce processus d'observation, nous ajoutons `obs = obs_opts(scale = obs_scale)` aux arguments d'entrée de `epinow()`: -```{r, message = FALSE,warning=FALSE, eval = TRUE} +```{r, message=FALSE, warning=FALSE, eval=TRUE} # Define observation model obs_scale <- EpiNow2::Normal(mean = 0.4, sd = 0.01) @@ -197,30 +194,29 @@ estimates <- EpiNow2::epinow( base::summary(estimates) ``` +Les estimations des mesures de transmission telles que le nombre de reproduction efficace et le taux de croissance sont similaires (ou de même valeur) par rapport à la situation où nous n'avons pas tenu compte des observations incomplètes (voir [quantifier l'épisode de transmission](../episodes/quantify-transmissibility.md) dans la section "Recherche d'estimations"). Cependant, le nombre de nouveaux cas confirmés par date d'infection a considérablement changé d'ampleur pour refléter l'hypothèse selon laquelle seuls 40 % des cas sont déclarés. -The estimates of transmission measures such as the effective reproduction number and rate of growth are similar (or the same in value) compared to when we didn't account for incomplete observations (see [quantifying transmission episode](../episodes/quantify-transmissibility.md) in the "Finding estimates" section). However the number of new confirmed cases by infection date has changed substantially in magnitude to reflect the assumption that only 40% of cases are reported. - -We can also change the default distribution from Negative Binomial to Poisson, remove the default week effect (which accounts for weekly patterns in reporting) and more. See `?EpiNow2::obs_opts` for more details. +Nous pouvons également changer la distribution par défaut de Binomiale négative à Poisson, supprimer l'effet de semaine par défaut (qui tient compte des schémas hebdomadaires de déclaration) et bien d'autres choses encore. Voir `?EpiNow2::obs_opts` pour plus de détails. ::::::::::::::::::::::::::: discussion -### What are the implications of this change? +### Quelles sont les implications de ce changement ? -- Compare different percents of observations % -- How are they different in the number of infections estimated? -- What are the public health implications of this change? +- Comparer différents pourcentages d'observations % +- En quoi diffèrent-ils en ce qui concerne le nombre d'infections estimées ? +- Quelles sont les implications de ce changement pour la santé publique ? ::::::::::::::::::::::::::: -## Forecasting secondary observations +## Prévision des observations secondaires -`EpiNow2` also has the ability to estimate and forecast secondary observations, e.g., deaths and hospitalisations, from a primary observation, e.g., cases. Here we will illustrate how to forecast the number of deaths arising from observed cases of COVID-19 in the early stages of the UK outbreak. +`EpiNow2` L'outil de prévision de l'épidémie de COVID-19 permet également d'estimer et de prévoir les observations secondaires, par exemple les décès et les hospitalisations, à partir d'une observation primaire, par exemple le nombre de cas. Nous illustrerons ici comment prévoir le nombre de décès découlant des cas observés de COVID-19 dans les premiers stades de l'épidémie au Royaume-Uni. -First, we must format our data to have the following columns: +Tout d'abord, nous devons formater nos données de manière à ce qu'elles comportent les colonnes suivantes : -+ `date`: the date (as a date object see `?is.Date()`), -+ `primary`: number of primary observations on that date, in this example **cases**, -+ `secondary`: number of secondary observations date, in this example **deaths**. +- `date` la date (en tant qu'objet date, voir `?is.Date()`), +- `primary`: nombre d'observations primaires à cette date, dans cet exemple **cas**, +- `secondary`: nombre de dates d'observations secondaires, dans cet exemple **décès**. ```{r} reported_cases_deaths <- incidence2::covidregionaldataUK %>% @@ -237,7 +233,7 @@ reported_cases_deaths <- incidence2::covidregionaldataUK %>% pivot_wider(names_from = count_variable, values_from = count) ``` -```{r,echo=FALSE,fig.cap="Distribution of secondary cases (deaths). We will drop the first 30 days with no observed deaths. We will use the deaths between day 31 and day 60 to estimate the secondary observations. We will forecast deaths from day 61 to day 90."} +```{r, echo=FALSE, fig.cap="Distribution of secondary cases (deaths). We will drop the first 30 days with no observed deaths. We will use the deaths between day 31 and day 60 to estimate the secondary observations. We will forecast deaths from day 61 to day 90."} # distribution of secondary observations estimate_forecast <- reported_cases_deaths %>% @@ -283,21 +279,22 @@ ggplot2::ggplot() + NULL ``` -Using the data on cases and deaths between day 31 and day 60, we will estimate the relationship between the primary and secondary observations using `estimate_secondary()`, then forecast future deaths using `forecast_secondary()`. For more details on the model see the [model documentation](https://epiforecasts.io/EpiNow2/dev/articles/estimate_secondary.html). +En utilisant les données sur les cas et les décès entre le 31e et le 60e jour, nous estimerons la relation entre les observations primaires et secondaires à l'aide de la méthode suivante `estimate_secondary()` puis nous prévoyons les décès futurs à l'aide de `forecast_secondary()`. Pour plus de détails sur le modèle, voir le [documentation du modèle](https://epiforecasts.io/EpiNow2/dev/articles/estimate_secondary.html). -We must specify the type of observation using `type` in `secondary_opts()`, options include: +Nous devons spécifier le type d'observation en utilisant `type` en `secondary_opts()` Les options sont les suivantes : -+ "incidence": secondary observations arise from previous primary observations, i.e., deaths arising from recorded cases. -+ "prevalence": secondary observations arise from a combination current primary observations and past secondary observations, i.e., hospital bed usage arising from current hospital admissions and past hospital bed usage. +- "incidence" : les observations secondaires découlent d'observations primaires antérieures, c'est-à-dire de décès survenus à la suite de cas enregistrés. +- "prévalence" : les observations secondaires résultent d'une combinaison d'observations primaires actuelles et d'observations secondaires antérieures, c'est-à-dire l'utilisation des lits d'hôpitaux à partir des admissions actuelles à l'hôpital et de l'utilisation passée des lits d'hôpitaux. -In this example we specify `secondary_opts(type = "incidence")`. See `?EpiNow2::secondary_opts` for more detail. +Dans cet exemple, nous spécifions `secondary_opts(type = "incidence")`. Voir `?EpiNow2::secondary_opts` pour plus de détails. -The final key input is the delay distribution between the primary and secondary observations. Here this is the delay between case report and death, we assume this follows a gamma distribution with mean of 14 days and standard deviation of 5 days (Alternatively, we can use `{epiparameter}` to [access epidemiological delays](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html)). Using `Gamma()` we specify a fixed gamma distribution. +La dernière donnée clé est la distribution des délais entre les observations primaires et secondaires. Il s'agit ici du délai entre le signalement du cas et le décès. Nous supposons que ce délai suit une distribution gamma avec une moyenne de 14 jours et un écart-type de 5 jours. `{epiparameter}` pour [accéder aux délais épidémiologiques](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html)). L'utilisation de `Gamma()` nous spécifions une distribution gamma fixe. -There are further function inputs to `estimate_secondary()` which can be specified, including adding an observation process, see `?EpiNow2::estimate_secondary` for detail on these options. +Il existe d'autres fonctions d'entrée pour `estimate_secondary()` qui peuvent être spécifiées, y compris l'ajout d'un processus d'observation, voir `?EpiNow2::estimate_secondary` pour plus de détails sur ces options. -To find the model fit between cases and deaths: -```{r,warning=FALSE,message=FALSE} +Pour trouver l'ajustement du modèle entre les cas et les décès : + +```{r, warning=FALSE, message=FALSE} # Estimate from day 31 to day 60 of this data cases_to_estimate <- reported_cases_deaths %>% slice(31:60) @@ -317,24 +314,24 @@ estimate_cases_to_deaths <- EpiNow2::estimate_secondary( ) ``` - ::::::::::::::::::::::::::::::::::::: callout -### Be cautious of time-scale +### Soyez prudent avec l'échelle de temps -In the early stages of an outbreak there can be substantial changes in testing and reporting. If there are testing changes from one month to another, then there will be a bias in the model fit. Therefore, you should be cautious of the time-scale of data used in the model fit and forecast. +Au début d'une épidémie, il peut y avoir des changements substantiels dans les tests et les rapports. Si les tests changent d'un mois à l'autre, l'ajustement du modèle sera biaisé. Vous devez donc être prudent quant à l'échelle temporelle des données utilisées dans l'ajustement du modèle et les prévisions. :::::::::::::::::::::::::::::::::::::::::::::::: -We plot the model fit (shaded ribbons) with the secondary observations (bar plot) and primary observations (dotted line) as follows: +Nous représentons l'ajustement du modèle (rubans ombrés) avec les observations secondaires (diagramme à barres) et les observations primaires (ligne pointillée) comme suit : ```{r} plot(estimate_cases_to_deaths, primary = TRUE) ``` -To use this model fit to forecast deaths, we pass a data frame consisting of the primary observation (cases) for dates not used in the model fit. +Pour utiliser cet ajustement de modèle afin de prévoir les décès, nous passons un cadre de données composé de l'observation primaire (cas) pour les dates non utilisées dans l'ajustement de modèle. + +*Remarque : dans cet épisode, nous utilisons des données dont nous connaissons les décès et les cas, nous créons donc une base de données en extrayant les cas. Mais dans la pratique, il s'agirait d'un ensemble de données différent composé uniquement de cas.* -*Note : in this episode we are using data where we know the deaths and cases, so we create a data frame by extracting the cases. But in practice, this would be a different data set consisting of cases only.* ```{r} # Forecast from day 61 to day 90 cases_to_forecast <- reported_cases_deaths %>% @@ -342,9 +339,9 @@ cases_to_forecast <- reported_cases_deaths %>% dplyr::mutate(value = primary) ``` -To forecast, we use the model fit `estimate_cases_to_deaths`: +Pour faire des prévisions, nous utilisons l'ajustement du modèle `estimate_cases_to_deaths`: -```{r,warning=FALSE,message=FALSE} +```{r, warning=FALSE, message=FALSE} # Forecast secondary cases deaths_forecast <- EpiNow2::forecast_secondary( estimate = estimate_cases_to_deaths, @@ -354,62 +351,60 @@ deaths_forecast <- EpiNow2::forecast_secondary( plot(deaths_forecast) ``` -The plot shows the forecast secondary observations (deaths) over the dates which we have recorded cases for. -It is also possible to forecast deaths using forecast cases, here you would specify `primary` as the `estimates` output from `estimate_infections()`. - +Le graphique montre les observations secondaires prévues (décès) pour les dates pour lesquelles nous avons enregistré des cas. +Il est également possible de prévoir les décès à l'aide des cas prévus ; dans ce cas, vous devez spécifier `primary` comme `estimates` sortie de `estimate_infections()`. :::::::::::::::::::::::::: callout -### Credible intervals +### Intervalles crédibles -In all `{EpiNow2}` output figures, shaded regions reflect 90%, 50%, and 20% credible intervals in order from lightest to darkest. +Dans tous les cas `{EpiNow2}` les régions ombrées reflètent les intervalles de crédibilité de 90 %, 50 % et 20 %, dans l'ordre du plus clair au plus foncé. :::::::::::::::::::::::::: -## Challenge: Ebola outbreak analysis +## Défi : Analyse de l'épidémie d'Ebola ::::::::::::::::::::::::::::::::::::: challenge -Download the file [`ebola_cases.csv`](data/ebola_cases.csv) and read it into R. The simulated data consists of the date of symptom onset and number of confirmed cases of the early stages of the Ebola outbreak in Sierra Leone in 2014. +Téléchargez le fichier [`ebola_cases.csv`](data/ebola_cases.csv) et lisez-le dans R. Les données simulées sont la date d'apparition des symptômes et le nombre de cas confirmés aux premiers stades de l'épidémie d'Ebola en Sierra Leone en 2014. -Using the first 3 months (120 days) of data: +En utilisant les 3 premiers mois (120 jours) de données : -1. Estimate whether cases are increasing or decreasing on day 120 of the outbreak -2. Account for a capacity to observe 80% of cases. -2. Create a two week forecast of number of cases. +1. Estimez si les cas augmentent ou diminuent au 120e jour de l'épidémie. +2. Tenir compte d'une capacité d'observation de 80 % des cas. +3. Établissez une prévision à deux semaines du nombre de cas. -You can use the following parameter values for the delay distribution(s) and generation time distribution. +Vous pouvez utiliser les valeurs de paramètres suivantes pour la (les) distribution(s) des délais et la distribution du temps de génération. -+ Incubation period: Log normal$(2.487,0.330)$ ([Eichner et al. 2011](https://doi.org/10.1016/j.phrp.2011.04.001) via `{epiparameter}`) -+ Generation time: Gamma$(15.3, 10.1)$ ([WHO Ebola Response Team 2014](https://www.nejm.org/doi/full/10.1056/NEJMoa1411100)) +- Période d'incubation : Log normal$(2.487,0.330)$ ([Eichner et al. 2011](https://doi.org/10.1016/j.phrp.2011.04.001) via `{epiparameter}`) +- Temps de génération : Gamma$(15.3, 10.1)$ ([Équipe d'intervention de l'OMS contre Ebola 2014](https://www.nejm.org/doi/full/10.1056/NEJMoa1411100)) -You may include some uncertainty around the mean and standard deviation of these distributions. +Vous pouvez inclure une certaine incertitude autour de la moyenne et de l'écart-type de ces distributions. ::::::::::::::::: hint -We use the effective reproduction number and growth rate to estimate whether cases are increasing or decreasing. +Nous utilisons le nombre de reproduction effectif et le taux de croissance pour estimer si les cas augmentent ou diminuent. -We can use the `horizon` argument within the `forecast_opts()` provided to `forecast` argument in `epinow()` function to extend the time period of the forecast. The default value is of seven days. +Nous pouvons utiliser le `horizon` à l'intérieur de la `forecast_opts()` fourni pour `forecast` argument dans `epinow()` pour étendre la durée de la prévision. La valeur par défaut est de sept jours. -Ensure the data is in the correct format : +Assurez-vous que les données sont au bon format : -+ `date`: the date (as a date object see `?is.Date()`), -+ `confirm`: number of confirmed cases on that date. +- `date` la date (en tant qu'objet de date, voir `?is.Date()`), +- `confirm` nombre de cas confirmés à cette date. :::::::::::::::::::::: - ::::::::::::::::: solution ### SOLUTION -To estimate the effective reproduction number and growth rate, we will use the function `epinow()`. +Pour estimer le nombre de reproductions effectives et le taux de croissance, nous utiliserons la fonction `epinow()`. -As the data consists of date of symptom onset, we only need to specify a delay distribution for the incubation period and the generation time. +Les données étant constituées de la date d'apparition des symptômes, il nous suffit de spécifier une distribution des retards pour la période d'incubation et le temps de génération. -We specify the distributions with some uncertainty around the mean and standard deviation of the log normal distribution for the incubation period and the Gamma distribution for the generation time. +Nous spécifions les distributions avec une certaine incertitude autour de la moyenne et de l'écart-type de la distribution log-normale pour la période d'incubation et de la distribution Gamma pour le temps de génération. -```{r,eval=TRUE,echo=TRUE,warning=FALSE,message=FALSE} +```{r, eval=TRUE, echo=TRUE, warning=FALSE, message=FALSE} epiparameter::epiparameter_db( disease = "ebola", epi_name = "incubation" @@ -443,14 +438,14 @@ ebola_generation_time <- EpiNow2::Gamma( ) ``` -We read the data input using `readr::read_csv()`. This function recognize that the column `date` is a `` class vector. +Nous lisons les données en utilisant `readr::read_csv()`. Cette fonction reconnaît que la colonne `date` est une `` vecteur de classe. -```{r, eval=TRUE,echo=FALSE,warning=FALSE,message=FALSE} +```{r, eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE} # read data from the tutorial repository R project ebola_cases_raw <- readr::read_csv(file.path("data", "ebola_cases.csv")) ``` -```{r,eval=FALSE,echo=TRUE,warning=FALSE,message=FALSE} +```{r, eval=FALSE, echo=TRUE, warning=FALSE, message=FALSE} # read data # e.g.: if path to file is data/raw-data/ebola_cases.csv then: ebola_cases_raw <- readr::read_csv( @@ -458,7 +453,7 @@ ebola_cases_raw <- readr::read_csv( ) ``` -Preprocess and adapt the raw data for `{EpiNow2}`: +Prétraiter et adapter les données brutes pour `{EpiNow2}`: ```{r} ebola_cases <- ebola_cases_raw %>% @@ -477,8 +472,7 @@ ebola_cases <- ebola_cases_raw %>% dplyr::as_tibble(ebola_cases) ``` - -We define an observation model to scale the estimated and forecast number of new infections: +Nous définissons un modèle d'observation pour mettre à l'échelle le nombre estimé et prévu de nouvelles infections : ```{r} # Define observation model @@ -486,9 +480,9 @@ We define an observation model to scale the estimated and forecast number of new ebola_obs_scale <- EpiNow2::Normal(mean = 0.8, sd = 0.01) ``` -As we want to also create a two week forecast, we specify `horizon = 14` to forecast 14 days instead of the default 7 days. +Comme nous voulons également créer une prévision sur deux semaines, nous spécifions `horizon = 14` pour prévoir 14 jours au lieu des 7 jours par défaut. -```{r,eval=TRUE,echo=TRUE, message = FALSE} +```{r, eval=TRUE, echo=TRUE, message=FALSE} ebola_estimates <- EpiNow2::epinow( data = ebola_cases %>% dplyr::slice(1:120), # first 3 months of data only generation_time = EpiNow2::generation_time_opts(ebola_generation_time), @@ -502,47 +496,43 @@ ebola_estimates <- EpiNow2::epinow( summary(ebola_estimates) ``` -The effective reproduction number $R_t$ estimate (on the last date of the data) is `r summary(ebola_estimates)[measure=="Effective reproduction no."]$estimate`. The exponential growth rate of case numbers is `r summary(ebola_estimates)[measure=="Rate of growth"]$estimate`. +Le numéro de reproduction effectif $R_t$ (à la dernière date des données) est de `r summary(ebola_estimates)[measure=="Effective reproduction no."]$estimate`. Le taux de croissance exponentiel du nombre de cas est de `r summary(ebola_estimates)[measure=="Rate of growth"]$estimate`. -Visualize the estimates: +Visualisez les estimations : -```{r,eval=FALSE,echo=TRUE} +```{r, eval=FALSE, echo=TRUE} plot(ebola_estimates) ``` ::::::::::::::::::::::::::: - :::::::::::::::::::::::::::::::::::::::::::::::: - ::::::::::::::::::::::::::::::::::::: callout -### Forecasting with estimates of $R_t$ +### Prévision avec des estimations de $R_t$ -By default, the short-term forecasts are created using the latest estimate of the reproduction number $R_t$. As this estimate is based on partial data, it has considerable uncertainty. +Par défaut, les prévisions à court terme sont créées en utilisant la dernière estimation du nombre de reproductions $R_t$. Cette estimation étant basée sur des données partielles, elle présente une grande incertitude. -The reproduction number that is projected into the future can be changed to a less recent estimate based on more data using `rt_opts()`: +Le nombre de reproductions projeté dans le futur peut être remplacé par une estimation moins récente, basée sur des données plus nombreuses, à l'aide de `rt_opts()`: -```{r, eval = FALSE} +```{r, eval=FALSE} EpiNow2::rt_opts(future = "estimate") ``` -The result will be less uncertain forecasts (as they are based on $R_t$ with a narrower uncertainty interval) but the forecasts will be based on less recent estimates of $R_t$ and assume no change since then. +Il en résultera des prévisions moins incertaines (puisqu'elles sont basées sur les données de l $R_t$ avec un intervalle d'incertitude plus étroit), mais les prévisions seront basées sur des estimations moins récentes de $R_t$ et supposeront qu'il n'y a pas eu de changement depuis lors. -Additionally, there is the option to [project](../learners/reference.md#projection) the value of $R_t$ into the future using a generic model by setting `future = "project"`. As this option uses a model to forecast the value of $R_t$, the result will be forecasts that are more uncertain than `estimate`, for an example [see here](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections_options.html#projecting-the-reproduction-number-with-the-gaussian-process). +En outre, il est possible de [projeter](../learners/reference.md#projection) la valeur de $R_t$ dans le futur à l'aide d'un modèle générique en fixant `future = "project"`. Comme cette option utilise un modèle pour prévoir la valeur de $R_t$ il en résultera des prévisions plus incertaines que la valeur de `estimate` pour un exemple [voir ici](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections_options.html#projecting-the-reproduction-number-with-the-gaussian-process). :::::::::::::::::::::::::::::::::::::::::::::::: -## Summary - -`EpiNow2` can be used to create short term forecasts and to estimate the relationship between different outcomes. There are a range of model options that can be implemented for different analysis, including adding an observational process to account for incomplete reporting. See the [vignette](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections_options.html) for more details on different model options in `EpiNow2` that aren't covered in these tutorials. - +## Résumé -::::::::::::::::::::::::::::::::::::: keypoints +`EpiNow2` peut être utilisé pour créer des prévisions à court terme et pour estimer la relation entre différents résultats. Il existe une série d'options de modèle qui peuvent être mises en œuvre pour différentes analyses, y compris l'ajout d'un processus d'observation pour tenir compte des déclarations incomplètes. Voir le site web de l'Agence européenne pour la sécurité et la santé au travail. [vignette](https://epiforecasts.io/EpiNow2/dev/articles/estimate_infections_options.html) pour plus de détails sur les différentes options de modèle dans `EpiNow2` qui ne sont pas abordées dans ces tutoriels. -- We can create short-term forecasts by making assumptions about the future behaviour of the reproduction number -- Incomplete case reporting can be accounted for in estimates +::::::::::::::::::::::::::::::::::::: keypoints +- Nous pouvons créer des prévisions à court terme en faisant des hypothèses sur le comportement futur du nombre de reproduction. +- Les estimations peuvent tenir compte des déclarations de cas incomplètes. :::::::::::::::::::::::::::::::::::::::::::::::: From 87be40fd1f7121b1631e8f46d1e16a12d9952d80 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Tue, 14 Oct 2025 15:37:36 +0100 Subject: [PATCH 24/29] activate episode --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index be8a2ec5..d92a5d58 100644 --- a/config.yaml +++ b/config.yaml @@ -62,7 +62,7 @@ episodes: - delays-access.Rmd - quantify-transmissibility.Rmd - delays-functions.Rmd -#- create-forecast.Rmd +- create-forecast.Rmd - severity-static.Rmd #- superspreading-estimate.Rmd #- superspreading-simulate.Rmd From 046f23bec527f30ae4187286f9bf1bd938bd249e Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Mon, 20 Oct 2025 14:44:37 +0100 Subject: [PATCH 25/29] udpate text in forecast episode --- episodes/create-forecast.Rmd | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/episodes/create-forecast.Rmd b/episodes/create-forecast.Rmd index 7f369793..aed311ea 100644 --- a/episodes/create-forecast.Rmd +++ b/episodes/create-forecast.Rmd @@ -19,8 +19,8 @@ withr::local_options(base::list(mc.cores = 4)) ::::::::::::::::::::::::::::::::::::: objectives -- Apprenez à faire des prévisions de cas à l'aide du progiciel R `EpiNow2` -- Apprenez à inclure un processus d'observation dans l'estimation +- Apprendre à faire des prévisions de cas à l'aide du logiciel R `EpiNow2` +- Apprendre à inclure un processus d'observation dans l'estimation :::::::::::::::::::::::::::::::::::::::::::::::: @@ -32,7 +32,7 @@ withr::local_options(base::list(mc.cores = 4)) Les apprenants doivent se familiariser avec les dépendances conceptuelles suivantes avant de suivre ce tutoriel : -**Statistiques**: distributions de probabilités, principe de [Analyse bayésienne](../learners/reference.md#bayesian). +**Statistiques**: distributions de probabilités, principe d’ [Analyse bayésienne](../learners/reference.md#bayesian). **Théorie des épidémies**: [Nombre de reproduction effectif](../learners/reference.md#effectiverepro). @@ -40,9 +40,7 @@ Les apprenants doivent se familiariser avec les dépendances conceptuelles suiva ## Introduction -À partir des données relatives aux cas d'une épidémie, il est possible d'estimer le nombre actuel et futur de cas en tenant compte à la fois des retards et de l'évolution de l'épidémie. -de la déclaration et de la sous-déclaration. Pour faire des prévisions sur l'évolution future de l'épidémie, nous devons faire une hypothèse sur la façon dont les cas sont déclarés. -observations faites jusqu'à présent sont liées à ce que nous attendons à l'avenir. La façon la plus simple de procéder est de supposer qu'il n'y a pas de changement, c'est-à-dire que le nombre de reproduction reste le même à l'avenir que celui qui a été observé en dernier lieu. Dans ce tutoriel, nous créerons des [prévisions](../learners/reference.md#forecast) en supposant que le nombre de reproductions restera le même que son estimation à la dernière date pour laquelle des données étaient disponibles. +À partir des données relatives aux cas d' épidémie, il est possible d'estimer le nombre actuel et futur de cas en tenant compte à la fois des délais de la déclaration et de la sous-déclaration. Pour faire des prévisions sur l'évolution future de l'épidémie, nous devons émettre une hypothèse sur la façon dont les observations faites jusqu'à présent sont liées à ce que nous attendons à l'avenir. La façon la plus simple de procéder est de supposer qu'il n'y a pas de changement, c'est-à-dire que le nombre de reproduction restera le même à l’avenir qu'au moment de la dernière observation. Dans ce tutoriel, nous établirons des [prévisions](../learners/reference.md#forecast) en supposant que le nombre de reproductions restera le même que son estimation à la dernière date pour laquelle des données étaient disponibles. Dans ce tutoriel, nous allons apprendre à utiliser la fonction `{EpiNow2}` pour prévoir les cas en tenant compte des observations incomplètes et pour prévoir les observations secondaires telles que les décès. @@ -61,7 +59,7 @@ library(tidyverse) ### Le double point-virgule -Le double point-virgule `::` dans R vous permettent d'appeler une fonction spécifique d'un paquetage sans charger le paquetage entier dans l'environnement actuel. +Le double point-virgule `::` dans R vous permet d'appeler une fonction spécifique d'un paquet sans charger l'intégralité du paquet dans l'environnement actuel. Par exemple, vous pouvez appeler une fonction spécifique d'un paquet sans charger le paquet entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir de l'outil `{dplyr}` paquet. @@ -71,12 +69,12 @@ Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les confl ## Créez une prévision à court terme -La fonction `epinow()` décrite dans le [quantifier la transmission](../episodes/quantify-transmissibility.md) est une enveloppe pour les fonctions : +La fonction `epinow()` décrite dans l’épisode [quantifier la transmission](../episodes/quantify-transmissibility.md) est une enveloppe pour les fonctions : -- `estimate_infections()` utilisées pour estimer le nombre de cas par date d'infection. -- `forecast_infections()` utilisé pour simuler des infections à l'aide d'un ajustement existant (estimation) aux cas observés. +- `estimate_infections()` utilisée pour estimer le nombre de cas par date d'infection. +- `forecast_infections()` utilisée pour simuler des infections à l'aide d'un ajustement existant (estimation) aux cas observés. -Utilisons le même code que celui utilisé dans [quantifier la transmission](../episodes/quantify-transmissibility.md) pour obtenir les données d'entrée, les délais et les priorités : +Utilisons le même code que celui utilisé dans l’épisode [quantifier la transmission](../episodes/quantify-transmissibility.md) pour obtenir les données d'entrée, les délais et les priorités : ```{r, echo=TRUE} # Read cases dataset @@ -144,7 +142,7 @@ estimates <- EpiNow2::epinow( ### N'attendez pas que cela se termine ! -Ce dernier morceau peut prendre 10 minutes à s'exécuter. Continuez à lire cet épisode du tutoriel pendant qu'il s'exécute en arrière-plan. Pour plus d'informations sur le temps de calcul, lisez la section "Inférence bayésienne à l'aide de Stan" dans la section [quantifier la transmission](../episodes/quantify-transmissibility.md) de quantification de la transmission. +Ce dernier morceau peut prendre 10 minutes à s'exécuter. Continuez à lire cet épisode du tutoriel pendant qu'il s'exécute en arrière-plan. Pour plus d'informations sur le temps de calcul, lisez la section "Inférence bayésienne à l'aide de Stan" dans la section [quantification de la transmission](../episodes/quantify-transmissibility.md). ::::::::::::::::::::::::::::::::: @@ -162,10 +160,10 @@ plot(estimates) ### Prévision avec des observations incomplètes -Dans le cadre de la [quantifier la transmission](../episodes/quantify-transmissibility.md) nous avons tenu compte des délais de déclaration. Dans l'épisode de quantification de la transmission, nous avons tenu compte des retards de déclaration. `EpiNow2` nous pouvons également tenir compte des observations incomplètes, car dans la réalité, 100 % des cas ne sont pas déclarés. +Dans l’épisode de la [quantification de la transmission](../episodes/quantify-transmissibility.md) nous avons tenu compte des délais de déclaration. Dans `EpiNow2`, nous pouvons également tenir compte des observations incomplètes, car dans la réalité, 100 % des cas ne sont pas déclarés. Nous passerons un argument supplémentaire appelé `obs` dans le `epinow()` pour définir un modèle d'observation. Le format de `obs` est défini par la fonction `obs_opt()` (voir `?EpiNow2::obs_opts` pour plus de détails). -Supposons que nous croyons que les données de l'épidémie COVID-19 dans l'article `cases` n'incluent pas tous les cas déclarés. Nous estimons que seuls 40 % des cas réels sont déclarés. Pour spécifier cela dans le modèle d'observation, nous devons passer un facteur d'échelle avec une moyenne et un écart type. Si nous supposons que 40 % des cas sont déclarés (avec un écart-type de 1 %), nous spécifions alors le facteur d'échelle `scale` à `obs_opts()` comme suit : +Supposons que nous estimions que les données de l'épidémie COVID-19 dans l'objet `cases` n'incluent pas tous les cas déclarés. Nous estimons que seuls 40 % des cas réels sont déclarés. Pour spécifier cela dans le modèle d'observation, nous devons passer un facteur d'échelle avec une moyenne et un écart type. Si nous supposons que 40 % des cas sont déclarés (avec un écart-type de 1 %), nous spécifions alors le facteur d'échelle `scale` à `obs_opts()` comme suit : ```{r} obs_scale <- EpiNow2::Normal(mean = 0.4, sd = 0.01) @@ -194,7 +192,7 @@ estimates <- EpiNow2::epinow( base::summary(estimates) ``` -Les estimations des mesures de transmission telles que le nombre de reproduction efficace et le taux de croissance sont similaires (ou de même valeur) par rapport à la situation où nous n'avons pas tenu compte des observations incomplètes (voir [quantifier l'épisode de transmission](../episodes/quantify-transmissibility.md) dans la section "Recherche d'estimations"). Cependant, le nombre de nouveaux cas confirmés par date d'infection a considérablement changé d'ampleur pour refléter l'hypothèse selon laquelle seuls 40 % des cas sont déclarés. +Les estimations des mesures de transmission telles que le nombre de reproduction efficace et le taux de croissance sont similaires (ou de même valeur) par rapport à la situation où nous n'avons pas tenu compte des observations incomplètes (voir [l'épisode de quantification de la transmission](../episodes/quantify-transmissibility.md) dans la section "Recherche d'estimations"). Cependant, le nombre de nouveaux cas confirmés par date d'infection a considérablement changé d'ampleur pour refléter l'hypothèse selon laquelle seuls 40 % des cas sont déclarés. Nous pouvons également changer la distribution par défaut de Binomiale négative à Poisson, supprimer l'effet de semaine par défaut (qui tient compte des schémas hebdomadaires de déclaration) et bien d'autres choses encore. Voir `?EpiNow2::obs_opts` pour plus de détails. @@ -210,11 +208,11 @@ Nous pouvons également changer la distribution par défaut de Binomiale négati ## Prévision des observations secondaires -`EpiNow2` L'outil de prévision de l'épidémie de COVID-19 permet également d'estimer et de prévoir les observations secondaires, par exemple les décès et les hospitalisations, à partir d'une observation primaire, par exemple le nombre de cas. Nous illustrerons ici comment prévoir le nombre de décès découlant des cas observés de COVID-19 dans les premiers stades de l'épidémie au Royaume-Uni. +L’outil `EpiNow2` permet également d'estimer et de prévoir les observations secondaires, par exemple les décès et les hospitalisations, à partir d'une observation primaire, par exemple le nombre de cas. Nous illustrerons ici comment prévoir le nombre de décès découlant des cas observés de COVID-19 dans les premiers stades de l'épidémie au Royaume-Uni. Tout d'abord, nous devons formater nos données de manière à ce qu'elles comportent les colonnes suivantes : -- `date` la date (en tant qu'objet date, voir `?is.Date()`), +- `date`: la date (en tant qu'objet date, voir `?is.Date()`), - `primary`: nombre d'observations primaires à cette date, dans cet exemple **cas**, - `secondary`: nombre de dates d'observations secondaires, dans cet exemple **décès**. @@ -288,7 +286,7 @@ Nous devons spécifier le type d'observation en utilisant `type` en `secondary_o Dans cet exemple, nous spécifions `secondary_opts(type = "incidence")`. Voir `?EpiNow2::secondary_opts` pour plus de détails. -La dernière donnée clé est la distribution des délais entre les observations primaires et secondaires. Il s'agit ici du délai entre le signalement du cas et le décès. Nous supposons que ce délai suit une distribution gamma avec une moyenne de 14 jours et un écart-type de 5 jours. `{epiparameter}` pour [accéder aux délais épidémiologiques](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html)). L'utilisation de `Gamma()` nous spécifions une distribution gamma fixe. +La dernière donnée clé est la distribution des délais entre les observations primaires et secondaires. Il s'agit ici du délai entre le signalement du cas et le décès. Nous supposons que ce délai suit une distribution gamma avec une moyenne de 14 jours et un écart-type de 5 jours. Nous pouvons également utiser `{epiparameter}`, comme alternative, pour [accéder aux délais épidémiologiques](https://epiverse-trace.github.io/tutorials-early/delays-reuse.html)). Nous utilisons `Gamma()` pour spécifier une distribution gamma fixe. Il existe d'autres fonctions d'entrée pour `estimate_secondary()` qui peuvent être spécifiées, y compris l'ajout d'un processus d'observation, voir `?EpiNow2::estimate_secondary` pour plus de détails sur ces options. @@ -400,7 +398,7 @@ Assurez-vous que les données sont au bon format : Pour estimer le nombre de reproductions effectives et le taux de croissance, nous utiliserons la fonction `epinow()`. -Les données étant constituées de la date d'apparition des symptômes, il nous suffit de spécifier une distribution des retards pour la période d'incubation et le temps de génération. +Les données étant constituées de la date d'apparition des symptômes, il nous suffit de spécifier une distribution des délais pour la période d'incubation et le temps de génération. Nous spécifions les distributions avec une certaine incertitude autour de la moyenne et de l'écart-type de la distribution log-normale pour la période d'incubation et de la distribution Gamma pour le temps de génération. From f69eac77499a8ea29306aa2294cc10091572a732 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Thu, 23 Oct 2025 18:18:12 +0100 Subject: [PATCH 26/29] add and activate epicontacts and superspreading fr translation --- config.yaml | 2 +- episodes/superspreading-estimate.Rmd | 332 +++++++++++++-------------- 2 files changed, 164 insertions(+), 170 deletions(-) diff --git a/config.yaml b/config.yaml index d92a5d58..2377fcc2 100644 --- a/config.yaml +++ b/config.yaml @@ -64,7 +64,7 @@ episodes: - delays-functions.Rmd - create-forecast.Rmd - severity-static.Rmd -#- superspreading-estimate.Rmd +- superspreading-estimate.Rmd #- superspreading-simulate.Rmd # Information for Learners diff --git a/episodes/superspreading-estimate.Rmd b/episodes/superspreading-estimate.Rmd index 35d4e307..bef8207c 100644 --- a/episodes/superspreading-estimate.Rmd +++ b/episodes/superspreading-estimate.Rmd @@ -1,63 +1,62 @@ --- -title: 'Account for superspreading' +title: Tenir compte de l'hypercontagion teaching: 30 exercises: 2 --- -```{r setup, echo= FALSE, message = FALSE, warning = FALSE} +```{r setup, echo=FALSE, message=FALSE, warning=FALSE} library(webshot) webshot::install_phantomjs(force = TRUE) ``` +:::::::::::::::::::::::::::::::::::::: questions -:::::::::::::::::::::::::::::::::::::: questions - -- How can we estimate individual-level variation in transmission (i.e. superspreading potential) from contact tracing data? -- What are the implications for variation in transmission for decision-making? +- Comment peut-on estimer la variation de la transmission au niveau individuel (c'est-à-dire le potentiel de super propagation) à partir des données de traçage des contacts ? +- Quelles sont les implications de la variation de la transmission pour la prise de décision ? :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: objectives -- Estimate the distribution of onward transmission from infected individuals (i.e. offspring distribution) from outbreak data using `{epicontacts}`. -- Estimate the extent of individual-level variation (i.e. the dispersion parameter) of the offspring distribution using `{fitdistrplus}`. -- Estimate the proportion of transmission that is linked to 'superspreading events' using `{superspreading}`. +- Estimez la distribution de descendance (c'est-à-dire le nombre de cas secondaires) à partir des données de l'épidémie à l'aide de `{epicontacts}`. +- Estimez l'ampleur de la variation au niveau individuel (c'est-à-dire le paramètre de dispersion) de la distribution de la descendance à l'aide de `{fitdistrplus}`. +- Estimez la proportion de la transmission liée à des "événements de super propagation" à l'aide de `{superspreading}`. :::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::: prereq -## Prerequisites +## Conditions préalables -Learners should familiarise themselves with following concept dependencies before working through this tutorial: +Les apprenants doivent se familiariser avec les concepts suivants avant de suivre ce tutoriel : -**Statistics**: common probability distributions, particularly Poisson and negative binomial. +**Statistiques**: distributions de probabilités courantes, en particulier Poisson et binôme négatif. -**Epidemic theory**: The reproduction number, R. +**Théorie épidémique** Le nombre de reproduction, R. ::::::::::::::::::::::::::::::::: ## Introduction - + -From smallpox to severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2), some infected individuals spread infection to more people than others. Disease transmission is the result of a combination of biological and social factors, and these factors average out to some extent at the population level during a large epidemic. Hence researchers often use population averages to assess the potential for disease to spread. However, in the earlier or later phases of an outbreak, individual differences in infectiousness can be more important. In particular, they increase the chance of superspreading events (SSEs), which can ignite explosive epidemics and also influence the chances of controlling transmission ([Lloyd-Smith et al., 2005](https://wellcomeopenresearch.org/articles/5-83)). +De la variole au coronavirus du syndrome respiratoire aigu sévère 2 (SRAS-CoV-2), certaines personnes infectées transmettent l'infection à un plus grand nombre de personnes que d'autres. La transmission de la maladie est le résultat d'une combinaison de facteurs biologiques et sociaux, et ces facteurs s'équilibrent dans une certaine mesure au niveau de la population lors d'une grande épidémie. C'est pourquoi les chercheurs utilisent souvent les moyennes de la population pour évaluer le potentiel de propagation de la maladie. Toutefois, au début ou à la fin d'une épidémie, les différences individuelles en matière de contagiosité peuvent être plus importantes. En particulier, elles augmentent le risque d'événements de super propagation (ESS), qui peuvent déclencher des épidémies explosives et influencer les chances de contrôler la transmission ([Lloyd-Smith et al., 2005](https://wellcomeopenresearch.org/articles/5-83)). -![**Chains of SARS-CoV-2 transmission in Hong Kong initiated by local or imported cases.** (**a**), Transmission network of a cluster of cases traced back to a collection of four bars across Hong Kong (n = 106). (**b**), Transmission network associated with a wedding without clear infector–infectee pairs but linked back to a preceding social gathering and local source (n = 22). (**c**), Transmission network associated with a temple cluster of undetermined source (n = 19). (**d**), All other clusters of SARS-CoV-2 infections where the source and transmission chain could be determined ([Adam et al., 2020](https://www.nature.com/articles/s41591-020-1092-0)).](fig/see-intro-superspreading.png) +![**Chaînes de transmission du SRAS-CoV-2 à Hong Kong initiées par des cas locaux ou importés.** (**a**), réseau de transmission d'un groupe de cas remontant à un ensemble de quatre bars de Hong Kong (n = 106). (**b**), réseau de transmission associé à un mariage sans paires infectrices-infectieuses claires, mais lié à une réunion sociale précédente et à une source locale (n = 22). (**c**), réseau de transmission associé à un groupe de temples de source indéterminée (n = 19). (**d**), tous les autres groupes d'infections par le SRAS-CoV-2 dont la source et la chaîne de transmission ont pu être déterminées ([Adam et al., 2020](https://www.nature.com/articles/s41591-020-1092-0)).](fig/see-intro-superspreading.png) - + -The [basic reproduction number](../learners/reference.md#basic), $R_{0}$, measures the average number of cases caused by one infectious individual in a entirely susceptible population. Estimates of $R_{0}$ are useful for understanding the average dynamics of an epidemic at the population-level, but can obscure considerable individual variation in infectiousness. This was highlighted during the global emergence of SARS-CoV-2 by numerous ‘superspreading events’ in which certain infectious individuals generated unusually large numbers of secondary cases ([LeClerc et al, 2020](https://wellcomeopenresearch.org/articles/5-83)). +Le [nombre de reproduction de base](../learners/reference.md#basic), $R_{0}$ mesure le nombre moyen de cas causés par un individu infectieux dans une population entièrement susceptible. Les estimations de $R_{0}$ sont utiles pour comprendre la dynamique moyenne d'une épidémie au niveau de la population, mais elles peuvent masquer des variations individuelles considérables dans la contagiosité. Cela a été mis en évidence lors de l'émergence mondiale du SRAS-CoV-2 par de nombreux "événements de super propagation" au cours desquels certains individus infectieux ont généré un nombre anormalement élevé de cas secondaires ([LeClerc et al, 2020](https://wellcomeopenresearch.org/articles/5-83)). -![**Observed offspring distribution of SARS-CoV-2 transmission in Hong Kong.** N = 91 SARS-CoV-2 infectors, N = 153 terminal infectees and N = 46 sporadic local cases. Histogram bars indicate the proportion of onward transmission per amount of secondary cases. Line corresponds to a fitted negative binomial distribution ([Adam et al., 2020](https://www.nature.com/articles/s41591-020-1092-0)).](fig/see-intro-secondary-cases-fig-b.png){alt='R = 0.58 and k = 0.43.'} +![**Distribution du nombre de cas secondaires de SRAS-CoV-2 observée à Hong Kong.** N = 91 infectés par le SRAS-CoV-2, N = 153 infectés en phase terminale et N = 46 cas locaux sporadiques. Les barres de l'histogramme indiquent la proportion du nombre de cas secondaire generés. La ligne correspond à une distribution binomiale négative ajustée ([Adam et al., 2020](https://www.nature.com/articles/s41591-020-1092-0)).](fig/see-intro-secondary-cases-fig-b.png){fig-alt="R = 0,58 et k = 0,43."} - + -In this tutorial, we are going to quantify individual variation in transmission, and hence estimate the potential for superspreading events. Then we are going to use these estimates to explore the implications of superspreading for contact tracing interventions. +Dans ce tutoriel, nous allons quantifier la variation individuelle de la transmission, et donc estimer le potentiel d'événements d'hypercontagion. Nous utiliserons ensuite ces estimations pour explorer les implications de l'hypercontagion pour les interventions de recherche de contacts. -We are going to use data from the `{outbreaks}` package, manage the linelist and contacts data using `{epicontacts}`, and estimate distribution parameters with `{fitdistrplus}`. Lastly, we are going to use `{superspreading}` to explore the implications of variation in transmission for decision-making. +Nous allons utiliser les données de l'étude `{outbreaks}` et gérer la liste des lignes et les données sur les contacts à l'aide de l'outil `{epicontacts}` et estimer les paramètres de distribution avec `{fitdistrplus}`. Enfin, nous allons utiliser `{superspreading}` pour explorer les implications de la variation de la transmission sur la prise de décision. -We’ll use the pipe `%>%` to connect some of the functions from these packages, so let’s also call the `{tidyverse}` package. +Nous utiliserons le tuyau `%>%` pour relier certaines des fonctions de ces packages, donc appelons aussi le package `{tidyverse}` . ```r library(outbreaks) @@ -67,7 +66,7 @@ library(superspreading) library(tidyverse) ``` -```{r,message=FALSE,warning=FALSE,eval=TRUE,echo=FALSE} +```{r, message=FALSE, warning=FALSE, eval=TRUE, echo=FALSE} library(outbreaks) library(epicontacts) library(superspreading) @@ -76,23 +75,23 @@ library(tidyverse) ::::::::::::::::::: checklist -### The double-colon +### Le double point-virgule -The double-colon `::` in R let you call a specific function from a package without loading the entire package into the current environment. +Le double point-virgule `::` dans R vous permettent d'appeler une fonction spécifique d'un package sans charger le package entier dans l'environnement actuel. -For example, `dplyr::filter(data, condition)` uses `filter()` from the `{dplyr}` package. +Par exemple, vous pouvez appeler une fonction spécifique d'un package sans charger le package entier dans l'environnement actuel, `dplyr::filter(data, condition)` utilise `filter()` à partir de l'outil `{dplyr}` package. -This help us remember package functions and avoid namespace conflicts. +Cela nous permet de nous souvenir des fonctions du package et d'éviter les conflits d'espace de noms. ::::::::::::::::::: -## The individual reprodution number +## Le numéro de reproduction individuel -The individual reproduction number is defined as the number of secondary cases caused by a particular infected individual. +Le nombre de reproduction individuel est défini comme le nombre de cas secondaires causés par un individu infecté. -Early in an outbreak we can use contact data to reconstruct transmission chains (i.e. who infected whom) and calculate the number of secondary cases generated by each individual. This reconstruction of linked transmission events from contact data can provide an understanding about how different individuals have contributed to transmission during an epidemic ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). +Au début d'une épidémie, nous pouvons utiliser les données de contact pour reconstruire les chaînes de transmission (c'est-à-dire qui a infecté qui) et calculer le nombre de cas secondaires générés par chaque individu. Cette reconstruction des événements de transmission liés à partir des données de contact peut permettre de comprendre comment différents individus ont contribué à la transmission au cours d'une épidémie ([Cori et al., 2017](https://royalsocietypublishing.org/doi/10.1098/rstb.2016.0371)). -Let's practice this using the `mers_korea_2015` linelist and contact data from the `{outbreaks}` package and integrate them with the `{epicontacts}` package to calculate the distribution of secondary cases during the 2015 MERS-CoV outbreak in South Korea ([Campbell, 2022](https://community.appliedepi.org/t/estimating-the-degree-of-super-spreading-from-transmission-chain-data/103/2)): +Mettons cela en pratique en utilisant l'outil `mers_korea_2015` et les données de contact de la base de données `{outbreaks}` et les intégrons à l'application `{epicontacts}` pour calculer la distribution des cas secondaires lors de l'épidémie de MERS-CoV de 2015 en Corée du Sud ([Campbell, 2022](https://community.appliedepi.org/t/estimating-the-degree-of-super-spreading-from-transmission-chain-data/103/2)) : ```{r} ## first, make an epicontacts object @@ -104,14 +103,14 @@ epi_contacts <- ) ``` -With the argument `directed = TRUE` we configure a directed graph. These directions incorporate our hypothesis of the **infector-infectee** pair: from the probable source patient to the secondary case. +Avec l'argument `directed = TRUE` nous configurons un graphe orienté. Ces directions intègrent notre hypothèse de la paire "**infecteur-infecté**". -```{r,eval=FALSE} +```{r, eval=FALSE} # visualise contact network epicontacts::vis_epicontacts(epi_contacts) ``` -```{r,echo=FALSE} +```{r, echo=FALSE} withr::with_envvar(c(OPENSSL_CONF = file.path("/dev", "null")), { # visualise contact network network <- @@ -129,13 +128,13 @@ withr::with_envvar(c(OPENSSL_CONF = file.path("/dev", "null")), { ::::::::::::::::::::::::::: spoiler -### Is contact data tidy? +### Les données de contact sont-elles bien rangées ? -Contact data from a transmission chain can provide information on which infected individuals came into contact with others. We expect to have the infector (`from`) and the infectee (`to`) plus additional columns of variables related to their contact, such as location (`exposure`) and date of contact. +Les données de contact d'une chaîne de transmission peuvent fournir des informations sur les personnes infectées qui sont entrées en contact avec d'autres. Nous nous attendons à ce que l'infecteur (`from`) et la personne infectée (`to`), ainsi que des colonnes supplémentaires de variables liées à leur contact, telles que le lieu (`exposure`) et la date du contact. -Following [tidy data](https://tidyr.tidyverse.org/articles/tidy-data.html#tidy-data) principles, the observation unit in our contact data frame is the **infector-infectee** pair. Although one infector can infect multiple infectees, from contact tracing investigations we may record contacts linked to more than one infector (e.g. within a household). But we should expect to have unique infector-infectee pairs, because typically each infected person will have acquired the infection from one other. +À la suite de [mettre de l'ordre dans les données](https://tidyr.tidyverse.org/articles/tidy-data.html#tidy-data) l'unité d'observation dans notre cadre de données de contact est la paire infecteur-infecté. Bien qu'un infecteur puisse infecter plusieurs personnes, les enquêtes de recherche de contacts peuvent enregistrer des contacts liés à plus d'un infecteur (par exemple, au sein d'un ménage). Mais nous devrions nous attendre à avoir des paires infecteur-infecté uniques, car chaque personne infectée a généralement contracté l'infection auprès d'une seule autre personne. -To ensure these unique pairs, we can check on replicates for infectees: +Pour garantir l'unicité de ces paires, nous pouvons vérifier les réplicats pour les personnes infectées : ```{r} # no infector-infectee pairs are replicated @@ -147,7 +146,7 @@ epi_contacts %>% ::::::::::::::::::::::::::: -Our goal is to get the number of secondary cases caused by the observed infected individuals. In the contact data frame, when each infector-infectee pair is unique, the number of rows per infector corresponds to the number of secondary cases generated by that individual. +Notre objectif est d'obtenir le nombre de cas secondaires causés par les individus infectés observés. Dans la base de données des contacts, lorsque chaque paire infecteur-infecté est unique, le nombre de lignes par infecteur correspond au nombre de cas secondaires générés par cet individu. ```{r} # count secondary cases per infector in contacts @@ -156,13 +155,13 @@ epi_contacts %>% dplyr::count(from, name = "secondary_cases") ``` -But this output only contains the number of secondary cases for reported infectors in the contact data, not for **all** the individuals in the whole `` object. +Mais cette sortie ne contient que le nombre de cas secondaires pour les infectieux déclarés dans les données de contact, et non pour les cas de **tous les** individus de l'ensemble des `` l'objet. -Instead, from `{epicontacts}` we can use the function `epicontacts::get_degree()`. The argument `type = "out"` gets the **out-degree** of each **node** in the contact network from the `` class object. In a directed network, the out-degree is the number of outgoing edges (infectees) emanating from a node (infector) ([Nykamp DQ, accessed: 2025](https://mathinsight.org/definition/node_degree)). +Au lieu de cela, à partir de `{epicontacts}` nous pouvons utiliser la fonction `epicontacts::get_degree()`. L'argument `type = "out"` permet d'obtenir la valeur de **degré de sortie** de chaque **nœud** dans le réseau de contact à partir du `` objet de la classe. Dans un réseau dirigé, le degré de sortie est le nombre d'arêtes sortantes (infectés) émanant d'un nœud (infecteur) ([Nykamp DQ, consulté le : 2025](https://mathinsight.org/definition/node_degree)). -Also, the argument `only_linelist = TRUE` will only include individuals in the linelist data frame. During outbreak investigations, we expect a registry of **all** the observed infected individuals in the linelist data. However, anyone not linked with a potential infector or infectee will not appear in the contact data. Thus, the argument `only_linelist = TRUE` will protect us against missing this later set of individuals when counting the number of secondary cases caused by all the observed infected individuals. They will appear in the `` vector output as `0` secondary cases. +De même, l'argument `only_linelist = TRUE` n'inclura que les individus figurant dans le cadre de données de la liste de référence. Lors des enquêtes sur les épidémies, nous nous attendons à ce qu'un registre de **toutes les** les personnes infectées observées dans les données de la liste de référence. Cependant, toute personne qui n'est pas liée à un infecteur ou un infecté potentiel n'apparaîtra pas dans les données de contact. Par conséquent, l'argument `only_linelist = TRUE` nous permettra de ne pas manquer ce dernier groupe d'individus lorsque nous compterons le nombre de cas secondaires causés par tous les individus infectés observés. Ils apparaîtront dans les `` sous la forme `0` cas secondaires. -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} # Count secondary cases per subject in contacts and linelist all_secondary_cases <- epicontacts::get_degree( x = epi_contacts, @@ -173,27 +172,27 @@ all_secondary_cases <- epicontacts::get_degree( ::::::::::::::::::::: caution -At `epicontacts::get_degree()` we use the argument `only_linelist = TRUE`. -This is to count the number of secondary cases caused by all the observed infected individuals, -which includes individuals in contacts and linelist data frames. +À `epicontacts::get_degree()` nous utilisons l'argument `only_linelist = TRUE`. +Il s'agit de compter le nombre de cas secondaires causés par toutes les personnes infectées observées, +ce qui inclut les individus figurant dans les bases de données des contacts et des listes de diffusion. ::::::::::::::::::::: ::::::::::::::::::::: spoiler -### When to use 'only_linelist = FALSE'? +### Quand utiliser "only\_linelist = FALSE" ? -The assumption that -"the linelist will include all individuals in contacts and linelist" -may not work for all situations. +L'hypothèse selon laquelle +"la liste de référence inclura toutes les personnes figurant dans les contacts et la liste de référence". +peut ne pas fonctionner dans toutes les situations. -For example, if during the registry of observed infections, -the contact data included more subjects than the ones available in the linelist data, -then you need to consider only the individuals from the contact data. -In that situation, -at `epicontacts::get_degree()` we use the argument `only_linelist = FALSE`. +Par exemple, si au cours du registre des infections observées, +les données de contact comprenaient plus de sujets que ceux disponibles dans les données de la liste de référence, +vous ne devez prendre en compte que les individus figurant dans les données de contact. +Dans ce cas, vous devez prendre en compte uniquement les personnes figurant dans les données de contact, +à `epicontacts::get_degree()` nous utilisons l'argument `only_linelist = FALSE`. -Find here a printed [reproducible example](https://reprex.tidyverse.org/): +Vous trouverez ici une version imprimée [exemple reproductible](https://reprex.tidyverse.org/): ```r # Three subjects on linelist @@ -227,9 +226,9 @@ epicontacts::get_degree(x = sample_net, type = "out", only_linelist = FALSE) ::::::::::::::::::::: -From a histogram of the `all_secondary_cases` object, we can identify the **individual-level variation** in the number of secondary cases. Three cases were related to more than 20 secondary cases, while the complementary cases with less than five or zero secondary cases. +A partir d'un histogramme des `all_secondary_cases` de l'objet, nous pouvons identifier les **variation au niveau individuel** dans le nombre de cas secondaires. Trois cas étaient liés à plus de 20 cas secondaires, tandis que les cas complémentaires comptaient moins de cinq ou aucun cas secondaire. - + ```{r} ## plot the distribution @@ -243,13 +242,13 @@ all_secondary_cases %>% ) ``` -The number of secondary cases can be used to _empirically_ estimate the **offspring distribution**, which is the number of secondary _infections_ caused by each case. One candidate statistical distribution used to model the offspring distribution is the **negative binomial** distribution with two parameters: +Le nombre de cas secondaires peut être utilisé pour estimer de manière empirique la **distribution de la descendance** qui est le nombre de cas *secondaires* causées par chaque cas. Une distribution statistique candidate utilisée pour modéliser la distribution de la descendance est la distribution **binomiale négative** avec deux paramètres : -- **Mean**, which represents the $R_{0}$, the average number of (secondary) cases produced by a single individual in an entirely susceptible population, and +- **Moyenne** qui représente la $R_{0}$ le nombre moyen de cas (secondaires) produits par un seul individu dans une population entièrement sensible, et -- **Dispersion**, expressed as $k$, which represents the individual-level variation in transmission by single individuals. +- **Dispersion** exprimée par $k$ qui représente la variation au niveau individuel de la transmission par des individus isolés. -```{r,echo=FALSE,message=FALSE,warning=FALSE} +```{r, echo=FALSE, message=FALSE, warning=FALSE} # Load parameters mpox <- epiparameter::epiparameter_db( disease = "SARS", @@ -297,50 +296,51 @@ ggplot() + ) ``` -From the histogram and density plot, we can identify that the offspring distribution is highly skewed or **overdispersed**. In this framework, the superspreading events (SSEs) are not arbitrary or exceptional, but simply realizations from the right-hand tail of the offspring distribution, which we can quantify and analyse ([Lloyd-Smith et al., 2005](https://www.nature.com/articles/nature04153)). +L'histogramme et le diagramme de densité montrent que la distribution de la descendance est fortement asymétrique, soit **surdispersée**. Dans ce cadre, les événements de surdispersion (ESS) ne sont pas arbitraires ou exceptionnels, mais simplement des réalisations de la queue droite de la distribution de la descendance, que nous pouvons quantifier et analyser ([Lloyd-Smith et al., 2005](https://www.nature.com/articles/nature04153)). ::::::::::::::::::::::::::: callout -### Terminology recap +### Récapitulation terminologique -- From linelist and contact data, we calculate the **number of secondary cases** caused by the observed infected individuals. -- Whereas $R_{0}$ captures the average transmission in the population, we can define the **individual reproduction number** as a random variable representing the _expected_ number of secondary cases caused by a infected individual. -- From the stochastic effects in transmission, the number of secondary _infections_ caused by each case is described by an **offspring distribution**. -- An _empirical_ offspring distribution can be modeled by the **negative-binomial** distribution with mean $R_{0}$ and dispersion parameter $k$. +- A partir de la liste des lignes et des données de contact, nous calculons **le nombre de cas secondaires** causés par les personnes infectées observées. +- Alors que $R_{0}$ représente la transmission moyenne au sein de la population, nous pouvons définir l'indicateur **nombre de reproduction individuel** comme une variable aléatoire représentant le nombre **attendu** de cas secondaires causés par un individu infecté. +- En raison des effets stochastiques de la transmission, le nombre de cas secondaires causés par chaque cas est décrit par la **distribution de la descendance**. +- La distribution des descendants peut être modélisée par l'équation suivante **binomiale négative** avec une moyenne $R_{0}$ et un paramètre de dispersion $k$. ::::::::::::::::::::::::::: ::::::::::::::::::::::::::::: spoiler -### Poisson, overdispersion, and Negative Binomial +### Poisson, surdispersion et binôme négatif - + -For occurrences of associated discrete events we can use **Poisson** or negative binomial discrete distributions. +Pour les occurrences d'événements discrets associés, nous pouvons utiliser **Poisson** ou des distributions binomiales négatives. -In a Poisson distribution, mean is equal to variance. But when variance is higher than the mean, this is called **overdispersion**. In biological applications, overdispersion occurs and so a negative binomial may be worth considering as an alternative to Poisson distribution. +Dans une distribution de Poisson, la moyenne est égale à la variance. Mais lorsque la variance est supérieure à la moyenne, on parle de **surdispersion**. Dans les applications biologiques, la surdispersion se produit et une binomiale négative peut donc être considérée comme une alternative à la distribution de Poisson. -**Negative binomial** distribution is specially useful for discrete data over an unbounded positive range whose sample variance exceeds the sample mean. In such terms, the observations are overdispersed with respect to a Poisson distribution, for which the mean is equal to the variance. +La distribution **binomiale négative** est particulièrement utile pour les données discrètes sur un intervalle positif non borné dont la variance de l'échantillon dépasse la moyenne de l'échantillon. En d'autres termes, les observations sont surdispersées par rapport à une distribution de Poisson, pour laquelle la moyenne est égale à la variance. -In epidemiology, [negative binomial](https://en.wikipedia.org/wiki/Negative_binomial_distribution) have being used to model disease transmission for infectious diseases where the likely number of onward infections may vary considerably from individual to individual and from setting to setting, capturing all variation in infectious histories of individuals, including properties of the biological (i.e. degree of viral shedding) and environmental circumstances (e.g. type and location of contact). +En épidémiologie, [binôme négatif](https://en.wikipedia.org/wiki/Negative_binomial_distribution) ont été utilisées pour modéliser la transmission de maladies infectieuses pour lesquelles le nombre probable d'infections ultérieures peut varier considérablement d'un individu à l'autre et d'un environnement à l'autre, en tenant compte de toutes les variations dans les antécédents infectieux des individus, y compris les propriétés des circonstances biologiques (c'est-à-dire le degré d'excrétion virale) et environnementales (par exemple, le type et le lieu de contact). ::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::: challenge -Calculate the distribution of secondary cases for Ebola using the `ebola_sim_clean` object from `{outbreaks}` package. +Calculez la distribution des cas secondaires d'Ebola à l'aide de la méthode des `ebola_sim_clean` objet de `{outbreaks}` package. -- Is the offspring distribution of Ebola skewed or overdispersed? +- La distribution de la descendance d'Ebola est-elle asymétrique ou surdispersée ? :::::::::::::::::: hint -⚠️ **Optional step:** This dataset has `r nrow(ebola_sim_clean$linelist)` cases. Running `epicontacts::vis_epicontacts()` may take several minutes and use significant memory for large outbreaks such as the Ebola linelist. If you're on an older or slower computer, you can skip this step. +⚠️ + **Étape facultative :** Cet ensemble de données a `r nrow(ebola_sim_clean$linelist)` cas. Exécution `epicontacts::vis_epicontacts()` peut prendre plusieurs minutes et utiliser beaucoup de mémoire pour les grandes épidémies telles que la liste des cas d'Ebola. Si vous utilisez un ordinateur plus ancien ou plus lent, vous pouvez sauter cette étape. :::::::::::::::::: :::::::::::::::::: solution -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} ## first, make an epicontacts object ebola_contacts <- epicontacts::make_epicontacts( @@ -367,17 +367,17 @@ ebola_secondary %>% ) ``` -From a visual inspection, the distribution of secondary cases for the Ebola data set in `ebola_sim_clean` shows an skewed distribution with secondary cases equal or lower than 6. We need to complement this observation with a statistical analysis to evaluate for overdispersion. +D'après une inspection visuelle, la distribution des cas secondaires pour l'ensemble des données relatives à Ebola en `ebola_sim_clean` montre une distribution asymétrique avec des cas secondaires inférieurs ou égaux à 6. Nous devons compléter cette observation par une analyse statistique afin d'évaluer la surdispersion. :::::::::::::::::: :::::::::::::::::::::::::::::::::: -## Estimate the dispersion parameter +## Estimez le paramètre de dispersion -To empirically estimate the dispersion parameter $k$, we could fit a negative binomial distribution to the number of secondary cases. +Pour estimer empiriquement le paramètre de dispersion $k$ nous pourrions ajuster une distribution binomiale négative au nombre de cas secondaires. -We can fit distributions to data using the `{fitdistrplus}` package, which provides maximum likelihood estimates. +Nous pouvons ajuster des distributions aux données à l'aide de la fonction `{fitdistrplus}` qui fournit des estimations du maximum de vraisemblance. ```r library(fitdistrplus) @@ -393,16 +393,16 @@ offspring_fit :::::::::::::::::::::::::::::::: callout -### Name of parameters +### Nom des paramètres -From the `{fitdistrplus}` output: +A partir de la `{fitdistrplus}` sortie : -- The `size` object refers to the estimated dispersion parameter $k$, and -- The `mu` object refers to the estimated mean, which represents the $R_{0}$, +- Le `size` fait référence au paramètre de dispersion estimé $k$ estimé, et +- L'objet `mu` se réfère à la moyenne estimée, qui représente l'ensemble de la population. $R_{0}$, :::::::::::::::::::::::::::::::: -```{r,echo=FALSE} +```{r, echo=FALSE} ## extract the "size" parameter mid <- offspring_fit$estimate[["size"]] @@ -412,12 +412,12 @@ lower <- mid + offspring_fit$sd[["size"]] * qnorm(0.025) upper <- mid + offspring_fit$sd[["size"]] * qnorm(0.975) ``` -From the number secondary cases distribution we estimated a dispersion parameter $k$ of -`r round(mid, 3)`, with a 95% Confidence Interval from `r round(lower, 3)` to `r round(upper, 3)`. As the value of $k$ is significantly lower than one, we can conclude that there is considerable potential for superspreading events. +À partir de la distribution du nombre de cas secondaires, nous avons estimé un paramètre de dispersion $k$ de +`r round(mid, 3)` avec un intervalle de confiance à 95% de `r round(lower, 3)` à `r round(upper, 3)`. Comme la valeur de $k$ est nettement inférieure à un, nous pouvons conclure qu'il existe un potentiel considérable pour les événements de superposition. -We can overlap the estimated density values of the fitted negative binomial distribution and the histogram of the number of secondary cases: +Nous pouvons superposer les valeurs de densité estimées de la distribution binomiale négative ajustée et l'histogramme du nombre de cas secondaires : -```{r,echo=FALSE} +```{r, echo=FALSE} # calculate density fit fit_density <- tibble::tibble(quantile = 0:40) %>% @@ -468,29 +468,29 @@ ggplot() + :::::::::::::::::::: callout -### Individual-level variation in transmission +### Variation de la transmission au niveau individuel -The individual-level variation in transmission is defined by the relationship between the mean ($R_{0}$), dispersion ($k$), and the variance of a negative binomial distribution. +La variation de la transmission au niveau individuel est définie par la relation entre la moyenne ($R_{0}$), la dispersion ($k$) et la variance d'une distribution binomiale négative. -The negative binomial model has $variance = R_{0}(1+\frac{R_{0}}{k})$, so smaller values of $k$ indicate greater variance and, consequently, greater **individual-level variation** in transmission. +Le modèle binomial négatif a $variance = R_{0}(1+\frac{R_{0}}{k})$, de sorte que les plus petites valeurs de $k$ indiquent une plus grande variance et, par conséquent, une plus grande **variation au niveau individuel** de la transmission. $$\uparrow variance = R_{0}(1+\frac{R_{0}}{\downarrow k})$$ -When $k$ approaches infinity ($k \rightarrow \infty$) the variance equals the mean (because $\frac{R_{0}}{\infty}=0$). This makes the conventional Poisson model an special case of the negative binomial model. +Lorsque $k$ s'approche de l'infini ($k \rightarrow \infty$), la variance est égale à la moyenne (parce que $\frac{R_{0}}{\infty}=0$). Cela fait du modèle de Poisson classique un cas particulier du modèle binomial négatif. :::::::::::::::::::: ::::::::::::::::::::::: challenge -From the previous challenge, use the distribution of secondary cases from the `ebola_sim_clean` object from `{outbreaks}` package. +À partir de l'épreuve précédente, utilisez la distribution des cas secondaires de l'épreuve de la `ebola_sim_clean` de l'objet de `{outbreaks}` package. -Fit a negative binomial distribution to estimate the mean and dispersion parameter of the offspring distribution. Try to estimate the uncertainty of the dispersion parameter from the Standard Error to 95% Confidence Intervals. +Ajustez une distribution binomiale négative pour estimer la moyenne et le paramètre de dispersion de la distribution de la descendance. Essayez d'estimer l'incertitude du paramètre de dispersion à partir de l'erreur standard et des intervalles de confiance à 95 %. -- Does the estimated dispersion parameter of Ebola provide evidence of an individual-level variation in transmission? +- Le paramètre de dispersion estimé d'Ebola fournit-il des preuves d'une variation de la transmission au niveau individuel ? :::::::::::::: hint -Review how we fitted a negative binomial distribution using the `fitdistrplus::fitdist()` function. +Revoyez comment nous avons ajusté une distribution binomiale négative à l'aide de la fonction `fitdistrplus::fitdist()` fonction. :::::::::::::: @@ -519,20 +519,20 @@ ebola_upper <- ebola_mid + ebola_offspring$sd[["size"]] * qnorm(0.975) # ebola_upper ``` -From the number secondary cases distribution we estimated a dispersion parameter $k$ of -`r round(ebola_mid, 2)`, with a 95% Confidence Interval from `r round(ebola_lower, 2)` to `r round(ebola_upper, 2)`. +À partir de la distribution du nombre de cas secondaires, nous avons estimé un paramètre de dispersion $k$ de +`r round(ebola_mid, 2)` avec un intervalle de confiance à 95% de `r round(ebola_lower, 2)` à `r round(ebola_upper, 2)`. -For dispersion parameter estimates higher than one we get low distribution variance, hence, low individual-level variation in transmission. +Pour les estimations du paramètre de dispersion supérieures à un, nous obtenons une faible variance de la distribution, et donc une faible variation de la transmission au niveau individuel. -But does this mean that the secondary case distribution does not have superspreading events (SSEs)? You will later find one additional challenge: How do you define an SSE threshold for Ebola? +Mais cela signifie-t-il que la distribution des cas secondaires ne présente pas d'événements de super propagation (ESS) ? Vous rencontrerez plus tard une difficulté supplémentaire : comment définir un seuil d'ESS pour Ebola ? :::::::::::::: :::::::::::::: solution -### Select the best model +### Sélectionnez le meilleur modèle -We can use the maximum likelihood estimates from `{fitdistrplus}` to compare different models and assess fit performance using estimators like the AIC and BIC. Read further in the vignette on [Estimate individual-level transmission](https://epiverse-trace.github.io/superspreading/articles/estimate_individual_level_transmission.html) and use the `{superspreading}` helper function `ic_tbl()` for this! +Nous pouvons utiliser les estimations du maximum de vraisemblance de `{fitdistrplus}` pour comparer différents modèles et évaluer la performance de l'ajustement à l'aide d'estimateurs tels que l'AIC et le BIC. Pour en savoir plus, lisez la vignette sur [Estimer la transmission au niveau individuel](https://epiverse-trace.github.io/superspreading/articles/estimate_individual_level_transmission.html) et utilisez l'outil `{superspreading}` fonction d'aide `ic_tbl()` pour cela ! :::::::::::::: @@ -540,19 +540,19 @@ We can use the maximum likelihood estimates from `{fitdistrplus}` to compare dif :::::::::::::::::::::::::::::::::: checklist -### The dispersion parameter across diseases +### Le paramètre de dispersion entre les maladies -Research into sexually transmitted and vector-borne diseases has previously suggested a '20/80' rule, with 20% of individuals contributing at least 80% of the transmission potential ([Woolhouse et al](https://www.pnas.org/doi/10.1073/pnas.94.1.338)). +La recherche sur les maladies sexuellement transmissibles et à transmission vectorielle a précédemment suggéré une règle "20/80", 20 % des individus contribuant à au moins 80 % du potentiel de transmission ([Woolhouse et al](https://www.pnas.org/doi/10.1073/pnas.94.1.338)). -On its own, the dispersion parameter $k$ is hard to interpret intuitively, and hence converting into proportional summary can enable easier comparison. When we consider a wider range of pathogens, we can see there is no hard and fast rule for the percentage that generates 80% of transmission, but variation does emerge as a common feature of infectious diseases +En soi, le paramètre de dispersion $k$ est difficile à interpréter intuitivement, et sa conversion en un résumé proportionnel peut faciliter la comparaison. Si l'on considère un éventail plus large d'agents pathogènes, on constate qu'il n'existe pas de règle absolue pour le pourcentage qui génère 80 % de la transmission, mais que la variation apparaît comme une caractéristique commune des maladies infectieuses. -- When the 20% most infectious cases contribute to the 80% of transmission (or more), there is a high individual-level variation in transmission, with a highly overdispersed offspring distribution ($k<0.1$), e.g., SARS-1. +- Lorsque les 20 % de cas les plus infectieux contribuent à 80 % de la transmission (ou plus), on observe une forte variation de la transmission au niveau individuel, avec une distribution de la descendance fortement surdispersée ($k<0.1$), par exemple dans le cas du SRAS-1. -- When the 20% most infectious cases contribute to the ~50% of transmission, there is a low individual-level variation in transmission, with a moderately dispersed offspring distribution ($k > 0.1$), e.g. Pneumonic Plague. +- Lorsque les 20 % de cas les plus infectieux contribuent à environ 50 % de la transmission, la variation de la transmission au niveau individuel est faible et la distribution de la descendance est modérément dispersée ($k > 0.1$), par exemple la peste pulmonaire. -![**Evidence for variation in individual reproductive number**. (Left, c) Proportion of transmission expected from the most infectious 20% of cases, for 10 outbreak or surveillance data sets (triangles). Dashed lines show proportions expected under the 20/80 rule (top) and homogeneity (bottom). (Right, d), Reported superspreading events (SSEs; diamonds) relative to estimated reproductive number R (squares) for twelve directly transmitted infections. Crosses show the 99th-percentile proposed as threshold for SSEs. (More figure details in [Lloyd-Smith et al., 2005](https://www.nature.com/articles/nature04153))](fig/SEE-individual-reproductive-number-fig-c-d.png) +![**Preuve de la variation du nombre d'individus reproducteurs**(Gauche, c) Proportion de transmission attendue à partir des 20 % de cas les plus infectieux, pour 10 ensembles de données d'épidémies ou de surveillance (triangles). Les lignes en pointillé indiquent les proportions attendues selon la règle des 20/80 (en haut) et l'homogénéité (en bas). (Droite, d), Événements de super propagation signalés (SSE ; losanges) par rapport au nombre reproductif estimé R (carrés) pour douze infections directement transmissibles. Les croix indiquent le 99e centile proposé comme seuil pour les ESS. (Pour plus de détails sur les figures, voir [Lloyd-Smith et al. 2005](https://www.nature.com/articles/nature04153))](fig/SEE-individual-reproductive-number-fig-c-d.png) -```{r,message=FALSE,warning=FALSE,echo=FALSE,eval=FALSE} +```{r, message=FALSE, warning=FALSE, echo=FALSE, eval=FALSE} library(epiparameter) library(superspreading) library(tidyverse) @@ -661,25 +661,23 @@ across_offspring %>% coord_fixed(ratio = 1) ``` - :::::::::::::::::::::::::::::::::: -## Controlling superspreading with contact tracing +## Contrôle de la superspreading avec la traçabilité des contacts -During an outbreak, it is common to try and reduce transmission by identifying people who have come into contact with an infected person, then quarantine them in case they subsequently turn out to be infected. Such contact tracing can be deployed in multiple ways. 'Forward' contact tracing targets downstream contacts who may have been infected by a newly identifed infection (i.e. the 'index case'). 'Backward' tracing instead tracks the upstream primary case who infected the index case (or a setting or event at which the index case was infected), for example by retracing history of contact to the likely point of exposure. This makes it possible to identify others who were also potentially infected by this earlier primary case. +Lors d'une épidémie, il est courant d'essayer de réduire la transmission en identifiant les personnes qui ont été en contact avec une personne infectée, puis en les mettant en quarantaine au cas où elles s'avéreraient infectées par la suite. Cette recherche de contacts peut être déployée de plusieurs manières. La recherche des contacts "en amont" cible les contacts en aval susceptibles d'avoir été infectés par une infection nouvellement identifiée (c'est-à-dire le "cas index"). La recherche "en amont" vise plutôt le cas primaire en amont qui a infecté le cas index (ou un lieu ou un événement au cours duquel le cas index a été infecté), par exemple en retraçant l'historique des contacts jusqu'au point d'exposition probable. Cela permet d'identifier d'autres personnes qui ont également été potentiellement infectées par ce cas primaire antérieur. -In the presence of individual-level variation in transmission, i.e., with an overdispersed offspring distribution, if this primary case is identified, a larger fraction of the transmission chain can be detected by forward tracing each of the contacts of this primary case ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). +En présence d'une variation de la transmission au niveau individuel, c'est-à-dire avec une distribution de la descendance surdispersée, si ce cas primaire est identifié, une plus grande partie de la chaîne de transmission peut être détectée en remontant l'historique de chacun des contacts de ce cas primaire ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). -![Schematic representation of contact tracing strategies. Black arrows indicate the directions of transmission, blue and Orange arrows, a successful or failed contact tracing, respectivelly. When there is evidence of individual-level variation in transmission, often resulting in superspreading, backward contact tracing from the index case (blue circle) increase the probability to find the primary case (green circle) or clusters with a larger fraction of cases, potentially increasing the number of quarentined cases (yellow circles). [Claire Blackmore, 2021](https://www.paho.org/sites/default/files/backward_contact_tracing_v3_0.pdf)](fig/contact-tracing-strategies.png) +![Représentation schématique des stratégies de recherche de contacts. Les flèches noires indiquent le sens de la transmission, les flèches bleues et orange indiquent respectivement une recherche de contact réussie ou échouée. Lorsqu'il existe des preuves d'une variation de la transmission au niveau individuel, entraînant souvent une superspreading, la recherche de contacts en amont du cas index (cercle bleu) augmente la probabilité de trouver le cas primaire (cercle vert) ou des grappes avec une plus grande fraction de cas, augmentant potentiellement le nombre de cas en quarantaine (cercles jaunes). [Claire Blackmore, 2021](https://www.paho.org/sites/default/files/backward_contact_tracing_v3_0.pdf)](fig/contact-tracing-strategies.png) -When there is evidence of individual-level variation (i.e. overdispersion), often resulting in so-called superspreading events, a large proportion of infections may be linked to a small proportion of original clusters. As a result, finding and targeting originating clusters in combination with reducing onwards infection may substantially enhance the effectiveness of tracing methods ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). +Lorsqu'il existe des preuves de variation au niveau individuel (c'est-à-dire de surdispersion), qui se traduisent souvent par ce que l'on appelle des événements de superspreading, une grande proportion d'infections peut être liée à une petite proportion de grappes d'origine. Par conséquent, la recherche et le ciblage des grappes d'origine, combinés à la réduction des infections ultérieures, peuvent considérablement améliorer l'efficacité des méthodes de dépistage ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). -Empirical evidence focused on evaluating the efficiency of backward tracing lead to 42% more cases identified than forward tracing supporting its implementation when rigorous suppression of transmission is justified ([Raymenants et al., 2022](https://www.nature.com/articles/s41467-022-32531-6)) +Des données empiriques axées sur l'évaluation de l'efficacité de la recherche rétrospective ont permis d'identifier 42 % de cas supplémentaires par rapport à la recherche prospective, ce qui plaide en faveur de sa mise en œuvre lorsqu'une suppression rigoureuse de la transmission est justifiée ([Raymenants et al, 2022](https://www.nature.com/articles/s41467-022-32531-6)) +## Probabilité de cas dans un groupe donné -## Probability of cases in a given cluster - -Using `{superspreading}`, we can estimate the probability of having a cluster of secondary infections caused by a primary case identified by backward tracing of size $X$ or larger ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). +En utilisant `{superspreading}` nous pouvons estimer la probabilité d'avoir une grappe d'infections secondaires causées par un cas primaire identifié par traçage rétrospectif de taille $X$ ou plus ([Endo et al., 2020](https://wellcomeopenresearch.org/articles/5-239/v3)). ```{r} # Set seed for random number generator @@ -697,7 +695,7 @@ superspreading::proportion_cluster_size( ) ``` -```{r,echo=FALSE,message=FALSE,warning=FALSE} +```{r, echo=FALSE, message=FALSE, warning=FALSE} # Set seed for random number generator set.seed(33) @@ -714,25 +712,23 @@ cluster_probability_percent <- cluster_probability %>% # cluster_probability_percent ``` +Même si nous disposons d'un $R<1$ une distribution de la descendance fortement surdispersée ($k=0.02$) signifie que si nous détectons un nouveau cas, il y a un risque d'erreur dans la distribution de la descendance. `r cluster_probability_percent` probabilité qu'il provienne d'un groupe de 25 infections ou plus. Par conséquent, en suivant une stratégie rétrospective, les efforts de recherche des contacts augmenteront la probabilité de réussir à contenir et à mettre en quarantaine ce grand nombre de personnes précédemment infectées, plutôt que de se concentrer simplement sur le nouveau cas, qui est susceptible de n'avoir infecté personne (parce qu'il n'a pas été infecté). $k$ est très faible). -Even though we have an $R<1$, a highly overdispersed offspring distribution ($k=0.02$) means that if we detect a new case, there is a `r cluster_probability_percent` probability they originated from a cluster of 25 infections or more. Hence, by following a backwards strategy, contact tracing efforts will increase the probability of successfully contain and quarantining this large number of earlier infected individuals, rather than simply focusing on the new case, who is likely to have infected nobody (because $k$ is very small). - -We can also use this number to prevent gathering of certain sized to reduce the epidemic by preventing potential superspreading events. Interventions can target to reduce the reproduction number in order to reduce the probability of having clusters of secondary cases. - +Nous pouvons également utiliser ce nombre pour empêcher les rassemblements de certaines tailles afin de réduire l'épidémie en prévenant les événements potentiels de surpopulation. Les interventions peuvent viser à réduire le nombre de reproductions afin de réduire la probabilité d'avoir des groupes de cas secondaires. ::::::::::::::::::::::::::::::::: challenge -### Backward contact tracing for Ebola +### Recherche rétrospective des contacts pour Ebola -Use the Ebola estimated parameters for `ebola_sim_clean` object from `{outbreaks}` package. +Utilisez les paramètres estimés pour Ebola pour `ebola_sim_clean` à partir de `{outbreaks}` package. -Calculate the probability of having a cluster of secondary infections caused by a primary case identified by backward tracing of size 5, 10, 15 or larger. +Calculez la probabilité d'avoir un groupe d'infections secondaires causées par un cas primaire identifié par traçage rétrospectif de taille 5, 10, 15 ou plus. -Would implementing a backward strategy at this stage of the Ebola outbreak increase the probability of containing and quarantining more onward cases? +La mise en œuvre d'une stratégie de traçage en amont à ce stade de l'épidémie d'Ebola augmenterait-elle la probabilité de contenir et de mettre en quarantaine un plus grand nombre de cas en aval ? :::::::::::::::: hint -Review how we estimated the probability of having clusters of a fixed size, given an offspring distribution mean and dispersion parameters, using the `superspreading::proportion_cluster_size()` function. +Examinez comment nous avons estimé la probabilité d'avoir des grappes de taille fixe, compte tenu de la moyenne de la distribution de la descendance et des paramètres de dispersion, à l'aide de la méthode des `superspreading::proportion_cluster_size()` fonction. :::::::::::::::: @@ -753,32 +749,32 @@ superspreading::proportion_cluster_size( ) ``` -The probability of having clusters of five people is 1.8%. At this stage, given this offspring distribution parameters, a backward strategy may not increase the probability of contain and quarantine more onward cases. +La probabilité d'avoir des grappes de cinq personnes est de 1,8 %. À ce stade, compte tenu des paramètres de distribution de la descendance, une stratégie rétrospective n'augmentera peut-être pas la probabilité de contenir et de mettre en quarantaine davantage de cas en amont. :::::::::::::::: -## Challenges +## Défis ::::::::::::::::::::::::: challenge -### Does Ebola have any superspreading event? +### Le virus Ebola se propage-t-il à grande échelle ? -'Superspreading events' can mean different things to different people, so [Lloyd-Smith et al., 2005](https://www.nature.com/articles/nature04153) proposed a general protocol for defining a superspreading event (SSE). If the number of secondary infections caused by each case, $Z$, follows a negative binomial distribution ($R, k$): + La notion d'"événement de surpopulation" peut revêtir des significations différentes selon les personnes. [Lloyd-Smith et al, 2005](https://www.nature.com/articles/nature04153) ont proposé un protocole général pour définir un événement de super propagation (ESS). Si le nombre d'infections secondaires causées par chaque cas, $Z$ suit une distribution binomiale négative ($R, k$) : -- We define an SSE as any infected individual who infects more than $Z(n)$ others, where $Z(n)$ is the nth percentile of the $Poisson(R)$ distribution. -- A 99th-percentile SSE is then any case causing more infections than would occur in 99% of infectious histories in a homogeneous population +- Nous définissons une ESS comme tout individu infecté qui infecte plus de $Z(n)$ autres, où $Z(n)$ est le nième percentile de l'échantillon de $Poisson(R)$ distribution. +- Un SSE du 99e centile est donc tout cas causant plus d'infections qu'il n'en surviendrait dans 99 % des histoires infectieuses d'une population homogène. -Using the corresponding distribution function, estimate the SSE threshold to define a SSE for the Ebola offspring distribution estimates for the `ebola_sim_clean` object from `{outbreaks}` package. +À l'aide de la fonction de distribution correspondante, estimez le seuil d'ESS pour définir un ESS pour les estimations de la distribution de la descendance d'Ebola pour l'ensemble de la population. `ebola_sim_clean` objet de `{outbreaks}` package. ::::::::::::::::: hint -In a Poisson distribution, the **lambda** or **rate** parameter are equal to the estimated **mean** from a negative binomial distribution. You can explore this in [The distribution zoo](https://ben18785.shinyapps.io/distribution-zoo/) shiny app. +Dans une distribution de Poisson, **lambda** ou **tau** sont égaux à la valeur estimée du paramètre **moyenne** d'une distribution binomiale négative. Vous pouvez étudier cette question dans [Le zoo de la distribution](https://ben18785.shinyapps.io/distribution-zoo/) une application brillante. ::::::::::::::::: ::::::::::::::::: solution -To get the quantile value for the 99th-percentile we need to use the [density function](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) for the Poisson distribution `dpois()`. +Pour obtenir la valeur du quantile pour le 99ème centile, nous devons utiliser la fonction [fonction de densité](https://sakai.unc.edu/access/content/group/3d1eb92e-7848-4f55-90c3-7c72a54e7e43/public/docs/lectures/lecture13.htm#probfunc) de la distribution de Poisson `dpois()`. ```{r} # get mean @@ -792,9 +788,9 @@ stats::qpois( ) ``` -Compare this values with the ones reported by [Lloyd-Smith et al., 2005](https://www.nature.com/articles/nature04153). See figure below: +Comparez ces valeurs avec celles rapportées par [Lloyd-Smith et al, 2005](https://www.nature.com/articles/nature04153). Voir la figure ci-dessous : -![Reported superspreading events (SSEs; diamonds) relative to estimated reproduction number R (squares) for twelve directly transmitted infections. Lines show 5–95 percentile range of the number of secondary cases following a Poisson distribution with lambda equal to the reproduction number ($Z∼Poisson(R)$), and crosses show the 99th-percentile proposed as threshold for SSEs. Stars represent SSEs caused by more than one source case. ‘Other’ diseases are: 1, Streptococcus group A; 2, Lassa fever; 3, Mycoplasma pneumonia; 4, pneumonic plague; 5, tuberculosis. R is not shown for ‘other’ diseases, and is off-scale for monkeypox.](fig/SEE-individual-reproductive-number-fig-d.png) +![Événements de surmultiplication signalés (diamants) par rapport au nombre de reproduction estimé R (carrés) pour douze infections directement transmissibles. Les lignes indiquent les percentiles 5-95 du nombre de cas secondaires suivant une distribution de Poisson avec lambda égal au nombre de reproduction ($Z∼Poisson(R)$), et les croix indiquent le 99e centile proposé comme seuil pour les ESS. Les étoiles représentent les ESS causés par plus d'un cas source. Les "autres" maladies sont les suivantes 1, streptocoque du groupe A ; 2, fièvre de Lassa ; 3, pneumonie à mycoplasme ; 4, peste pulmonaire ; 5, tuberculose. R n'est pas indiqué pour les "autres" maladies et est hors échelle pour la variole.](fig/SEE-individual-reproductive-number-fig-d.png) ::::::::::::::::: @@ -802,17 +798,17 @@ Compare this values with the ones reported by [Lloyd-Smith et al., 2005](https:/ ::::::::::::::::::::::::::::: challenge -### Expected proportion of transmission +### Proportion attendue de transmission -What is the proportion of cases responsible for 80% of transmission? +Quelle est la proportion de cas responsables de 80 % de la transmission ? -Use `{superspreading}` and compare the estimates for **MERS** using the offspring distributions parameters from this tutorial episode, with **SARS-1** and **Ebola** offspring distributions parameter accessible via the `{epiparameter}` R package. +L'utilisation `{superspreading}` et comparez les estimations pour **MERS** en utilisant les paramètres de distribution de la descendance de cet épisode du didacticiel, avec les estimations pour le **SRAS-1** et **Ebola** accessibles via le paramètre de distribution de la descendance `{epiparameter}` R. ::::::::::::::::::::: hint -To use `superspreading::proportion_transmission()` we recommend to read the [Estimate what proportion of cases cause a certain proportion of transmission](https://epiverse-trace.github.io/superspreading/reference/proportion_transmission.html) reference manual. +Pour utiliser `superspreading::proportion_transmission()` nous vous recommandons de lire le [Estimer quelle proportion de cas provoque une certaine proportion de transmission](https://epiverse-trace.github.io/superspreading/reference/proportion_transmission.html) le manuel de référence. -```{r,message=FALSE,warning=FALSE,echo=FALSE} +```{r, message=FALSE, warning=FALSE, echo=FALSE} library(epiparameter) epidist_string <- epiparameter::epiparameter_db( @@ -825,9 +821,9 @@ epidist_string <- epiparameter::epiparameter_db( base::paste(collapse = ", ") ``` -Currently, `{epiparameter}` has offspring distributions for `r epidist_string`. Let's access the offspring distribution `mean` and `dispersion` parameters for SARS-1: +Actuellement, `{epiparameter}` a des distributions de descendants pour `r epidist_string`. Accédons à la distribution des descendants `mean` et `dispersion` pour SARS-1 : -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} # Load parameters sars <- epiparameter::epiparameter_db( disease = "SARS", @@ -842,7 +838,7 @@ sars_params ::::::::::::::::::::: solution -```{r,message=FALSE,warning=FALSE} +```{r, message=FALSE, warning=FALSE} #' estimate for ebola -------------- ebola_epiparameter <- epiparameter::epiparameter_db( @@ -886,9 +882,9 @@ superspreading::proportion_transmission( ) ``` -MERS has the lowest percent of cases (2.1%) responsible of the 80% of the transmission, representative of highly overdispersed offspring distributions. +Le MERS présente le pourcentage le plus faible de cas (2,1 %) responsables de 80 % de la transmission, ce qui est représentatif d'une distribution très dispersée de la descendance. -Ebola has the highest percent of cases (43%) responsible of the 80% of the transmission. This is representative of offspring distributions with high dispersion parameters. +Le virus Ebola présente le pourcentage le plus élevé de cas (43 %) responsables de 80 % de la transmission. Ce pourcentage est représentatif des distributions de descendance dont les paramètres de dispersion sont élevés. ::::::::::::::::::::: @@ -896,39 +892,37 @@ Ebola has the highest percent of cases (43%) responsible of the 80% of the trans ::::::::::::::::: callout -### inverse-dispersion? +### inverse-dispersion ? -The dispersion parameter $k$ can be expressed differently across the literature. +Le paramètre de dispersion $k$ peut être exprimé différemment dans la littérature. -- In the Wikipedia page for the negative binomial, this parameter is defined in its reciprocal form (refer to the [variance equation](https://en.wikipedia.org/wiki/Negative_binomial_distribution)). -- In [the distribution zoo](https://ben18785.shinyapps.io/distribution-zoo/) shiny app, the dispersion parameter $k$ is named "Inverse-dispersion" but it is equal to parameter estimated in this episode. We invite you to explore this! +- Dans la page Wikipédia consacrée à la binomiale négative, ce paramètre est défini sous sa forme réciproque (voir la rubrique [équation de la variance](https://en.wikipedia.org/wiki/Negative_binomial_distribution)). +- Dans le cas d'une [le zoo de distribution](https://ben18785.shinyapps.io/distribution-zoo/) shiny app, le paramètre de dispersion $k$ est appelé "Inverse-dispersion" mais il est égal au paramètre estimé dans cet épisode. Nous vous invitons à explorer cette piste ! ::::::::::::::::: :::::::::::::::::::::::::::: callout -### heterogeneity? +### hétérogénéité ? -The individual-level variation in transmission is also referred as the heterogeneity in the transmission or degree of heterogeneity in [Lloyd-Smith et al., 2005](https://wellcomeopenresearch.org/articles/5-83), heterogeneous infectiousness in [Campbell et al., 2018](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2330-z) when introducing the `{outbreaker2}` package. Similarly, a contact network can store heterogeneous epidemiological contacts as in the documentation of the `{epicontacts}` package ([Nagraj et al., 2018](https://www.repidemicsconsortium.org/epicontacts/articles/epicontacts.html)). +La variation de la transmission au niveau individuel est également appelée hétérogénéité de la transmission ou degré d'hétérogénéité de la transmission. [Lloyd-Smith et al, 2005](https://wellcomeopenresearch.org/articles/5-83) l'infectiosité hétérogène dans les [Campbell et al, 2018](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2330-z) lors de l'introduction de la `{outbreaker2}` package. De même, un réseau de contacts peut stocker des contacts épidémiologiques hétérogènes, comme dans la documentation de l'étude `{epicontacts}` package ([Nagraj et al., 2018](https://www.repidemicsconsortium.org/epicontacts/articles/epicontacts.html)). :::::::::::::::::::::::::::: ::::::::::::::::::::::::::::: testimonial -### Read these blog posts +### Lisez ces articles de blog -The [Tracing monkeypox](https://plus.maths.org/content/monkeypox) article from the [JUNIPER](https://maths.org/juniper/) consortium showcases the usefulness of network models on contact tracing. +[Tracer la variole du singe](https://plus.maths.org/content/monkeypox) de la [JUNIPER](https://maths.org/juniper/) montre l'utilité des modèles de réseau pour la recherche de contacts. -The [Going viral](https://kucharski.substack.com/p/going-viral) post from Adam Kucharski shares insides from YouTube virality, disease outbreaks, and marketing campaigns on the conditions that spark contagion online. +[Devenir viral](https://kucharski.substack.com/p/going-viral) d'Adam Kucharski présente les conditions qui déclenchent la contagion en ligne : viralité sur YouTube, épidémies et campagnes de marketing. ::::::::::::::::::::::::::::: +::::::::::::::::::::::::::::::::::::: keypoints -::::::::::::::::::::::::::::::::::::: keypoints - -- Use `{epicontacts}` to calculate the number of secondary cases cause by a particular individual from linelist and contact data. -- Use `{fitdistrplus}` to empirically estimate the offspring distribution from the number of secondary cases distribution. -- Use `{superspreading}` to estimate the probability of having clusters of a given size from primary cases and inform contact tracing efforts. +- Utiliser `{epicontacts}` pour calculer le nombre de cas secondaires causés par une personne particulière à partir de la liste de diffusion et des données de contact. +- Utiliser `{fitdistrplus}` pour estimer empiriquement la distribution de la descendance à partir de la distribution du nombre de cas secondaires. +- Utilisez `{superspreading}` pour estimer la probabilité d'avoir des grappes d'une taille donnée à partir des cas primaires et informer les efforts de recherche de contacts. :::::::::::::::::::::::::::::::::::::::::::::::: - From 075724bbfe32b574ca0a5c3b72f70dde420844a1 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Thu, 23 Oct 2025 18:23:35 +0100 Subject: [PATCH 27/29] fix title without apostrophe --- episodes/superspreading-estimate.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/superspreading-estimate.Rmd b/episodes/superspreading-estimate.Rmd index bef8207c..5e310e9b 100644 --- a/episodes/superspreading-estimate.Rmd +++ b/episodes/superspreading-estimate.Rmd @@ -1,5 +1,5 @@ --- -title: Tenir compte de l'hypercontagion +title: 'Tenir compte du phénomène hypercontagieux' teaching: 30 exercises: 2 --- From 888e65ed555f4f9229b089004c9d4020ac938416 Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Fri, 24 Oct 2025 12:05:49 +0100 Subject: [PATCH 28/29] clarify definitions --- episodes/superspreading-estimate.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/episodes/superspreading-estimate.Rmd b/episodes/superspreading-estimate.Rmd index 5e310e9b..cb31b8b4 100644 --- a/episodes/superspreading-estimate.Rmd +++ b/episodes/superspreading-estimate.Rmd @@ -303,9 +303,9 @@ L'histogramme et le diagramme de densité montrent que la distribution de la des ### Récapitulation terminologique - A partir de la liste des lignes et des données de contact, nous calculons **le nombre de cas secondaires** causés par les personnes infectées observées. -- Alors que $R_{0}$ représente la transmission moyenne au sein de la population, nous pouvons définir l'indicateur **nombre de reproduction individuel** comme une variable aléatoire représentant le nombre **attendu** de cas secondaires causés par un individu infecté. -- En raison des effets stochastiques de la transmission, le nombre de cas secondaires causés par chaque cas est décrit par la **distribution de la descendance**. -- La distribution des descendants peut être modélisée par l'équation suivante **binomiale négative** avec une moyenne $R_{0}$ et un paramètre de dispersion $k$. +- Alors que $R_{0}$ représente la transmission moyenne au sein de la population, nous pouvons définir l'indicateur **nombre de reproduction individuel** comme le nombre d'infections secondaires causées par un individu infecté spécifique, qui varie d'un individu à l'autre. +- En raison des effets stochastiques de la transmission, le nombre d'infections secondaires causées par chaque personne infectée est décrit par la **distribution de la descendance**. +- La distribution des descendants peut être modélisée par l'équation suivante **binomiale négative** avec une moyenne $R_{0}$ et un paramètre de dispersion $k$, estimés à partir du nombre observé de cas secondaires. ::::::::::::::::::::::::::: From 44b45f5b65cc98f616146992051b2e33256a507c Mon Sep 17 00:00:00 2001 From: Andree Valle Campos Date: Fri, 24 Oct 2025 14:27:01 +0100 Subject: [PATCH 29/29] replace vis_epicontacts with plot --- episodes/superspreading-estimate.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/episodes/superspreading-estimate.Rmd b/episodes/superspreading-estimate.Rmd index cb31b8b4..7d12d0d4 100644 --- a/episodes/superspreading-estimate.Rmd +++ b/episodes/superspreading-estimate.Rmd @@ -107,14 +107,14 @@ Avec l'argument `directed = TRUE` nous configurons un graphe orienté. Ces direc ```{r, eval=FALSE} # visualise contact network -epicontacts::vis_epicontacts(epi_contacts) +plot(epi_contacts) ``` ```{r, echo=FALSE} withr::with_envvar(c(OPENSSL_CONF = file.path("/dev", "null")), { # visualise contact network network <- - vis_epicontacts(epi_contacts) %>% + plot(epi_contacts) %>% visNetwork::visPhysics(solver = "barnesHut") fname <- "network.html" visNetwork::visSave(network, fname) @@ -334,7 +334,7 @@ Calculez la distribution des cas secondaires d'Ebola à l'aide de la méthode de :::::::::::::::::: hint ⚠️ - **Étape facultative :** Cet ensemble de données a `r nrow(ebola_sim_clean$linelist)` cas. Exécution `epicontacts::vis_epicontacts()` peut prendre plusieurs minutes et utiliser beaucoup de mémoire pour les grandes épidémies telles que la liste des cas d'Ebola. Si vous utilisez un ordinateur plus ancien ou plus lent, vous pouvez sauter cette étape. + **Étape facultative :** Cet ensemble de données a `r nrow(ebola_sim_clean$linelist)` cas. Exécution `plot()` peut prendre plusieurs minutes et utiliser beaucoup de mémoire pour les grandes épidémies telles que la liste des cas d'Ebola. Si vous utilisez un ordinateur plus ancien ou plus lent, vous pouvez sauter cette étape. ::::::::::::::::::