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

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 PF sur la paramétrisation du modèle seront les bienvenus.

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

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

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

On fait l'hypothèse que les patients guéris sont immunisés, si tel n'était le cas il faudrait une nouvelle transition R vers E.

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.

Pour le fittage des données, sur les 30 premiers jours de données réelles, on a plusieurs effets :

  • - arrivées d'avions, donc on alimente hors processus "naturel" épidémique jusqu'au 28 mars
  • - confinement qui intervient le 20 mars, donc R0 change.