Skip to content

Commit fe2d42f

Browse files
committed
differences for PR #10
1 parent c474f4f commit fe2d42f

9 files changed

+68
-57
lines changed

delays-access.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Accéder aux distributions des retards épidémiologiques
2+
title: Accéder aux distribution des délais épidémiologiques
33
teaching: 20
44
exercises: 10
55
editor_options:
@@ -15,7 +15,7 @@ editor_options:
1515
::::::::::::::::::::::::::::::::::::: objectives
1616

1717
- Obtenez les délais à partir d'une base de données de recherche documentaire avec `{epiparameter}`.
18-
- Obtenez les paramètres de distribution et les statistiques sommaires des distributions de retards.
18+
- Obtenez les paramètres de distribution et les statistiques sommaires des distributions de délais.
1919

2020
::::::::::::::::::::::::::::::::::::::::::::::::
2121

@@ -79,7 +79,7 @@ Cela nous permet de nous souvenir des fonctions du paquet et d'éviter les confl
7979

8080
## Le problème
8181

82-
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`).
82+
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`).
8383

8484
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 :
8585

@@ -195,7 +195,7 @@ Si nous mesurons les *intervalle sériel* dans des données réelles, nous const
195195

196196
![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)
197197

198-
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)).
198+
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)).
199199

200200
<!-- ajouter une référence sur les bonnes pratiques pour estimer les distributions -->
201201

@@ -369,7 +369,7 @@ distribution[[4]]$metadata$inference_method
369369

370370
::::::::::::::::::::::::::::::::: challenge
371371

372-
### Trouvez vos distributions de retard !
372+
### Trouvez vos distributions de délais !
373373

374374
Prenez 2 minutes pour explorer les `{epiparameter}` bibliothèque.
375375

@@ -392,7 +392,7 @@ Posez la question :
392392
L'analyse `epiparameter_db()` fonction avec `disease` compte à elle seule le nombre d'entrées comme :
393393

394394
- études, et
395-
- les répartitions des retards.
395+
- les répartitions des délais.
396396

397397
Les `epiparameter_db()` avec `disease` et `epi_name` obtient une liste de toutes les entrées avec :
398398

@@ -409,7 +409,7 @@ La combinaison de `epiparameter_db()` plus `parameter_tbl()` permet d'obtenir un
409409

410410
::::::::::::::::: solution
411411

412-
Nous avons choisi d'explorer les distributions des retards d'Ebola :
412+
Nous avons choisi d'explorer les distributions des délais d'Ebola :
413413

414414

415415
``` r
@@ -958,9 +958,9 @@ la mettre à jour à partir du dernier test d'épiparamètre
958958

959959
::::::::::::::::::::::::::::::::::::: keypoints
960960

961-
- Utilisez `{epiparameter}` pour accéder au catalogue des distributions de retards épidémiologiques.
961+
- Utilisez `{epiparameter}` pour accéder au catalogue des distributions de délais épidémiologiques.
962962
- 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.
963-
- Utilisez cette option pour sélectionner les distributions à retard unique. `parameter_tbl()` pour obtenir une vue d'ensemble des distributions de délais multiples.
963+
- 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.
964964
- 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.
965965

966966
::::::::::::::::::::::::::::::::::::::::::::::::

delays-functions.md

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ editor_options:
2424

2525
## Conditions préalables
2626

27-
- Compléter le tutoriel [Quantifier la transmission](https://epiverse-trace.github.io/tutorials-middle/quantify-transmissibility.html)
27+
- Compléter le tutoriel [Accéder aux distribution des délais épidémiologiques](../episodes/delays-functions.md)
28+
- Compléter le tutoriel [Quantifier la transmission](../episodes/quantify-transmissibility.md)
2829

2930
Pour cet épisode, vous devez vous familiariser avec :
3031

@@ -38,7 +39,16 @@ Pour cet épisode, vous devez vous familiariser avec :
3839

3940
## Introduction
4041

41-
`{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*:
42+
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}` :
43+
44+
45+
``` r
46+
library(epiparameter)
47+
library(EpiNow2)
48+
library(tidyverse)
49+
```
50+
51+
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*:
4252

4353

4454
``` r
@@ -51,7 +61,7 @@ covid_serialint <-
5161
)
5262
```
5363

54-
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()`
64+
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()`
5565

5666
```r
5767
generation_time <-
@@ -62,18 +72,7 @@ generation_time <-
6272
)
6373
```
6474

65-
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 !
66-
67-
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}` :
68-
69-
70-
``` r
71-
library(epiparameter)
72-
library(EpiNow2)
73-
library(tidyverse)
74-
75-
withr::local_options(list(mc.cores = 4))
76-
```
75+
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 `<epiparameter>`. Ils vous seront utiles en aval dans votre pipeline d'analyse !
7776

7877
::::::::::::::::::: checklist
7978

@@ -100,9 +99,9 @@ En R, toutes les distributions statistiques disposent de fonctions qui permettan
10099

