Simulateur d'évolution d'épidémie de Virus, Covid-19 ou autre, via un modèle compartimental

keyboard_arrow_right Voir les chiffres réels en Polynésie Française

Ce simulateur montre une progression selon un modèle SIR étendu (Sain / Exposé / Infecté / Guéri (Recovered) / Hospitalisé / Décédé). Vous pouvez faire varier les paramètres sous le simulateur et modifier manuellement la courbe R0 directement sur le graph (pour simuler des vagues de confinement/déconfinement par exemple). A et C représente respectivement l'arrêt d'import des cas et la mise en place du confinement. Tout échange et tout retour de terrain (notamment en Polynésie Française) sur la paramétrisation du modèle seront les bienvenus.
Par défaut, le 1er jour du graph est à 100 cas infectés (+50 exposés). Ceci correspond pour la Polynésie au 15 août. On peut bien sûr modifier cela.
Par défaut également, la série R est initialisée avec les valeurs communiquées jusqu'au 22/11/2020 en PF et ensuite R prend une valeur constante à 1.15 (hypothèse optimiste avec toutes mesures inchangées).
Enfin, vous pouvez modifier R(t) sur toute la série. Pour ce faire, afficher R0 et vous pourrez modifier par drag and drop sur chaque point (fastidieux et un export, modification puis import est peut être plus simple). Attention, si vous changez la largeur temporelle du graph, il faudra recommencer, il est donc conseillé d'exporter R(t) si vous l'avez modifiée...

Vous pouvez modifier les paramètres dans chaque groupe ci-dessous :

Vous pouvez exporter les paramètres pour les importer plus tard, c'est utile si vous faites plusieurs simulations. Vous pouvez également modifier les paramètres avant de réimporter, il est possible de réimporter seulement quelques paramètres. Le format est JSON, le plus simple est que vous fassiez un premier export pour voir à quoi cela ressemble.

Vous pouvez exporter également la fonction R0(t).

Aspects techniques

Schémas de principe

Schématiquement, les compartiments se présentent comme suit :

Schéma de principe du modèle à compartiments pour COVID-19

Schéma de principe du modèle à compartiments pour COVID-19 : Timings

Les différents niveaux de soins sont représentés par H2 et H3, la différenciation se fait en amont (I1, I2, I3) afin d'avoir une différentation des durées (si besoin) et de pouvoir appliquer des statistiques connues.

Dans les paramètres d'initialisations, on prend comme hypothèse I1(0) = Nombre d'infectés initiaux, et E(0) = 0.5 * I1(0)

Définitions

Sain (S) : personne saine ne portant pas le virus
Exposé (E) : personne portant le virus en incubation, à ce stade la personne ne présente pas les symptomes mais peut être contagieuse (il faudrait ajouter un état pour le prendre en compte sans changer la période infectieuse)
Infecté (I) : personne portant le virus et présentant les symptômes, avec 3 niveaux 1 étant le moins grave
Hospitalisé (H) : personne hospitalisée, avec 2 niveaux 2 étant le moins grave
R0 : nombre de personnes contaminées par un malade contagieux
βEtat : taux de transmission de la maladie dans cet état
TIncubation : Durée pendant laquelle une personne est infectée mais encore non contagieuse
TInfectieux : Durée pendant laquelle une personne est contagieuse
TAvantHospitalisation : Durée avant qu'une personne ne soit hospitalisée
TAvantRetablissement : Durée pendant laquelle une personne est hospitalisée avant d'être guérie
TReanimation : Durée pendant laquelle une personne est hospitalisée en réa avant de décéder
TDecesEnHopital : Durée pendant laquelle une personne est hospitalisée hors réa avant de décéder
TDecesHorsHopital : Durée avant décès pour les décès hors hopital
TImmunité : Durée pendant laquelle on est immunisé après une infection

Jeu d'équations utilisées

NB : on utilise les populations normalisées et I désigne par exemple la proportion de personnes infectées dans la population totale.

