Content from Accéder aux distributions des retards épidémiologiques
Dernière mise à jour le 2025-09-23 | Modifier cette page
Durée estimée : 30 minutes
Vue d'ensemble
Questions
- 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 ?
Objectifs
- 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.
Conditions préalables
Cet épisode nécessite que vous soyez familier avec :
la science des données Programmation de base avec R.
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
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. 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éfinitions
Regardez le glossaire pour connaître les définitions de toutes les périodes de la figure ci-dessus !
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). 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.
Les premiers modèles pour COVID-19 utilisaient des paramètres d’autres coronavirus. https://www.thelancet.com/article/S1473-3099(20)30144-4/fulltext
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 :
R
library(epiparameter)
library(tidyverse)
Le double point-virgule
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.
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.
Cela nous permet de nous souvenir des fonctions du paquet et d’éviter les conflits d’espace de noms.
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 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 :
R
generation_time <-
EpiNow2::Gamma(
mean = 4,
sd = 2,
max = 20
)
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.
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.
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(
epi_name = "generation"
)
SORTIE
Returning 3 results that match the criteria (2 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
SORTIE
# List of 3 <epiparameter> objects
Number of diseases: 2
❯ Chikungunya ❯ Influenza
Number of epi parameters: 1
❯ generation time
[[1]]
Disease: Influenza
Pathogen: Influenza-A-H1N1
Epi Parameter: generation time
Study: Lessler J, Reich N, Cummings D, New York City Department of Health and
Mental Hygiene Swine Influenza Investigation Team (2009). "Outbreak of
2009 Pandemic Influenza A (H1N1) at a New York City School." _The New
England Journal of Medicine_. doi:10.1056/NEJMoa0906089
<https://doi.org/10.1056/NEJMoa0906089>.
Distribution: weibull (days)
Parameters:
shape: 2.360
scale: 3.180
[[2]]
Disease: Chikungunya
Pathogen: Chikungunya Virus
Epi Parameter: generation time
Study: Salje H, Cauchemez S, Alera M, Rodriguez-Barraquer I, Thaisomboonsuk B,
Srikiatkhachorn A, Lago C, Villa D, Klungthong C, Tac-An I, Fernandez
S, Velasco J, Roque Jr V, Nisalak A, Macareo L, Levy J, Cummings D,
Yoon I (2015). "Reconstruction of 60 Years of Chikungunya Epidemiology
in the Philippines Demonstrates Episodic and Focal Transmission." _The
Journal of Infectious Diseases_. doi:10.1093/infdis/jiv470
<https://doi.org/10.1093/infdis/jiv470>.
Parameters: <no parameters>
Mean: 14 (days)
[[3]]
Disease: Chikungunya
Pathogen: Chikungunya Virus
Epi Parameter: generation time
Study: Guzzetta G, Vairo F, Mammone A, Lanini S, Poletti P, Manica M, Rosa R,
Caputo B, Solimini A, della Torre A, Scognamiglio P, Zumla A, Ippolito
G, Merler S (2020). "Spatial modes for transmission of chikungunya
virus during a large chikungunya outbreak in Italy: a modeling
analysis." _BMC Medicine_. doi:10.1186/s12916-020-01674-y
<https://doi.org/10.1186/s12916-020-01674-y>.
Distribution: gamma (days)
Parameters:
shape: 8.633
scale: 1.447
# ℹ Use `parameter_tbl()` to see a summary table of the parameters.
# ℹ Explore database online at: https://epiverse-trace.github.io/epiparameter/articles/database.html
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 !
Analyse systématique des données relatives aux agents pathogènes prioritaires
Les données de l’examen systématique des pathogènes prioritaires {epireview}
paquet R 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 pour plus d’informations sur l’utilisation de ces
paramètres avec epiparameter.
Temps de génération vs intervalle série
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.

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 (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.

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). 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).
Des délais moyens aux distributions de probabilité
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 et période infectieuse.

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).

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 | 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 | 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 | 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) |
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).
Intervalle de série
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.
Étant donné l’intervalle sériel des deux infections dans la figure ci-dessous :
- Laquelle serait la plus difficile à contrôler ?
- Pourquoi en concluez-vous ainsi ?

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é.
Laquelle serait la plus difficile à contrôler ?
COVID-19
Pourquoi concluez-vous cela ?
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.
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.
Choix des paramètres épidémiologiques
Dans cette section, nous utiliserons epiparameter pour obtenir l’intervalle sériel de COVID-19, comme alternative au temps de génération.
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
epiparameter::epiparameter_db(
disease = "covid"
)
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
epiparameter::epiparameter_db(
disease = "COVID",
epi_name = "serial"
)
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 <epiparameter>
objet de
classe.
INSENSIBLE À LA CASSE
epiparameter_db
est insensible
à la casse. 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.
Comme le suggèrent les résultats, pour résumer une
<epiparameter>
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(
disease = "covid",
epi_name = "serial"
) %>%
epiparameter::parameter_tbl()
SORTIE
Returning 4 results that match the criteria (3 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
SORTIE
# Parameter table:
# A data frame: 4 × 7
disease pathogen epi_name prob_distribution author year sample_size
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
1 COVID-19 SARS-CoV-2 serial interval <NA> Alene… 2021 3924
2 COVID-19 SARS-CoV-2 serial interval lnorm Nishi… 2020 28
3 COVID-19 SARS-CoV-2 serial interval weibull Nishi… 2020 18
4 COVID-19 SARS-CoV-2 serial interval norm Yang … 2020 131
Dans le epiparameter::parameter_tbl()
nous pouvons
également trouver différents types de distributions de probabilité (par
exemple, Log-normal, Weibull, Normal).
epiparameter utilise la fonction base
R
pour les distributions. C’est pourquoi Log normal
s’appelle lnorm
.
Les entrées avec une valeur manquante (<NA>
) 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
# get an <epiparameter> object
distribution <-
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "serial"
)
distribution %>%
# pluck the first entry in the object class <list>
pluck(1) %>%
# check if <epiparameter> object have distribution parameters
is_parameterised()
# check if the second <epiparameter> object
# have distribution parameters
distribution %>%
pluck(2) %>%
is_parameterised()
Les entrées paramétrées ont une méthode d’inférence
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
distribution[[1]]$metadata$inference_method
distribution[[2]]$metadata$inference_method
distribution[[4]]$metadata$inference_method
Trouvez vos distributions de retard !
Prenez 2 minutes pour explorer les epiparameter bibliothèque.
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.)
Trouvez :
Combien y a-t-il de distributions de délais pour cette maladie ?
Combien de types de distribution de probabilité (par exemple, gamma, log normale) y a-t-il pour un délai donné dans cette maladie ?
Posez la question :
Reconnaissez-vous les journaux ?
La revue de littérature d’{epiparameter} devrait- elle prendre en compte un autre article?
L’analyse epiparameter_db()
fonction avec
disease
compte à elle seule le nombre d’entrées comme :
- études, et
- les répartitions des retards.
Les epiparameter_db()
avec disease
et
epi_name
obtient une liste de toutes les entrées avec :
- la citation complète,
- le type d’une distribution de probabilité, et
- les valeurs des paramètres de la distribution.
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 :
- les type de la distribution de probabilité par délai, et
- l’auteur et l’année de l’étude.
Nous avons choisi d’explorer les distributions des retards d’Ebola :
R
# we expect 16 delay distributions for Ebola
epiparameter::epiparameter_db(
disease = "ebola"
)
SORTIE
Returning 17 results that match the criteria (17 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
SORTIE
# List of 17 <epiparameter> objects
Number of diseases: 1
❯ Ebola Virus Disease
Number of epi parameters: 9
❯ hospitalisation to death ❯ hospitalisation to discharge ❯ incubation period ❯ notification to death ❯ notification to discharge ❯ offspring distribution ❯ onset to death ❯ onset to discharge ❯ serial interval
[[1]]
Disease: Ebola Virus Disease
Pathogen: Ebola Virus
Epi Parameter: offspring distribution
Study: Lloyd-Smith J, Schreiber S, Kopp P, Getz W (2005). "Superspreading and
the effect of individual variation on disease emergence." _Nature_.
doi:10.1038/nature04153 <https://doi.org/10.1038/nature04153>.
Distribution: nbinom (No units)
Parameters:
mean: 1.500
dispersion: 5.100
[[2]]
Disease: Ebola Virus Disease
Pathogen: Ebola Virus-Zaire Subtype
Epi Parameter: incubation period
Study: Eichner M, Dowell S, Firese N (2011). "Incubation period of ebola
hemorrhagic virus subtype zaire." _Osong Public Health and Research
Perspectives_. doi:10.1016/j.phrp.2011.04.001
<https://doi.org/10.1016/j.phrp.2011.04.001>.
Distribution: lnorm (days)
Parameters:
meanlog: 2.487
sdlog: 0.330
[[3]]
Disease: Ebola Virus Disease
Pathogen: Ebola Virus-Zaire Subtype
Epi Parameter: onset to death
Study: The Ebola Outbreak Epidemiology Team, Barry A, Ahuka-Mundeke S, Ali
Ahmed Y, Allarangar Y, Anoko J, Archer B, Abedi A, Bagaria J, Belizaire
M, Bhatia S, Bokenge T, Bruni E, Cori A, Dabire E, Diallo A, Diallo B,
Donnelly C, Dorigatti I, Dorji T, Waeber A, Fall I, Ferguson N,
FitzJohn R, Tengomo G, Formenty P, Forna A, Fortin A, Garske T,
Gaythorpe K, Gurry C, Hamblion E, Djingarey M, Haskew C, Hugonnet S,
Imai N, Impouma B, Kabongo G, Kalenga O, Kibangou E, Lee T, Lukoya C,
Ly O, Makiala-Mandanda S, Mamba A, Mbala-Kingebeni P, Mboussou F,
Mlanda T, Makuma V, Morgan O, Mulumba A, Kakoni P, Mukadi-Bamuleka D,
Muyembe J, Bathé N, Ndumbi Ngamala P, Ngom R, Ngoy G, Nouvellet P, Nsio
J, Ousman K, Peron E, Polonsky J, Ryan M, Touré A, Towner R, Tshapenda
G, Van De Weerdt R, Van Kerkhove M, Wendland A, Yao N, Yoti Z, Yuma E,
Kalambayi Kabamba G, Mwati J, Mbuy G, Lubula L, Mutombo A, Mavila O,
Lay Y, Kitenge E (2018). "Outbreak of Ebola virus disease in the
Democratic Republic of the Congo, April–May, 2018: an epidemiological
study." _The Lancet_. doi:10.1016/S0140-6736(18)31387-4
<https://doi.org/10.1016/S0140-6736%2818%2931387-4>.
Distribution: gamma (days)
Parameters:
shape: 2.400
scale: 3.333
# ℹ 14 more elements
# ℹ Use `print(n = ...)` to see more elements.
# ℹ Use `parameter_tbl()` to see a summary table of the parameters.
# ℹ Explore database online at: https://epiverse-trace.github.io/epiparameter/articles/database.html
Maintenant, à partir de la sortie de
epiparameter::epiparameter_db()
Quelle est la distribution de la
descendance?
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
epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "incubation"
)
Nous utilisons parameter_tbl()
pour obtenir un
récapitulatif de toutes les données :
R
# we expect 2 different types of delay distributions
# for ebola incubation period
epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "incubation"
) %>%
parameter_tbl()
SORTIE
Returning 5 results that match the criteria (5 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
SORTIE
# Parameter table:
# A data frame: 5 × 7
disease pathogen epi_name prob_distribution author year sample_size
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
1 Ebola Virus Dise… Ebola V… incubat… lnorm Eichn… 2011 196
2 Ebola Virus Dise… Ebola V… incubat… gamma WHO E… 2015 1798
3 Ebola Virus Dise… Ebola V… incubat… gamma WHO E… 2015 49
4 Ebola Virus Dise… Ebola V… incubat… gamma WHO E… 2015 957
5 Ebola Virus Dise… Ebola V… incubat… gamma WHO E… 2015 792
Nous trouvons deux types de distributions de probabilités pour cette requête : log normale et gamma.
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!
Sélectionnez une distribution unique
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
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "serial",
author = "Nishiura",
subset = sample_size > 10
) %>%
epiparameter::parameter_tbl()
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(
disease = "covid",
epi_name = "serial",
single_epiparameter = TRUE
)
SORTIE
Using Nishiura H, Linton N, Akhmetzhanov A (2020). "Serial interval of novel
coronavirus (COVID-19) infections." _International Journal of
Infectious Diseases_. doi:10.1016/j.ijid.2020.02.060
<https://doi.org/10.1016/j.ijid.2020.02.060>..
To retrieve the citation use the 'get_citation' function
SORTIE
Disease: COVID-19
Pathogen: SARS-CoV-2
Epi Parameter: serial interval
Study: Nishiura H, Linton N, Akhmetzhanov A (2020). "Serial interval of novel
coronavirus (COVID-19) infections." _International Journal of
Infectious Diseases_. doi:10.1016/j.ijid.2020.02.060
<https://doi.org/10.1016/j.ijid.2020.02.060>.
Distribution: lnorm (days)
Parameters:
meanlog: 1.386
sdlog: 0.568
Attribuons cette <epiparameter>
à l’objet de
classe covid_serialint
objet.
R
covid_serialint <-
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "serial",
single_epiparameter = TRUE
)
Vous pouvez utiliser plot()
pour
<epiparameter>
pour visualiser les objets :
- le Fonction de densité de probabilité (PDF) et
- la Fonction de distribution cumulative (FDC).
R
# plot <epiparameter> object
plot(covid_serialint)

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
# plot <epiparameter> object
plot(covid_serialint, xlim = c(1, 60))
Extrayez les statistiques récapitulatives
Nous pouvons obtenir les mean
et l’écart-type
(sd
) à partir de ce <epiparameter>
plonger dans le summary_stats
l’objet :
R
# get the mean
covid_serialint$summary_stats$mean
SORTIE
[1] 4.7
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 <-
EpiNow2::LogNormal(
mean = covid_serialint$summary_stats$mean, # replaced!
sd = covid_serialint$summary_stats$sd, # replaced!
max = 20
)
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.
Distributions logarithmiques normales
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 <-
epiparameter::get_parameters(covid_serialint)
covid_serialint_parameters
SORTIE
meanlog sdlog
1.3862617 0.5679803
Cela permet d’obtenir un vecteur de classe
<numeric>
prêt à être utilisé comme entrée pour
n’importe quel autre paquet !
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 de référence.
Défis
L’intervalle sériel d’Ebola
Prenez 1 minute pour :
Accédez à l’intervalle de série Ebola avec la taille d’échantillon la plus élevée.
Réponse :
Qu’est-ce que le
sd
de la distribution épidémiologique ?Quelle est la
sample_size
utilisée dans cette étude ?
R
# ebola serial interval
ebola_serial <-
epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "serial",
single_epiparameter = TRUE
)
SORTIE
Using WHO Ebola Response Team, Agua-Agum J, Ariyarajah A, Aylward B, Blake I,
Brennan R, Cori A, Donnelly C, Dorigatti I, Dye C, Eckmanns T, Ferguson
N, Formenty P, Fraser C, Garcia E, Garske T, Hinsley W, Holmes D,
Hugonnet S, Iyengar S, Jombart T, Krishnan R, Meijers S, Mills H,
Mohamed Y, Nedjati-Gilani G, Newton E, Nouvellet P, Pelletier L,
Perkins D, Riley S, Sagrado M, Schnitzler J, Schumacher D, Shah A, Van
Kerkhove M, Varsaneux O, Kannangarage N (2015). "West African Ebola
Epidemic after One Year — Slowing but Not Yet under Control." _The New
England Journal of Medicine_. doi:10.1056/NEJMc1414992
<https://doi.org/10.1056/NEJMc1414992>..
To retrieve the citation use the 'get_citation' function
R
ebola_serial
SORTIE
Disease: Ebola Virus Disease
Pathogen: Ebola Virus
Epi Parameter: serial interval
Study: WHO Ebola Response Team, Agua-Agum J, Ariyarajah A, Aylward B, Blake I,
Brennan R, Cori A, Donnelly C, Dorigatti I, Dye C, Eckmanns T, Ferguson
N, Formenty P, Fraser C, Garcia E, Garske T, Hinsley W, Holmes D,
Hugonnet S, Iyengar S, Jombart T, Krishnan R, Meijers S, Mills H,
Mohamed Y, Nedjati-Gilani G, Newton E, Nouvellet P, Pelletier L,
Perkins D, Riley S, Sagrado M, Schnitzler J, Schumacher D, Shah A, Van
Kerkhove M, Varsaneux O, Kannangarage N (2015). "West African Ebola
Epidemic after One Year — Slowing but Not Yet under Control." _The New
England Journal of Medicine_. doi:10.1056/NEJMc1414992
<https://doi.org/10.1056/NEJMc1414992>.
Distribution: gamma (days)
Parameters:
shape: 2.188
scale: 6.490
R
# get the sd
ebola_serial$summary_stats$sd
SORTIE
[1] 9.6
R
# get the sample_size
ebola_serial$metadata$sample_size
SORTIE
[1] 305
Essayez de visualiser cette distribution en utilisant
plot()
.
Explorez également tous les autres éléments imbriqués dans l’élément
<epiparameter>
à l’intérieur de l’objet.
Partagez sur :
- Quels sont les éléments que vous trouvez utiles pour votre analyse ?
- Quels autres éléments souhaiteriez-vous voir figurer dans cet objet ? Comment ?
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
SORTIE
$censored
[1] TRUE
$right_truncated
[1] TRUE
$phase_bias_adjusted
[1] FALSE
Nous explorerons ces concepts au fil des épisodes !
Le paramètre de gravité d’Ebola
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.).
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 ?
Un délai informatif devrait mesurer le temps écoulé entre l’apparition des symptômes et la guérison ou le décès.
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.
R
# one way to get the list of all the available parameters
epiparameter_db(disease = "all") %>%
parameter_tbl() %>%
as_tibble() %>%
distinct(epi_name)
SORTIE
Returning 125 results that match the criteria (100 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
SORTIE
# A tibble: 13 × 1
epi_name
<chr>
1 incubation period
2 serial interval
3 generation time
4 onset to death
5 offspring distribution
6 hospitalisation to death
7 hospitalisation to discharge
8 notification to death
9 notification to discharge
10 onset to discharge
11 onset to hospitalisation
12 onset to ventilation
13 case fatality risk
R
ebola_severity <- epiparameter_db(
disease = "ebola",
epi_name = "onset to discharge"
)
SORTIE
Returning 1 results that match the criteria (1 are parameterised).
Use subset to filter by entry variables or single_epiparameter to return a single entry.
To retrieve the citation for each use the 'get_citation' function
R
# point estimate
ebola_severity$summary_stats$mean
SORTIE
[1] 15.1
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
ebola_severity$summary_stats$mean_ci
SORTIE
[1] 95
R
# limits of the confidence intervals
ebola_severity$summary_stats$mean_ci_limits
SORTIE
[1] 14.6 15.6
La distribution zoo
Explorez cette shinyapp appelée Le zoo de la distribution!
Suivez les étapes suivantes pour reproduire la forme de la
distribution d’intervalles sériels COVID à partir de
epiparameter (covid_serialint
objet) :
- Accédez au https://ben18785.shinyapps.io/distribution-zoo/ site web de l’application shiny,
- Allez dans le panneau de gauche,
- Gardez l’option Catégorie de distribution:
Continuous Univariate
, - Sélectionnez un nouveau Type de distribution:
Log-Normal
, - 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.
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.
Partagez à propos de :
- Quelles sont les autres fonctionnalités du site web que vous trouvez utiles ?
Dans le contexte des interfaces utilisateurs et des interfaces graphiques (GUI), comme le Zoo de la distribution 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.
Points clés
- 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.
Content from Quantifier la transmission
Dernière mise à jour le 2025-09-29 | Modifier cette page
Durée estimée : 30 minutes
Vue d'ensemble
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 ?
Objectifs
- Apprenez à estimer les paramètres de transmission à partir d’une
série chronologique de données sur les cas à l’aide du package
EpiNow2
.
Conditions préalables
Les étudiants doivent se familiariser avec les concepts suivants avant de suivre ce tutoriel :
Statistiques: distributions de probabilités, principe de l’analyse bayésienne.
Théorie des épidémies: Nombre de reproduction effectif.
Science des données: la transformation et la visualisation des données. Vous pouvez revoir l’épisode sur Agréger et visualiser les données d’incidence.
Rappel : le nombre de reproduction effectif, \(R_t\)
Le nombre de reproduction de base, \(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
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 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.
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.
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..
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)
library(incidence2)
library(tidyverse)
Le double point-virgule
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 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 package et d’éviter les conflits d’espace de noms.
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.
Inférence bayésienne
Le package R EpiNow2
utilise une méthode d’inférence
bayésienne inférence bayésienne
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 :
\(\text{Probabilité a posteriori} \propto \text{vraisemblance} \times \text{probabilité a priori}\)
Faites référence à la distribution de probabilité a priori et à la probabilité a posteriori a posteriori.
Dans la “Expected change in reports
”,
l’appel 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.
Distributions de délais et données de cas
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, 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)
SORTIE
# A tibble: 6,370 × 13
date region region_code cases_new cases_total deaths_new deaths_total
<date> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 2020-01-30 East Mi… E12000004 NA NA NA NA
2 2020-01-30 East of… E12000006 NA NA NA NA
3 2020-01-30 England E92000001 2 2 NA NA
4 2020-01-30 London E12000007 NA NA NA NA
5 2020-01-30 North E… E12000001 NA NA NA NA
6 2020-01-30 North W… E12000002 NA NA NA NA
7 2020-01-30 Norther… N92000002 NA NA NA NA
8 2020-01-30 Scotland S92000003 NA NA NA NA
9 2020-01-30 South E… E12000008 NA NA NA NA
10 2020-01-30 South W… E12000009 NA NA NA NA
# ℹ 6,360 more rows
# ℹ 6 more variables: recovered_new <dbl>, recovered_total <dbl>,
# hosp_new <dbl>, hosp_total <dbl>, tested_new <dbl>, tested_total <dbl>
Pour utiliser les données, nous devons les formater de manière à ce qu’elles comportent deux colonnes :
-
date
la date (en tant qu’objet date, voir?is.Date()
), -
confirm
: nombre de cas déclarés (confirmés) à cette date.
Utilisons tidyr et incidence2 pour cela :
R
cases_sliced <- incidence2::covidregionaldataUK %>%
dplyr::as_tibble() %>%
# Preprocess missing values
tidyr::replace_na(base::list(cases_new = 0)) %>%
# Compute the daily incidence
incidence2::incidence(
date_index = "date",
counts = "cases_new",
count_values_to = "confirm",
date_names_to = "date",
complete_dates = TRUE
) %>%
# Keep the first 90 dates
dplyr::slice_head(n = 90)
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
Pouvons-nous reproduire {incidence2} avec {dplyr}?
Nous pouvons obtenir un objet similaire à cases
à partir
de l’objet incidence2::covidregionaldataUK
à l’aide du
package dplyr.
R
incidence2::covidregionaldataUK %>%
dplyr::select(date, cases_new) %>%
dplyr::group_by(date) %>%
dplyr::summarise(confirm = sum(cases_new, na.rm = TRUE)) %>%
dplyr::ungroup() %>%
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
package de séries temporelles.
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
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
SORTIE
# A tibble: 90 × 2
date confirm
<date> <dbl>
1 2020-01-30 3
2 2020-01-31 0
3 2020-02-01 0
4 2020-02-02 0
5 2020-02-03 0
6 2020-02-04 0
7 2020-02-05 2
8 2020-02-06 0
9 2020-02-07 0
10 2020-02-08 8
# ℹ 80 more rows
Distribution des délais
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
le temps écoulé entre l’infection et l’apparition des symptômes (le période d’incubation) + délai entre l’apparition des symptômes et la notification du cas (délai de déclaration) .
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.
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 :
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.
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(
mean = 4,
sd = 2,
max = 20
)
incubation_period_fixed
SORTIE
- gamma distribution (max: 20):
shape:
4
rate:
1
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)

