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éfinition des périodes clés. A partir de Xiang et al, 2021
Définition des périodes clés. A partir de Xiang et al, 2021

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.

Vidéo du MRC Centre for Global Infectious Disease Analysis, Ep 76. Science In Context - Epi Parameter Review Group avec le Dr Anne Cori (27-07-2023) at https://youtu.be/VvpYHhFDIjI?si=XiUyjmSV1gKNdrrL
Vidéo du MRC Centre for Global Infectious Disease Analysis, Ep 76. Science In Context - Epi Parameter Review Group avec le Dr Anne Cori (27-07-2023) at https://youtu.be/VvpYHhFDIjI?si=XiUyjmSV1gKNdrrL

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.

Schéma de la relation entre les différentes périodes de transmission entre un infecteur et un infecté dans une paire de transmission. La fenêtre d’exposition est définie comme l’intervalle de temps entre l’exposition au virus et la fenêtre de transmission est définie comme l’intervalle de temps pour la transmission ultérieure par rapport à la durée de l’infection (Chung Lau et al., 2021).
Schéma de la relation entre les différentes périodes de transmission entre un infecteur et un infecté dans une paire de transmission. La fenêtre d’exposition est définie comme l’intervalle de temps entre l’exposition au virus et la fenêtre de transmission est définie comme l’intervalle de temps pour la transmission ultérieure par rapport à la durée de l’infection (Chung Lau et al., 2021).

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.

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

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

Distribution d’intervalles sériels ajustée pour (a) COVID-19 et (b) MERS-CoV sur la base des paires de transmission signalées en Arabie saoudite. Nous avons ajusté trois distributions couramment utilisées, les distributions Log normal, Gamma et Weibull, respectivement (Althobaity et al., 2022).
Distribution d’intervalles sériels ajustée pour (a) COVID-19 et (b) MERS-CoV sur la base des paires de transmission signalées en Arabie saoudite. Nous avons ajusté trois distributions couramment utilisées, les distributions Log normal, Gamma et Weibull, respectivement (Althobaity et al., 2022).

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 ?
Intervalle en série des infections par le nouveau coronavirus (COVID-19) superposé à une distribution publiée du SRAS. (Nishiura et al., 2020)
Intervalle en série des infections par le nouveau coronavirus (COVID-19) superposé à une distribution publiée du SRAS. (Nishiura et al., 2020)

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

Comment fonctionne “single_epiparameter” ?

En regardant la documentation d’aide pour ?epiparameter::epiparameter_db():

  • Si plusieurs entrées correspondent aux arguments fournis et que single_epiparameter = TRUE alors l’entrée paramétrée <epiparameter> avec l’entrée la plus grande taille d’échantillon sera renvoyée.
  • Si plusieurs entrées sont égales après ce tri, l’option première entrée de la liste sera retournée.

Qu’est-ce qu’un paramétré <epiparameter>? Regardez ?is_parameterised.

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 ?

Utilisez le $ et l’opérateur tabulation ou pour les explorer sous la forme d’une liste extensible :

R

covid_serialint$

Utilisez la touche str() pour afficher la structure du <epiparameter> R.

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

  1. Accédez au https://ben18785.shinyapps.io/distribution-zoo/ site web de l’application shiny,
  2. Allez dans le panneau de gauche,
  3. Gardez l’option Catégorie de distribution: Continuous Univariate,
  4. Sélectionnez un nouveau Type de distribution: Log-Normal,
  5. Déplacez le curseurs c’est-à-dire l’élément de contrôle graphique qui vous permet d’ajuster une valeur en déplaçant une poignée le long d’une piste ou d’une barre horizontale jusqu’à l’emplacement du curseur. covid_serialint paramètres.

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

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 !

Les quatre fonctions de probabilité de la loi normale (Jack Weiss, 2012)
Les quatre fonctions de probabilité de la loi normale (Jack Weiss, 2012)

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 et sd 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)

Calendrier pour la déclaration de la chaîne de la maladie, Pays-Bas. Lab, laboratoire ; PHA, autorité de santé publique. A partir de Marinović et al, 2015
Calendrier pour la déclaration de la chaîne de la maladie, Pays-Bas. Lab, laboratoire ; PHA, autorité de santé publique. A partir de Marinović et al, 2015

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.

R_{t} est une mesure de la transmission au moment t. Les observations après le temps t doivent être ajustées. ICU, unité de soins intensifs. A partir de Gostic et al, 2020
\(R_{t}\) est une mesure de la transmission au moment \(t\). Les observations après le temps \(t\) doivent être ajustées. ICU, unité de soins intensifs. A partir de Gostic et al, 2020

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.

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