dS(i) / dt
= - S(i-1) * (βI1 * I1(i-1) + βI2 * I2(i-1) + βI3 * I3(i-1)) - βE * S(i-1) * E2(i-1) +
R(i-1) / TImmunité
dE1(i) / dt
= S(i-1) * (βI1 * I1(i-1) + βI2 * I2(i-1) + βI3 * I3(i-1)) + βE * S(i-1) * E2(i-1) -
E1(i-1) / TInc
dE2(i) / dt
=
E1(i-1) / TInc
-
E2(i-1) / TInc-inf
dI1(i) / dt
=
(1- μ - ν) * E2(i-1) / TInc-inf
-
(1- ε) * I1(i-1) / TContagion
-
ε * I1(i-1) / TDecesHorsHopital
dI2(i) / dt
=
μ * E2(i-1) / TInc-inf
-
I2(i-1) / TAvantHospitalisation
dI3(i) / dt
=
ν * E2(i-1) / TInc-inf
-
I3(i-1) / TAvantHospitalisation
dH2(i) / dt
=
I2(i-1) / TAvantHospitalisation
+ (1 - φ) *
H3(i-1) / TReanimation
-
(1 - ω) * H2(i-1) / TRetablissement
-
ω * H2(i-1) / TDecesEnHopital
dH3(i) / dt
=
I3(i-1) / TAvantHospitalisation
-
H3(i-1) / TReanimation
dR(i) / dt
=
I1(i-1) / TContagion
+
(1 - ω) * H2(i-1) / TRetablissement
-
R(i-1) / TImmunité
dD(i) / dt
=
φ * H3(i-1) / TReanimation
+
ε * I1(i-1) / TDecesHorsHopital
+
ω * H2(i-1) / TDecesEnHopital

R0 et taux de transmission

Dans un modèle SIR simple, on peut écrire :

β =
R0 / TContagion

Dans le présent modèle, on aura :

R0 = Σ( βe * p(e) * Te)

où βe est le taux de transmission dans un état infectieux e, p(e) la probabilité de cet état et Te la durée de cet état. On utilise en outre un seul taux β représentant le taux de transmission dans l'état I1 et des coefficients αe pour ajuster les autres taux. Ainsi exprimé, on aura :

β =
R0 / TContagion * ((1-μ-ν) + μ * αI2 + ν * αI3) + TInc-inf * αE2

Initialisation des paramètres (cas du Covid-19/SARS-CoV-2)

Littérature

Les valeurs ne sont pas établies aujourd'hui avec certitudes et la littérature récente donne plusieurs valeurs pour les différentes caractéristiques de la maladie. En voici qui ont servi ici :

SourceParamètreValeur
https://www.imperial.ac.uk/media/imperial-college/medicine/sph/ide/gida-fellowships/Imperial-College-COVID19-Europe-estimates-and-NPI-impact-30-03-2020.pdf R0 3.87 (sans confinement) / 1.43 (avec confinement)
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article R0 5.7
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article (table 5) TContagion 9 jours
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article TIncubation 5.2 jours
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article TAvantHospitalisation 5.5 jours (hors épidémie surveillée) / 1.5 jours (en épidémie surveillée)
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article TAvantRétablissement 11.5 jours
https://wwwnc.cdc.gov/eid/article/26/7/20-0282_article TRéanimation 11.2 jours (avant décès)
https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(20)30566-3/fulltext TContagion 20 jours
https://annals.org/aim/fullarticle/2762808/incubation-period-coronavirus-disease-2019-covid-19-from-publicly-reported?searchresult=1 TIncubation 5.1 jours

Fitting

Une fois les valeurs préssentie assignée, il convient de modifier certains paramètres dépendant de la population ou des équipements sanitaires : R0 ainsi que les paramètres de suites cliniques.

Idéalement, il faudrait appliquer une minimisation des écarts sur une série de données connue.

Limitations, améliorations

Par défaut, on fait l'hypothèse que les patients guéris sont immunisés mais vous pouvez activer une immunité temporaire dans les paramètres techniques.

On ne tient pas compte de la capacité de charge hostpitalière, on peut imaginer que le taux de décès soit une fonction de celle ci, et introduire une transition H2 vers H3 dépendant de la capacité hospitalière également.

Une propagation 2D pourrait être représentée par ce modèle en considérant des compartiments par zones géographiques (pour les I et E essentiellement) et des paramètres par zone, tenant compte de la densité de population notamment, ainsi que des flux d'échanges.

De la même façon, une décomposition en compartiments d'âge serait possible, moins pour visualiser les effets par tranche d'âge que pour mieux modéliser les transmissions. Il faudrait revoir les équations pour généraliser en utilisant des matrices.

Hypothèse de population constante : on ne tient pas compte de la mortalité naturelle ni de la natalité ni des migrations de population entre le système et l'extérieur. Si on voulait en tenir compte (sur une période longue), il suffirait d'ajouter des taux à S et D, en admettant que les entrants sont sains.

Références

Pour le principe

Pour les initialisations des paramètres

Historique

  • Mars 2020 : Création
  • Avril 2020 : Séparation Etats E
  • Avril 2020 : Ajout exports/imports
  • 20 octobre 2020 : Actualisation paramètres initiaux PF
  • 04 novembre 2020 : Actualisation paramètres initiaux PF
  • 04 novembre 2020 : Ajout de la réinfection possible
  • 04 novembre 2020 : Ajout de la réinfection possible
  • 23 novembre 2020 : Actualisation courbe R0 avec suite à 1.3
  • 30 novembre 2020 : Actualisation courbe R0 avec suite optimiste à 1.15
Pour me contacter, un mail à Fabien Crépin