Pourquoi une distribution gamma ?
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()
prend en charge les distributions Gamma et
LogNormal()
les distributions log-normales, qui sont des
distributions pour les valeurs positives uniquement.
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
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)\]
et un écart-type (\(\sigma\)) suit une distribution normale avec un écart type \(\sigma_{\sigma}\):
\[\mbox{Normal}(\sigma,\sigma_{\sigma}^2).\]
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
incubation_period_variable <- EpiNow2::Gamma(
mean = EpiNow2::Normal(mean = 4, sd = 0.5),
sd = EpiNow2::Normal(mean = 2, sd = 0.5),
max = 20
)
incubation_period_variable
SORTIE
- gamma distribution (max: 20):
shape:
- normal distribution:
mean:
4
sd:
0.61
rate:
- normal distribution:
mean:
1
sd:
0.31
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.
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.
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
reporting_delay_variable <- EpiNow2::LogNormal(
meanlog = EpiNow2::Normal(mean = 2, sd = 0.5),
sdlog = EpiNow2::Normal(mean = 1, sd = 0.5),
max = 10
)
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 :
R
library(epiparameter)
R
epiparameter::epiparameter(
disease = "covid",
epi_name = "reporting delay",
prob_distribution =
epiparameter::create_prob_distribution(
prob_distribution = "lnorm",
prob_distribution_params = c(
meanlog = 2,
sdlog = 1
)
)
) %>%
plot()

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
library(tidyverse)
# 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
)
SORTIE
WARN [2025-09-29 19:37:51] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:37:51] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:37:54] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:37:54] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:37:56] dist_fit (chain: 1): The largest R-hat is 1.08, indicating chains have not mixed.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#r-hat -
WARN [2025-09-29 19:37:56] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:37:56] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:37:58] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:37:58] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:00] dist_fit (chain: 1): The largest R-hat is 1.07, indicating chains have not mixed.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#r-hat -
WARN [2025-09-29 19:38:00] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:00] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:02] dist_fit (chain: 1): The largest R-hat is 1.11, indicating chains have not mixed.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#r-hat -
WARN [2025-09-29 19:38:02] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:02] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:04] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:04] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:06] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:06] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:08] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:08] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
WARN [2025-09-29 19:38:11] dist_fit (chain: 1): The largest R-hat is 1.05, indicating chains have not mixed.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#r-hat -
WARN [2025-09-29 19:38:11] dist_fit (chain: 1): Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#bulk-ess -
WARN [2025-09-29 19:38:11] dist_fit (chain: 1): Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
Running the chains for more iterations may help. See
https://mc-stan.org/misc/warnings.html#tail-ess -
SORTIE
- lognormal distribution (max: 22):
meanlog:
- normal distribution:
mean:
0.24
sd:
0.11
sdlog:
- normal distribution:
mean:
0.98
sd:
0.1
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).
R
generation_time_variable <- EpiNow2::LogNormal(
mean = EpiNow2::Normal(mean = 3.6, sd = 0.5),
sd = EpiNow2::Normal(mean = 3.1, sd = 0.5),
max = 20
)
Trouver des estimations
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.
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()
:
R
# define Rt prior distribution
rt_prior <- EpiNow2::rt_opts(prior = EpiNow2::LogNormal(mean = 2, sd = 2))
Inférence bayésienne à l’aide de Stan
L’inférence bayésienne est réalisée à l’aide de méthodes MCMC avec le
programme Stan. 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()
).
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
withr::local_options(base::list(mc.cores = 4))
Pour connaître le nombre maximal de cœurs disponibles sur votre
machine, utilisez la commande parallel::detectCores()
.
Liste de vérification
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
# fixed alternatives
generation_time_fixed <- EpiNow2::LogNormal(
mean = 3.6,
sd = 3.1,
max = 20
)
reporting_delay_fixed <- EpiNow2::LogNormal(
mean = 2,
sd = 1,
max = 10
)
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
estimates <- EpiNow2::epinow(
# reported cases
data = cases,
# delays
generation_time = EpiNow2::generation_time_opts(generation_time_fixed),
delays = EpiNow2::delay_opts(incubation_period_fixed + reporting_delay_fixed),
# prior
rt = rt_prior
)
SORTIE
WARN [2025-09-29 19:42:07] epinow: There were 1 divergent transitions after warmup. See
https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
to find out why this is a problem and how to eliminate them. -
WARN [2025-09-29 19:42:07] epinow: Examine the pairs() plot to diagnose sampling problems
-
N’attendez pas que cela se poursuive
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.
<Nous pouvons optionnellement définir
stan = stan_opts(method = "vb")
pour utiliser une méthode
d’échantillonnage approximative. Cela devrait prendre moins d’une
minute. –>
R
# you can add the `stan` argument
EpiNow2::epinow(
...,
stan = EpiNow2::stan_opts(samples = 1000, chains = 3)
)
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.
Résultats
Nous pouvons extraire et visualiser des estimations du nombre de reproductions effectives au fil du temps :
R
estimates$plots$R

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 :
R
estimates$plots$growth_rate