101100
### Fonctions pour la loi normale
102101

103-
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 !
102+
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 !
104103

105-
![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)
104+
![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)
106105

107106
::::::::::::::::::::
108107

@@ -111,9 +110,13 @@ Si vous regardez `?stats::Distributions`, chaque type de distribution possède u
111110

112111
``` r
113112
# plot this to have a visual reference
114-
plot(covid_serialint, day_range = 0:20)
113+
114+
# continuous distribution
115+
plot(covid_serialint, xlim = c(0, 20))
115116
```
116117

118+
<img src="fig/delays-functions-rendered-unnamed-chunk-3-1.png" style="display: block; margin: auto;" />
119+
117120

118121
``` r
119122
# the density value at quantile value of 10 (days)
@@ -126,7 +129,7 @@ density(covid_serialint, at = 10)
126129

127130
``` r
128131
# the cumulative probability at quantile value of 10 (days)
129-
cdf(covid_serialint, q = 10)
132+
epiparameter::cdf(covid_serialint, q = 10)
130133
```
131134

132135
``` output
@@ -145,12 +148,12 @@ quantile(covid_serialint, p = 0.6)
145148
``` r
146149
# generate 10 random values (days) given
147150
# the distribution family and its parameters
148-
generate(covid_serialint, times = 10)
151+
epiparameter::generate(covid_serialint, times = 10)
149152
```
150153

151154
``` output
152-
[1] 4.759338 6.289728 4.294399 2.739490 3.163588 4.367772 6.247139
153-
[8] 3.735905 20.076741 5.234137
155+
[1] 2.797530 2.783424 6.818287 9.376313 4.309099 2.039614 3.148002 4.669432
156+
[9] 2.268098 3.584356
154157
```
155158

156159
::::::::: instructor
@@ -176,7 +179,7 @@ Avec l'intervalle sériel COVID-19 (`covid_serialint`), calculez :
176179

177180
::::::::::::::::: hint
178181

179-
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`.
182+
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`.
180183

181184
::::::::::::::::::::::
182185

@@ -189,15 +192,15 @@ plot(covid_serialint)
189192

190193

191194
``` r
192-
cdf(covid_serialint, q = 2)
195+
epiparameter::cdf(covid_serialint, q = 2)
193196
```
194197

195198
``` output
196199
[1] 0.1111729
197200
```
198201

199202
``` r
200-
cdf(covid_serialint, q = 6)
203+
epiparameter::cdf(covid_serialint, q = 6)
201204
```
202205

203206
``` output
@@ -275,13 +278,12 @@ Alors que pour une distribution **continue** nous traçons la courbe de la *Fonc
275278

276279

277280
``` r
278-
# continuous
279-
plot(covid_serialint)
280-
281-
# discrete
281+
# discrete distribution
282282
plot(covid_serialint_discrete)
283283
```
284284

285+
<img src="fig/delays-functions-rendered-unnamed-chunk-9-1.png" style="display: block; margin: auto;" />
286+
285287
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`.
286288

287289

@@ -309,19 +311,19 @@ Les fonctions de probabilité pour les distributions `<epiparameter>` **discrèt
309311

310312
``` r
311313
# plot to have a visual reference
312-
plot(covid_serialint_discrete, day_range = 0:20)
314+
plot(covid_serialint_discrete, xlim = c(0, 20))
313315

314316
# density value at quantile value 10 (day)
315317
density(covid_serialint_discrete, at = 10)
316318

317319
# cumulative probability at quantile value 10 (day)
318-
cdf(covid_serialint_discrete, q = 10)
320+
epiparameter::cdf(covid_serialint_discrete, q = 10)
319321

320322
# In what quantile value (days) do we have the 60% cumulative probability?
321323
quantile(covid_serialint_discrete, p = 0.6)
322324

323325
# generate random values
324-
generate(covid_serialint_discrete, times = 10)
326+
epiparameter::generate(covid_serialint_discrete, times = 10)
325327
```
326328

327329
::::::::::::::::::::::
@@ -449,11 +451,14 @@ Dans l'hypothèse d'un scénario COVID-19, utilisons les 60 premiers jours de l
449451

450452