Pour extraire un résumé des principaux paramètres de transmission à dernière date* dans les données :
R
summary(estimates)
SORTIE
measure estimate
<char> <char>
1: New infections per day 7929 (4634 -- 13046)
2: Expected change in reports Stable
3: Effective reproduction no. 0.97 (0.72 -- 1.2)
4: Rate of growth -0.012 (-0.11 -- 0.078)
5: Doubling/halving time (days) -58 (8.9 -- -6.5)
Ces estimations étant basées sur des données partielles, elles présentent un large intervalle d’incertitude.
Le résumé de notre analyse montre que le changement attendu dans les déclarations est de Stable avec l’estimation des nouvelles infections 7929 (4634 – 13046).
Le nombre effectif de reproduction \(R_t\) (à la dernière date des données) est de 0.97 (0.72 – 1.2).
Le taux de croissance exponentiel du nombre de cas est de -0.012 (-0.11 – 0.078).
Le temps de doublement (le temps nécessaire pour que le nombre de cas double) est de -58 (8.9 – -6.5).
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\).
Probabilité (\(p\)) | Changement attendu (\(p\)) |
---|---|
p < 0.05$ | Augmentation |
0,05$ p< 0,4$ | Augmentation probable |
0,4$ p< 0,6$ | Stable |
0,6$ p < 0,95$ | Vraisemblablement décroissante |
0,95$ p $ | Décroissante |
Intervalles crédibles
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é.
Liste de vérification
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
.
Défi
Défi
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 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, -
confirm
le nombre de déclarations de maladies (confirmées) pour une région à une date donnée.
Générer des estimations régionales de Rt à partir des
incidence2::covidregionaldataUK
à partir de la base de
données :
- 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 %>%
# use {tidyr} to preprocess missing values
tidyr::replace_na(base::list(cases_new = 0))
Pour manipuler les données, vous pouvez
R
regional_cases <- incidence2::covidregionaldataUK %>%
# use {tidyr} to preprocess missing values
tidyr::replace_na(base::list(cases_new = 0)) %>%
# use {incidence2} to convert aggregated data to incidence data
incidence2::incidence(
date_index = "date",
groups = "region",
counts = "cases_new",
count_values_to = "confirm",
date_names_to = "date",
complete_dates = TRUE
) %>%
dplyr::select(-count_variable) %>%
dplyr::filter(date < ymd(20200301))
Pour apprendre à faire l’estimation régionale de Rt, lisez la section
de la vignette “Get started” sur regional_epinow()
à
l’adresse https://epiforecasts.io/EpiNow2/articles/EpiNow2.html#regional_epinow
Pour obtenir des estimations régionales, nous utilisons les mêmes
arguments de epinow()
dans la fonction
regional_epinow()
:
R
estimates_regional <- EpiNow2::regional_epinow(
# cases
data = regional_cases,
# delays
generation_time = EpiNow2::generation_time_opts(generation_time_fixed),
delays = EpiNow2::delay_opts(incubation_period_fixed + reporting_delay_fixed),
# prior
rt = rt_prior
)
Visualisez les résultats avec :
R
estimates_regional$summary$summarised_results$table
estimates_regional$summary$plots$R

Points clés
- 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.
Content from Utiliser les distributions de délais dans l'analyse
Dernière mise à jour le 2025-09-24 | Modifier cette page
Durée estimée : 30 minutes
Vue d'ensemble
Questions
- Comment réutiliser les délais enregistrés dans le epiparameter avec mon pipeline d’analyse existant ?
Objectifs
- Utilisez les fonctions de distribution pour les distributions
continues et discrètes enregistrées en tant que objets
<epiparameter>
. - Convertissez une distribution continue en distribution discrète à l’aide de la fonction epiparameter.
- Connecter les sorties de epiparameter avec les entrées EpiNow2.
Conditions préalables
- Compléter le tutoriel Quantifier la transmission
Pour cet épisode, vous devez vous familiariser avec :
Science des données Programmation de base avec R.
Statistiques : Distributions de probabilité.
Théorie des épidémies : paramètres épidémiologiques, périodes de temps, nombre reproductif effectif.
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:
R
covid_serialint <-
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "serial",
author = "Nishiura",
single_epiparameter = TRUE
)
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 <-
EpiNow2::LogNormal(
mean = covid_serialint$summary_stats$mean, # replaced!
sd = covid_serialint$summary_stats$sd, # replaced!
max = 20
)
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 packageepiparameter 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
library(epiparameter)
library(EpiNow2)
library(tidyverse)
withr::local_options(list(mc.cores = 4))
Le double point-virgule
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.
Par example, dplyr::filter(data, condition)
utilise la
fonctionfilter()
du paquet `{dplyr}’.
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.
Fonctions de distribution
w En R, toutes les distributions statistiques disposent de fonctions qui permettant d’accéder aux éléments suivants :
-
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.
Fonctions pour la loi normale
Si vous en avez besoin, lisez en détail la rubrique Fonctions de probabilité R pour la loinormale 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 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
<epiparameter>
de votre choix !
R
# plot this to have a visual reference
plot(covid_serialint, day_range = 0:20)
R
# the density value at quantile value of 10 (days)
density(covid_serialint, at = 10)
SORTIE
[1] 0.01911607
R
# the cumulative probability at quantile value of 10 (days)
cdf(covid_serialint, q = 10)
SORTIE
[1] 0.9466605
R
# the quantile value (day) at a cumulative probability of 60%
quantile(covid_serialint, p = 0.6)
SORTIE
[1] 4.618906
R
# generate 10 random values (days) given
# the distribution family and its parameters
generate(covid_serialint, times = 10)
SORTIE
[1] 4.759338 6.289728 4.294399 2.739490 3.163588 4.367772 6.247139
[8] 3.735905 20.076741 5.234137
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()
?epiparameter:::quantile.epiparameter()
?epiparameter:::generate.epiparameter()
Fenêtre pour la recherche de contact et l’intervalle sériel
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). 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).
Avec l’intervalle sériel COVID-19 (covid_serialint
),
calculez :
- 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 ?
Dans la figure 5 du Fonctions
de probabilité R pour la loi normale la partie ombrée représente une
probabilité cumulée de 0.997
pour la valeur du quantile à
x = 2
.
R
plot(covid_serialint)
R
cdf(covid_serialint, q = 2)
SORTIE
[1] 0.1111729
R
cdf(covid_serialint, q = 6)
SORTIE
[1] 0.7623645
Étant donné l’intervalle sériel COVID-19 :
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.
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.
Si nous échangeons la question entre les jours et la probabilité cumulée à :
- 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
quantile(covid_serialint, p = 0.55)
L’interprétation pourrait être la suivante :
- 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
Nous nous rapprochons de la fin ! EpiNow2::LogNormal()
a
encore besoin d’une valeur maximale (max
).
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
<epiparameter>
.
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<epiparameter>
pour obtenir des valeurs
discrètes à partir d’une distribution continue.
Lorsque nous epiparameter::discretise()
la distribution
continue, nous obtenons une distribution discrète :
R
covid_serialint_discrete <-
epiparameter::discretise(covid_serialint)
covid_serialint_discrete
SORTIE
Disease: COVID-19
Pathogen: SARS-CoV-2
Epi Parameter: serial interval
Study: Nishiura H, Linton N, Akhmetzhanov A (2020). "Serial interval of novel
coronavirus (COVID-19) infections." _International Journal of
Infectious Diseases_. doi:10.1016/j.ijid.2020.02.060
<https://doi.org/10.1016/j.ijid.2020.02.060>.
Distribution: discrete lnorm (days)
Parameters:
meanlog: 1.386
sdlog: 0.568
Nous identifions ce changement dans la Distribution:
ligne de sortie de l’objet <epiparameter>
. Vérifiez à
nouveau cette ligne :
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
# continuous
plot(covid_serialint)
# discrete
plot(covid_serialint_discrete)
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 <-
quantile(covid_serialint_discrete, p = 0.99)
Durée de la quarantaine et de la période d’incubation
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). 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.).
Calculez :
- Dans quel délai précis 99 % des personnes présentant les symptômes de COVID-19 les manifestent-elles après l’infection ?
Quelle est la distribution des délais qui mesure le temps écoulé entre l’infection et l’apparition des symptômes ?
Les fonctions de probabilité pour les distributions
<epiparameter>
discrètes sont les
mêmes que celles que nous avons utilisées pour les distributions
continues !
R
# plot to have a visual reference
plot(covid_serialint_discrete, day_range = 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)
# 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)
R
covid_incubation <-
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "incubation",
single_epiparameter = TRUE
)
SORTIE
Using Linton N, Kobayashi T, Yang Y, Hayashi K, Akhmetzhanov A, Jung S, Yuan
B, Kinoshita R, Nishiura H (2020). "Incubation Period and Other
Epidemiological Characteristics of 2019 Novel Coronavirus Infections
with Right Truncation: A Statistical Analysis of Publicly Available
Case Data." _Journal of Clinical Medicine_. doi:10.3390/jcm9020538
<https://doi.org/10.3390/jcm9020538>..
To retrieve the citation use the 'get_citation' function
R
covid_incubation_discrete <- epiparameter::discretise(covid_incubation)
quantile(covid_incubation_discrete, p = 0.99)
SORTIE
[1] 19
99% des personnes qui développent les symptômes du COVID-19 le feront dans les 16 jours suivant l’infection.
Réfléchissez-y, ce résultat est-il attendu en termes épidémiologiques ?
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
# create a discrete distribution visualisation
# from a maximum value from the distribution
quantile(covid_serialint_discrete, p = 0.99) %>%
# generate quantile values
# as a sequence for each natural number
seq(1L, to = ., by = 1L) %>%
# coerce numeric vector to data frame
as_tibble_col(column_name = "quantile_values") %>%
mutate(
# calculate density values
# for each quantile in the density function
density_values =
density(
x = covid_serialint_discrete,
at = quantile_values
)
) %>%
# create plot
ggplot(
aes(
x = quantile_values,
y = density_values
)
) +
geom_col()

Rappelez-vous : Dans les infections à transmission pré-symptomatique, les intervalles sériels peuvent avoir des valeurs négatives (Nishiura et al., 2020). 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}
Maintenant, nous pouvons brancher le tout dans le fonction
EpiNow2::LogNormal()
!
- les statistiques sommaires
mean
etsd
de la distribution, - une valeur maximale
max
, - le nom de la
distribution
.
Lors qu’on utilise EpiNow2::LogNormal()
pour définir une
loi log-normale comme celle de
l’objetcovid_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)
On a alors :
R
serial_interval_covid <-
EpiNow2::LogNormal(
meanlog = covid_serialint_parameters["meanlog"],
sdlog = covid_serialint_parameters["sdlog"],
max = covid_serialint_discrete_max
)
serial_interval_covid
SORTIE
- lognormal distribution (max: 14):
meanlog:
1.4
sdlog:
0.57
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
epinow_estimates_cg <- epinow(
# cases
data = example_confirmed[1:60],
# delays
generation_time = generation_time_opts(serial_interval_covid)
)
base::plot(epinow_estimates_cg)

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.
Avertissement
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)
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)

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 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). Pour EpiNow2, nous pouvons spécifier
ces deux distributions de délais complémentaires dans l’argument
delays
.

Utiliser une période d’incubation pour COVID-19 afin d’estimer Rt
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.
Utilisez le dernier calcul d’ epinow()
à l’aide de
l’argument delays
et la fonction d’aide
delay_opts()
e.
L’argument delays
et la fonction
d’aidedelay_opts()
sont analogues à l’argument
generation_time
et à la fonction d’aide
generation_time_opts()
.
R
epinow_estimates <- epinow(
# cases
reported_cases = example_confirmed[1:60],
# delays
generation_time = generation_time_opts(covid_serial_interval),
delays = delay_opts(covid_incubation_time)
)
R
# generation time ---------------------------------------------------------
# get covid serial interval
covid_serialint <-
epiparameter::epiparameter_db(
disease = "covid",
epi_name = "serial",
author = "Nishiura",
single_epiparameter = TRUE
)
# adapt epiparameter to epinow2
covid_serialint_discrete_max <- covid_serialint %>%
epiparameter::discretise() %>%
quantile(p = 0.99)
covid_serialint_parameters <-
epiparameter::get_parameters(covid_serialint)
covid_serial_interval <-
EpiNow2::LogNormal(
meanlog = covid_serialint_parameters["meanlog"],
sdlog = covid_serialint_parameters["sdlog"],
max = covid_serialint_discrete_max
)
# incubation time ---------------------------------------------------------
# get covid incubation period
covid_incubation <- epiparameter::epiparameter_db(
disease = "covid",
epi_name = "incubation",
author = "Natalie",
single_epiparameter = TRUE
)
# adapt epiparameter to epinow2
covid_incubation_discrete_max <- covid_incubation %>%
epiparameter::discretise() %>%
quantile(p = 0.99)
covid_incubation_parameters <-
epiparameter::get_parameters(covid_incubation)
covid_incubation_time <-
EpiNow2::LogNormal(
meanlog = covid_incubation_parameters["meanlog"],
sdlog = covid_incubation_parameters["sdlog"],
max = covid_incubation_discrete_max
)
# epinow ------------------------------------------------------------------
# run epinow
epinow_estimates_cgi <- epinow(
# cases
data = example_confirmed[1:60],
# delays
generation_time = generation_time_opts(covid_serial_interval),
delays = delay_opts(covid_incubation_time)
)
base::plot(epinow_estimates_cgi)

Essayez de compléter le delays
avec un délai de
déclaration comme le reporting_delay_fixed
de l’épisode
précédent.
Dans quelle mesure a-t-il changé ?
Après avoir ajouté la période d’incubation, discutez-en :
- 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 ?
Comparez toutes les figures EpiNow2 générées précédemment.
Défis
Une astuce pour compléter le code
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
Elle permet d’accéder rapidement aux éléments suivants
covid_serialint_parameters["meanlog"]
et
covid_serialint_parameters["sdlog"]
.
Nous vous invitons à tester ceci dans des blocs de code et dans la console R !
Nombre de reproduction effectif d’Ebola ajusté en fonction des délais de déclaration
Téléchargez et lisez les données Ebola:
- 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 ?
Pour calculer la \(R_t\) en utilisant EpiNow2 nous avons besoin de :
- 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).
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()
R
# read data
# e.g.: if path to file is data/raw-data/ebola_cases.csv then:
ebola_confirmed <-
read_csv(here::here("data", "raw-data", "ebola_cases.csv")) %>%
incidence2::incidence(
date_index = "date",
counts = "confirm",
count_values_to = "confirm",
date_names_to = "date",
complete_dates = TRUE
) %>%
dplyr::select(-count_variable)
# list distributions
epiparameter::epiparameter_db(disease = "ebola") %>%
epiparameter::parameter_tbl()
R
# generation time ---------------------------------------------------------
# subset one distribution for the generation time
ebola_serial <- epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "serial",
single_epiparameter = TRUE
)
# adapt epiparameter to epinow2
ebola_serial_discrete <- epiparameter::discretise(ebola_serial)
serial_interval_ebola <-
EpiNow2::Gamma(
mean = ebola_serial$summary_stats$mean,
sd = ebola_serial$summary_stats$sd,
max = quantile(ebola_serial_discrete, p = 0.99)
)
# incubation time ---------------------------------------------------------
# subset one distribution for delay of the incubation period
ebola_incubation <- epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "incubation",
single_epiparameter = TRUE
)
# adapt epiparameter to epinow2
ebola_incubation_discrete <- epiparameter::discretise(ebola_incubation)
incubation_period_ebola <-
EpiNow2::Gamma(
mean = ebola_incubation$summary_stats$mean,
sd = ebola_incubation$summary_stats$sd,
max = quantile(ebola_serial_discrete, p = 0.99)
)
# epinow ------------------------------------------------------------------
# run epinow
epinow_estimates_egi <- epinow(
# cases
data = ebola_confirmed,
# delays
generation_time = generation_time_opts(serial_interval_ebola),
delays = delay_opts(incubation_period_ebola)
)
plot(epinow_estimates_egi)

Que faire avec les distributions de Weibull ?
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.
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.
R
# What parameters are available for Influenza?
epiparameter::epiparameter_db(disease = "influenza") %>%
epiparameter::parameter_tbl() %>%
count(epi_name)
SORTIE
# Parameter table:
# A data frame: 3 × 2
epi_name n
<chr> <int>
1 generation time 1
2 incubation period 15
3 serial interval 1
R
# generation time ---------------------------------------------------------
# Read the generation time
influenza_generation <-
epiparameter::epiparameter_db(
disease = "influenza",
epi_name = "generation"
)
influenza_generation
SORTIE
Disease: Influenza
Pathogen: Influenza-A-H1N1
Epi Parameter: generation time
Study: Lessler J, Reich N, Cummings D, New York City Department of Health and
Mental Hygiene Swine Influenza Investigation Team (2009). "Outbreak of
2009 Pandemic Influenza A (H1N1) at a New York City School." _The New
England Journal of Medicine_. doi:10.1056/NEJMoa0906089
<https://doi.org/10.1056/NEJMoa0906089>.
Distribution: weibull (days)
Parameters:
shape: 2.360
scale: 3.180
R
# EpiNow2 currently accepts Gamma or LogNormal
# other can pass the PMF function
influenza_generation_discrete <-
epiparameter::discretise(influenza_generation)
influenza_generation_max <-
quantile(influenza_generation_discrete, p = 0.99)
influenza_generation_pmf <-
density(
influenza_generation_discrete,
at = 0:influenza_generation_max
)
influenza_generation_pmf
SORTIE
[1] 0.00000000 0.06312336 0.22134988 0.29721220 0.23896828 0.12485164 0.04309454
R
# EpiNow2::NonParametric() can also accept the PMF values
generation_time_influenza <-
EpiNow2::NonParametric(
pmf = influenza_generation_pmf
)
# incubation period -------------------------------------------------------
# Read the incubation period
influenza_incubation <-
epiparameter::epiparameter_db(
disease = "influenza",
epi_name = "incubation",
single_epiparameter = TRUE
)
# Discretize incubation period
influenza_incubation_discrete <-
epiparameter::discretise(influenza_incubation)
influenza_incubation_max <-
quantile(influenza_incubation_discrete, p = 0.99)
influenza_incubation_pmf <-
density(
influenza_incubation_discrete,
at = 0:influenza_incubation_max
)
influenza_incubation_pmf
SORTIE
[1] 0.00000000 0.05749151 0.16687705 0.22443092 0.21507632 0.16104546 0.09746609
[8] 0.04841928
R
# EpiNow2::NonParametric() can also accept the PMF values
incubation_time_influenza <-
EpiNow2::NonParametric(
pmf = influenza_incubation_pmf
)
# epinow ------------------------------------------------------------------
# Read data
influenza_cleaned <-
outbreaks::influenza_england_1978_school %>%
select(date, confirm = in_bed)
# Run epinow()
epinow_estimates_igi <- epinow(
# cases
data = influenza_cleaned,
# delays
generation_time = generation_time_opts(generation_time_influenza),
delays = delay_opts(incubation_time_influenza)
)
plot(epinow_estimates_igi)

Prochaines étapes
Comment obtenir des paramètres de distribution à partir de distributions statistiques ?
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()
?
Regardez la vignette epiparameter sur l’extraction et la conversion des paramètres et sescas d’utilisations!
Comment estimer la distribution des délais pour la maladie X ?
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.
- Tutoriel en anglais : https://rpubs.com/tracelac/diseaseX
- Tutoriel en Español : https://epiverse-trace.github.io/epimodelac/EnfermedadX.html
Ensuite, Après avoir obtenu vos valeurs estimées,
vous pouvez créer manuellement vos propres objets de classe
<epiparameter>
à l’aide de la fonction
epiparameter::epiparameter()
! Jetez un coup d’œil à songuide
de référence sur “Créer un objet
<epiparameter>
”!
Enfin, jetez un coup d’œil au derniers packages R {epidist}
et {primarycensored}
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.
Points clés
- Utilisez les fonctions de distribution avec
<epiparameter>
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é.
Comment fonctionne “single_epiparameter” ?
En regardant la documentation d’aide pour
?epiparameter::epiparameter_db()
:single_epiparameter = TRUE
alors l’entrée paramétrée<epiparameter>
avec l’entrée la plus grande taille d’échantillon sera renvoyée.Qu’est-ce qu’un paramétré
<epiparameter>
? Regardez?is_parameterised
.