451453
``` r
452-
epinow_estimates_cg <- epinow(
454+
# Set 4 cores to be used in parallel computations
455+
withr::local_options(list(mc.cores = 4))
456+
457+
epinow_estimates_cg <- EpiNow2::epinow(
453458
# cases
454459
data = example_confirmed[1:60],
455460
# delays
456-
generation_time = generation_time_opts(serial_interval_covid)
461+
generation_time = EpiNow2::generation_time_opts(serial_interval_covid)
457462
)
458463

459464
base::plot(epinow_estimates_cg)
@@ -471,6 +476,12 @@ L'utilisation de l'intervalle sériel au lieu du temps de génération est une a
471476

472477
::::::::::::::::::
473478

479+
::::::::::::::::::: instructor
480+
481+
We can stop the livecoding at this stage and move on with the practical.
482+
483+
:::::::::::::::::::
484+
474485
## Ajustement pour tenir compte des délais de déclaration
475486

476487
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)
@@ -494,12 +505,12 @@ Utilisez le dernier calcul d’ `epinow()` à l'aide de l’argument `delays` et
494505
L'argument `delays` et la fonction d’aide`delay_opts()` sont analogues à l’argument `generation_time` et à la fonction d’aide `generation_time_opts()`.
495506

496507
```r
497-
epinow_estimates <- epinow(
508+
epinow_estimates <- EpiNow2::epinow(
498509
# cases
499510
reported_cases = example_confirmed[1:60],
500511
# delays
501-
generation_time = generation_time_opts(covid_serial_interval),
502-
delays = delay_opts(covid_incubation_time)
512+
generation_time = EpiNow2::generation_time_opts(covid_serial_interval),
513+
delays = EpiNow2::delay_opts(covid_incubation_time)
503514
)
504515
```
505516

@@ -563,12 +574,12 @@ covid_incubation_time <-
563574
# epinow ------------------------------------------------------------------
564575

565576
# run epinow
566-
epinow_estimates_cgi <- epinow(
577+
epinow_estimates_cgi <- EpiNow2::epinow(
567578
# cases
568579
data = example_confirmed[1:60],
569580
# delays
570-
generation_time = generation_time_opts(covid_serial_interval),
571-
delays = delay_opts(covid_incubation_time)
581+
generation_time = EpiNow2::generation_time_opts(covid_serial_interval),
582+
delays = EpiNow2::delay_opts(covid_incubation_time)
572583
)
573584

574585
base::plot(epinow_estimates_cgi)
@@ -705,12 +716,12 @@ incubation_period_ebola <-
705716
# epinow ------------------------------------------------------------------
706717

707718
# run epinow
708-
epinow_estimates_egi <- epinow(
719+
epinow_estimates_egi <- EpiNow2::epinow(
709720
# cases
710721
data = ebola_confirmed,
711722
# delays
712-
generation_time = generation_time_opts(serial_interval_ebola),
713-
delays = delay_opts(incubation_period_ebola)
723+
generation_time = EpiNow2::generation_time_opts(serial_interval_ebola),
724+
delays = EpiNow2::delay_opts(incubation_period_ebola)
714725
)
715726

716727
plot(epinow_estimates_egi)
@@ -858,12 +869,12 @@ influenza_cleaned <-
858869
select(date, confirm = in_bed)
859870

860871
# Run epinow()
861-
epinow_estimates_igi <- epinow(
872+
epinow_estimates_igi <- EpiNow2::epinow(
862873
# cases
863874
data = influenza_cleaned,
864875
# delays
865-
generation_time = generation_time_opts(generation_time_influenza),
866-
delays = delay_opts(incubation_time_influenza)
876+
generation_time = EpiNow2::generation_time_opts(generation_time_influenza),
877+
delays = EpiNow2::delay_opts(incubation_time_influenza)
867878
)
868879

869880
plot(epinow_estimates_igi)
-239 Bytes
Loading
351 Bytes
Loading
-255 Bytes
Loading
-30 Bytes
Loading
9.49 KB
Loading
5.89 KB
Loading

md5sum.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"config.yaml" "823cd515b78b57be0c6ed75c0a357b26" "site/built/config.yaml" "2025-09-24"
55
"index.md" "32bc80d6f4816435cc0e01540cb2a513" "site/built/index.md" "2025-09-22"
66
"links.md" "8184cf4149eafbf03ce8da8ff0778c14" "site/built/links.md" "2025-09-22"
7-
"episodes/delays-access.Rmd" "89f15596d3a7fbcf0649770086f81110" "site/built/delays-access.md" "2025-09-23"
7+
"episodes/delays-access.Rmd" "5524226a814ce17229d6036171c49a09" "site/built/delays-access.md" "2025-10-08"
88
"episodes/quantify-transmissibility.Rmd" "e6b6eff8139d8c2914ffee015abe6007" "site/built/quantify-transmissibility.md" "2025-09-29"
9-
"episodes/delays-functions.Rmd" "7bc90c3b453e614691a6959c6770ae4d" "site/built/delays-functions.md" "2025-09-24"
9+
"episodes/delays-functions.Rmd" "fddee719dd2f72208816b2646572a44f" "site/built/delays-functions.md" "2025-10-08"
1010
"instructors/instructor-notes.md" "ca3834a1b0f9e70c4702aa7a367a6bb5" "site/built/instructor-notes.md" "2025-09-22"
1111
"learners/reference.md" "9aada1c331ee11f38e078457ba343c62" "site/built/reference.md" "2025-09-22"
1212
"learners/setup.md" "d472955b863de4966288e2ee7c583ab4" "site/built/setup.md" "2025-10-01"

0 commit comments

Comments
 (0)