Modéliser une épidémie

Un petit tour du côté du modèle SIR

L’île de Zeest 1 est une petite île2 de 1000 âmes, située au large du continent européen. Il s’agit d’un endroit tranquille et un peu reculé, car le seul moyen d’y parvenir est bien entendu par bateau, qui part le matin et revient le soir. Il s’agit donc d’un endroit où on prend le temps, peuplé principalement de retraités qui jouissent de leur retraite dûment obtenue. On aime s’y promener, discuter avec ses voisins de tout et de rien, aller au marché, taper la carte, supporter l’équipe locale de pétanque qui s’entraîne pour le championnat régional, etc. Bref, un petit bout de terre très convoité, où les places sont rares : la liste d’attente de l’unique agence immobilière de l’île compte plus de 300 envieux.

Mais voilà : depuis quelques semaines, une nouvelle maladie3 frappe le continent : la violite. Elle tire son nom du teint qu’elle donne aux personnes infectées, car elle s’attaque aux globules rouges pour en changer la couleur, ce qui s’accompagne évidemment d’une diminution du transport d’oxygène et de tous les désagréments qui vont avec. Heureusement, la maladie n’est pas mortelle si elle est prise en charge à temps. Néanmoins, la situation inquiète le maire de l’île, André Gérard, vu la forme de coupe que forme la pyramide des âges de ses administrés et leur santé parfois vacillante : il ne faudrait pas que les habitants se mettent à tomber comme des mouches. Après avoir commandé son contingent de pyrrozine4, un anti-pelliculaire reconverti et seul remède connu contre la violite, le maire passe un coup de fil à sa fille, Louise, mathématicienne et à son frère, Guy, informaticien. À trois, leur but va être de prédire et de comprendre les effets qu’une éventuelle épidémie pourrait avoir afin de prendre les mesures qui s’imposent.

Toute ressemblance avec une épidémie existante ne serait que fortuite !

Ce que je vais faire dans cet article n’a aucun pouvoir prédictif (d’autant que le modèle employé est très simple) : il y a des gens qui font ça bien mieux que moi avec des données réelles, ce qui ne sera pas le but ici :)

Vous l’aurez compris, on va parler d’épidémie, de R0R_0 et d’immunité de groupe. Et, à côté du role play, on va faire un peu de maths pour bien comprendre :pirate:

Dans ce tutoriel, pour les parties plus mathématiques d’interprétation, je vais partir du principe que vous n’êtes pas étranger aux notions de statistiques (simples) et que vous connaissez le principe de dérivée et d’intégration (et éventuellement d’équation différentielle).


  1. À prononcer à l’holandaise: "zééést".
  2. … imaginaire ;)
  3. … imaginaire, toujours !
  4. … devinez :p

Approche stochastique : simuler et constater

On va donc tenter de simuler une épidémie. Évidemment, les résultats vont dépendre de la manière dont cette simulation va avoir lieu, mais on va essayer de coller à une réalité épidémique. On va débuter en utilisant le modèle SIR qui est le modèle de base en épidémiologie, car il s’applique sous hypothèses plus ou moins fortes à plein de cas différents. :magicien:

Le modèle Susceptible-Infecté-Guéri (SIR)

On va commencer par distinguer 3 stades de la maladie :

  • Susceptible (SS) : la personne n’a pas encore été infectée par la maladie.
  • Infecté (II) : la personne est atteinte de la maladie. Partons du principe que dans cet état, elle est également contagieuse et peut donc infecter d’autres personnes susceptibles. Du coup, on part ici du principe que la personne continue à avoir des contacts avec l’extérieur même si elle est malade.
  • Guéri (RR, pour recovered en anglais) : la personne n’est plus malade et n’est plus contagieuse. On va également partir du principe qu’elle est immunisée à vie.

On verra qu’on peut ensuite complexifier quasiment à l’envi cette situation.

Notons qu’une personne ne peut pas appartenir à plusieurs catégories à la fois : il s’agit en effet d’un modèle compartimental, où chaque individu est dans un compartiment donné et peut évoluer pour passer dans un autre compartiment, ici dans le sens SIRS\rightarrow I\rightarrow R. Si on note S(t)S(t) le pourcentage d’individus dans le compartiment SS au temps tt, on a (avec 1=100%1=100\%) que

t0:S(t)+I(t)+R(t)=1.\forall t \geq 0: S(t) + I(t) + R(t) = 1.

Et on espère évidemment que limtI(t)=0\displaystyle\lim_{t\rightarrow\infty} I(t)=0, autrement dit que l’épidémie s’arrête.

On va également partir du principe que le passage d’un compartiment à un autre est purement statistique : par exemple un individu infecté a une certaine probabilité, qu’on va noter β\beta, d’infecter un autre individu qui ne l’est pas encore. À l’échelle macroscopique, c’est relativement réaliste : plus qu’une probabilité d’infecter, il faut voir ça comme le fait que les personnes auront plus ou moins de contacts avec l’extérieur durant le temps où elles sont contagieuses1. De même, la probabilité de guérison, qu’on va noter γ\gamma, modélise simplement le fait que certains sont malades plus longtemps que d’autres. On reprend généralement tout ceci dans un schéma de la sorte :

SIR.png
β\beta est la probabilité pour un individu de passer de SS à II tandis que γ\gamma est la probabilité de passer de II à RR. Les calculs justifiant pourquoi la probabilité totale est de βS(t)I(t)\beta\,S(t)\,I(t) et γI(t)\gamma\,I(t) seront détaillés plus bas, n’ayez crainte :pirate:

À l’échelle d’une personne donnée, la probabilité d’infection et de guérison suivent toutes deux une loi géométrique. Soit p[0;1]p \in[0;1] la probabilité de passer d’un compartiment à un autre et kk le nombre d’essais (rencontre d’une personne infectée pour la transition SIS\rightarrow I ou temps qui passe pour la transition IRI\rightarrow R), la probabilité d’y parvenir à la kkième tentative est donnée par

P[X=k]=(1p)k1p,P[X=k] = (1-p)^{k-1}\,p,

c’est-à-dire la probabilité de (k1)(k-1) échecs, suivie de la probabilité d’un succès. C’est cette même loi qui modélise la probabilité que vous fassiez un 3 au dé si c’est la quatrième fois que vous essayez. Notez qu’en moyenne2, le nombre de tentatives nécessaires est donné par

E[X]=1p.\mathbb{E}[X]=\frac{1}{p}.

Ici, kk est donc aussi bien le nombre de personnes infectées rencontrées (SIS\rightarrow I) que le nombre d’unités de temps passée à être malade (IRI\rightarrow R). Et donc, si le taux d’infection est de β\beta = 20%, alors une personne susceptible finira infectée en moyenne au bout de 1/β1/\beta = 5 contacts, et si le taux de guérison est de γ\gamma = 10%, alors la personne sera guérie en moyenne au bout de 1/γ1 / \gamma = 10 unités de temps.

La simulation

Bien entendu, mettre toute l’île en quarantaine préventive est irréaliste : la plupart des produits viennent par bateau et, vu que l’île ne possède pas d’hôpital, plusieurs résidents doivent retourner régulièrement sur le continent, sans compter les quelques personnes qui font le voyage tous les jours pour y travailler. Le but est donc d’imaginer ce qu’il se passerait si, par malheur, quelqu’un ramenait la maladie sur l’île. Pour Guy, il s’agira de fournir une petite simulation pour aider son frère à bien comprendre l’impact de ses futurs choix, en particulier en matière de confinement. Guy veut donc faire vite et bien, car la contagion peut survenir à n’importe quel moment. En soit, rien de compliqué : c’est comme si, dans un jeu, on lançait un dé pour déterminer si une personne est infectée ou guérie. Et en informatique, on peut lancer énormément de dés…

Le principe est inspiré de cet article de blog (traduit de celui-ci, en anglais) qui présente et discute plein de manières de modifier une simulation et des effets des différents paramètres.

En pratique, j’ai choisi de prendre une population disposée sur une grille. On débute avec une poignée, I(0)I(0), de personnes infectées distribuées au hasard sur la grille et on considère un intervalle de temps discret : à chaque étape de la simulation, on calcule ce qui s’est passé entre l’unité de temps précédente et celle-ci, de manière purement aléatoire. C’est un processus stochastique.

Durant une unité de temps, une personne infectée fait nm[0;]n_m\in [0;\infty] rencontres et peut potentiellement infecter les personnes rencontrées (nmn_m étant un paramètre que vous pouvez modifier durant la situation). Dès lors, si on part du principe qu’une personne infectée l’est en moyenne durant γ1\gamma^{-1} unités de temps, on en déduit qu’une personne infectée rencontre en moyenne nmγ\frac{n_m}{\gamma} personnes durant ce laps de temps.

En pratique, on passe en revue la liste des personnes infectées :

  1. On vérifie tout d’abord que la personne infectée ii n’est pas guérie en tirant un premier nombre aléatoire ni[0;1]n_i \in [0;1]. Elle est guérie si niγn_i\leq\gamma.
  2. Si elle ne l’est pas, elle rencontre au hasard nmn_m personnes. Si la personne jj rencontrée est susceptible, on tire un second nombre aléatoire nij[0;1]n_{ij}\in[0;1], qui infecte la personne si nijβn_{ij}\leq\beta.

Afin de simuler l’effet de mesures de confinement, j’ai choisi de rajouter un autre paramètre : les rencontres que fait une personne infectée ne peuvent se faire que dans un certain rayon rmr_m, autour de la personne infectée, ce qui donne tout son intérêt à la grille : une personne ne peut infecter que ses voisins proches. Pour me simplifier la vie, c’est la distance dite de Manhattan qui est considérée ici : sur une grille, c’est maximum 4 personnes pour un rayon de 1, 12 pour un rayon de 2, etc :

manhatan.png
Nombre maximal de personnes rencontrées en fonction du rayon de rencontre (rmr_m).

La simulation se termine lorsque plus personne ne peut être infecté. Cela signifie que des gens peuvent très bien ne jamais avoir contracté la maladie : la valeur de S(t)S(t) mesure donc le nombre de personnes qui n’ont jamais été malades. :pirate:

Par défaut, j’utilise les paramètres suivants, dont on va dire qu’ils sont réalistes dans la situation qui nous occupe3 :

  • I(0)I(0) = 1%.
  • β\beta = 20%, γ\gamma = 10% : on est en moyenne contaminé au bout de 5 contacts avec une personne infectée et la maladie dure à peu près 10 unités de temps.
  • nmn_m = 4 et rmr_m = 3. Autrement dit, une personne infectée fait 4 rencontres par unité de temps, parmi, au maximum, 24 personnes : évidemment sur les côtés de la grille, il y a des effets de bord qui réduisent le nombre de possibilités. En moyenne, une personne infectieuse fait donc 40 rencontres, que les personnes infectées soient elle-mêmes infectées ou pas.

La simulation se présente en trois parties : la première est constituée de sliders, vous permettant d’ajuster les différents paramètres. Des boutons vous permettent ensuite de lancer la simulation (et de la mettre en pause), ou d’avancer d’une seule unité de temps. La seconde partie est une visualisation des personnes : en bleu pour les personnes susceptibles, en rouge pour les personnes infectées et en vert pour les personnes guéries. Finalement, la troisième partie est un graphique reprenant l’évolution des trois populations au cours du temps.

Vous pouvez jouer avec la simulation ici :

Simulation stochastique du processus d’infection-guérison.
Limites de cette simulation

Plusieurs reproches peuvent être faits à cette simulation. Je vais les énoncer tout de suite pour qu’on puisse se concentrer sur les résultats :

  1. Je me repose sur le générateur de nombres aléatoires par défaut, Math.random(), sans savoir ce qu’il y a derrière (il dépend du navigateur). Pour faire de vraies simulations, il vaut mieux utiliser des générateurs dont on sait qu’ils se comportent bien, comme par exemple le Mersenne Twister (non, ce n’est pas une variante chelou du Twister :p ).
  2. L’utilisation d’une grille est discutable : on pourrait utiliser des réseaux, modélisant le nombre d’interactions qu’un individu peut avoir. Évidemment, ça reporte le problème sur l’obtention de tels réseaux pour être réaliste, mais ça permet de faire de chouettes choses, comme faire apparaître la fameuse notion de cluster.
  3. Au niveau de l’implémentation, on peut faire un peu mieux en utilisant l'algorithme de Gillepsie, justement fait pour ce genre de cas où on modélise en fait des chaînes de Markov, c’est-à-dire que l’étape suivante dépend seulement de l’état précédent. D’ailleurs, on va utiliser des éléments de cette théorie par la suite.

Bref, comme toute modélisation, ça permet d’obtenir des résultats dans les limites qu’on s’est fixées. Si vous ne deviez retenir qu’un seul message de cet article, c’est celui-là. :)

Les résultats

Vu que c’est de l’aléatoire, il faut lancer plusieurs fois la simulation et faire une moyenne pour obtenir des tendances correctes (ce que j’ai fait :ange: ). Lorsque je présenterai un graphe issu de la simulation, ne vous focalisez pas sur les chiffres, mais plutôt sur la tendance qui s’en dégage.

Avec les paramètres par défaut

Voici un exemple de résultat obtenu avec les paramètres par défaut :

index.png
Exemple de résultat d’une simulation avec les paramètres par défaut (I(0)I(0) = 1%, β\beta = 20%, γ\gamma = 10%, rmr_m = 3, nmn_m = 4).

Qu’est ce qu’on peut noter ?

  1. Le nombre de personnes infectées croit très vite et présente un maximum aux alentours de 20 unités de temps, avec 40% de la population infectée en même temps (pour environ 30% de personnes susceptibles et 30% de personnes déjà guéries). Notez qu’en faisant la différence entre deux points successifs de la courbe des personnes susceptibles, on peut calculer que le nombre de personnes nouvellement infectées se situe entre 3 et 4% à ce moment de l’épidémie.
  2. Le nombre de personnes infectées décroît ensuite lentement et la maladie finit par disparaître après environ 100 unités de temps. Tout le monde (ou presque) y passe : à la fin de la simulation, le nombre de personnes guéries est de presque 100%.

Évidemment, ces deux points sont problématiques : d’une part parce qu’on risque d’atteindre très vite la saturation des services de santé qui doivent traiter toutes ces nouvelles personnes infectées, d’autre part parce qu’exposer toute la population à la maladie augmente le nombre de personnes présentant des complications, que lesdits services devront également traiter.

Notez qu’on peut, sous hypothèses, facilement estimer la probabilité qu’une personne infectée en contamine à elle seule kk autres durant le temps ou elle est infectée en utilisant la loi binomiale négative. En partant du principe que la personne infectée ne rencontre que des personnes susceptibles, on calcule en fait la probabilité d’infecter rr personnes et de ne pas en infecter kk (pour un total de n=k+rn = k+r recontres), l’infection ayant une probabilité β\beta d’arriver. La formule est

P[X=k]=(k+r1r1)(1β)kβr,P[X=k] = \begin{pmatrix}k+r - 1\\ r-1\end{pmatrix}\,(1-\beta)^{k}\,\beta^r,

où je vais utiliser la notation P[X=k]P[X=k] pour la probabilité d’obtenir rr succès et kk échecs (XX est la variable aléatoire qu’on cherche à calculer). (k+r1k1)\begin{pmatrix}k+r-1\\k-1\end{pmatrix} est le coefficient binomial.

Par ailleurs si on veut calculer la probabilité pour que les rr infections se fasse avec au plus kk échecs, on doit sommer toutes les probabilités de 00 à kk (puisqu’il s’agit de la probabilité d’obtenir les rr infections avec 0 échecs, 1 échec, 2 échecs, etc):

P[Xk]=i=0kP[X=i].P[X\leq k] = \sum_{i=0}^k P[X=i].

Pour β\beta = 20% et en imaginant qu’une personne infectieuse fait, comme expliqué plus haut, n=nmγn = \frac{n_m}{\gamma} = 40 rencontres de personnes susceptibles, la probabilité d’en infecter 5 (rr=5, kk=35) est de 92%. Elle tombe à 27% pour la probabilité d’infecter 10 personnes (rr=10, kk=30) et est inférieure à 1% d’infecter au moins 15 personnes (rr=15, kk=25).4

Bien entendu, en réalité, une personne infectée peut ensuite en infecter une autre, donc les infections se cumulent :pirate:

Jouer avec les paramètres

À la vue de ses résultats, André se rend très bien compte que si rien n’est fait, le pire est à venir : l’île compte 3 médecins5, qui devraient donc traiter plusieurs dizaines de nouveaux patients par jour au début de l’épidémie. C’est sans compter l’impact sur la vie de l’île, avec toutes les fermetures dues à d’éventuels repos maladie. Pour essayer de contenir l’épidémie au mieux, André peut donc tenter d’en mesurer l’impact en déplaçant les différents curseurs. Bien entendu, il n’a aucun contrôle sur le taux de guérison, à moins qu’un nouveau médicament ne soit mis sur le marché. Mais les autres ?

Premièrement, le nombre de personnes initialement infectées ne change pas grand-chose : même avec I(0)I(0) = 0,1% (c’est-à-dire une personne sur 1000 !), les nombres évoluent de manière similaire, juste que l’épidémie survient un tout petit peu plus tard et est un peu plus longue6. Si vous avez essayé plusieurs fois, vous avez ceci dit constaté qu’il existe un cas où l’épidémie s’arrête : lorsque le premier patient infecté guérit à la première étape de la simulation, n’ayant eu le temps d’infecter personne. Si vous suivez bien, cela arrive… une fois sur 10 à peu près. :magicien:

Réduire le rayon de rencontre rend déjà la chose plus supportable :

canvas.png
Exemple de résultat d’une simulation en réduisant le rayon de rencontre (I(0)I(0) = 1%, β\beta = 20%, γ\gamma = 10%, rmr_m = 1, nmn_m = 4).

Le nombre total de personnes ayant été malades reste énorme, mais la charge pour le système de santé est plus supportable (environ 20% de personnes infectées), bien que le nombre de personnes infectées par unité de temps reste élevé très longtemps : on reste au-dessus de 10% de personnes infectées durant environ 50 unités de temps (contre environ 30 ci-dessus). À l’inverse, augmenter le rayon de rencontre a des conséquences catastrophiques : quand on prend un rayon énorme (rmr_m = 50), on monte très vite (10 unités de temps !) à 60% de personnes infectées.

En fait, en modifiant ce paramètre, on permet de simuler deux situations extrêmes :

  1. En prenant rmr_m = 1, on simule une transmission de proche en proche, où la maladie progresse très lentement. En fait, il faut se rendre compte que durant la simulation, on voit régulièrement apparaître des situations où une personne infectée ne peut plus infecter d’autres voisins, car ceux-ci sont déjà guéris ou en passe de l’être :

    conf.png
    Quoi qu’il arrive, vu que rmr_m=1, les trois personnes infectées à l’intérieur du carré ne peuvent infecter personne.

    Ces voisins agissent donc comme une barrière contre la transmission de la maladie. D’ailleurs, c’est le même effet qui explique le succès de la vaccination : si toutes les personnes que vous pouvez potentiellement infecter sont déjà immunisées, vous ne pourrez pas transmettre la maladie.

  2. En prenant rmr_m très grand, on simule un brassage permanent de la population, où tout le monde peut potentiellement avoir un contact avec tout le monde, ce qui rend très vite la situation ingérable : l’effet de barrière n’existe plus, puisque n’importe quelle personne susceptible peut se retrouver en contact avec une personne infectée !

Finalement, jouer sur le nombre de rencontres et sur le taux d’infection a donc des effets bénéfiques sur le contrôle de l’épidémie, même si ces effets ne sont pas tout à fait équivalents. Par exemple, voici une simulation dans laquelle le nombre de rencontre a été réduit à 1 :

canvas.png
Exemple de résultat d’une simulation en réduisant le nombre de rencontres (I(0)I(0) = 1%, β\beta = 20%, γ\gamma = 10%, rmr_m = 3, nmn_m = 1).

Cette fois, malgré une épidémie très longue (deux fois plus que les exemples précédents), le nombre de personnes ayant été malade n’est plus que de 60% et le nombre de personnes infectées ne dépasse jamais les 10%. Et si, cette fois, on diminue β\beta tout en gardant le nombre de rencontres à 4 :

canvas.png
Exemple de résultat d’une simulation en réduisant le taux d’infection (I(0)I(0) = 1%, β\beta = 5%, γ\gamma = 10%, rmr_m = 3, nmn_m = 4).

Avec ce choix de paramètres, on a carrément inversé la tendance, puisque la maladie n’a touché qu’à peu près 30% de la population.

Notez qu’on peut même arriver à une situation où la maladie ne se propage pas énormément. En gardant nmn_m = 1, cela arrive dès que β<γ\beta < \gamma. Par exemple,

canvas.png
Exemple de résultat d’une simulation en ayant un taux d’infection inférieur à celui de guérison (I(0)I(0) = 1%, β\beta = 9%, γ\gamma = 10%, rmr_m = 3, nmn_m = 1).

C’est évidemment une situation idéale ! :pirate: On expliquera plus loin pourquoi c’est le cas.

Conclusion

Le résultat est sans appel : pour lutter contre l’épidémie, il est nécessaire d’éviter au maximum que la maladie se propage. André sait que ces mesures ne le rendront pas populaire, mais il est prêt : si jamais la maladie devait se déclarer sur l’île, ce sera confinement pour tout le monde !

Vous me voyez venir, ce genre de modèle invite très clairement à prendre des mesures drastiques. Ainsi,

  • Pour réduire β\beta, il s’agit de favoriser toute forme de prophylaxie (tout processus évitant l’apparition ou la propagation d’une maladie). Par exemple : port du préservatif pour une MST, port du masque pour une infection respiratoire, désinfection systématique de certains objets, lavage des mains et hygiène corporelle, etc.

  • Pour réduire nmn_m et rmr_m, on va augmenter la distance sociale, en évitant les lieux de rencontre, voir en confinant carrément la population le cas échéant. Par exemple, voici ce qui se passe si, après 10 étapes de simulation, on change brusquement rmr_m et nmn_m :

    canvas.png
    Exemple de simulation où on passe de rm=3,nm=4r_m = 3, n_m = 4 à rm=1,nm=1r_m = 1, n_m = 1 (avec I(0)I(0) = 1%, β\beta = 20%, γ\gamma = 10%) pour simuler l’effet d’une mesure de distanciation sociale.

    C’est, sur le papier, relativement efficace si tout le monde joue le jeu.

  • Pour augmenter γ\gamma (donc réduire γ1\gamma^{-1}), il faut essayer de trouver des traitements efficaces. C’est clairement la partie la plus complexe, puisque la recherche d’un traitement prend énormément de temps. C’est aussi la raison pour laquelle on se rabat souvent sur les deux autres types de mesures, par manque de traitement efficace.


  1. Ou, de manière complémentaire mais pas tout à fait équivalente, que les contacts se font sur le début de la période de contagion, lorsque les symptômes ne sont pas encore apparus.
  2. C’est l’espérance mathématique.
  3. Ces paramètres varient énormément en fonction de la maladie qui est traitée.
  4. Calculé avec https://vrcacademy.com/calculator/negative-binomial-distribution-calculator/.
  5. Nombre basé sur la densité de médecins en France (source)
  6. Principalement parce que les effets de bord sont plus marqués.

Approche déterministe : modéliser et comprendre

Guy et André sont assez contents de la simulation, car elle permet de voir l’effet des différents paramètres d’une pression de bouton. Néanmoins, le caractère aléatoire rend difficile l’interprétation des résultats de manière précise. Heureusement, Louise a maintenant eu le temps de ressortir son syllabus1 d’analyse. Et elle a des choses à leur montrer et à leur apprendre !

Le modèle SIR revisité

Reprenons : on a donc 3 compartiments, une probabilité β\beta de passer du premier au second et une probabilité γ\gamma de passer du second au troisième.

SIR.png
Le modèle SIR.

Des équations différentielles ?

Une autre approche du modèle SIR consiste à s’intéresser à l’évolution macroscopique des différentes populations, sans regarder à l’échelle de l’individu. Par exemple, prenons le nombre de personnes qui guérissent à un point donné de la simulation : on peut connaître ce nombre en calculant

ΔR(t)=R(t+Δt)R(t),\Delta R(t) = R(t + \Delta{t}) - R(t),

avec Δt\Delta t plus ou moins petit. Il semble assez logique que ΔR(t)\Delta R(t) soit proportionnel à Δt\Delta t : si on attend longtemps entre deux étapes, le nombre de personnes guéries dans l’entre deux sera plus grand que si on regarde fréquemment. De même, on sait que cette grandeur est proportionnelle à γ\gamma, puisque plus γ\gamma est grand, plus les personnes guérissent vite. Finalement, on peut imaginer que ce nombre est proportionnel au nombre de personnes infectées : si personne n’est infecté, personne ne guérit. Dès lors, on a

ΔR(t)=R(t+Δt)R(t)=γI(t)Δt.\Delta R(t) = R(t + \Delta{t}) - R(t) = \gamma\,I(t)\,\Delta t.

Si on divise tous les membres de l’égalité par Δt\Delta t, afin d’obtenir la variation de RR au cours du temps, on a

ΔR(t)Δt=R(t+Δt)R(t)Δt=γI(t),\frac{\Delta R(t)}{\Delta t} = \frac{R(t + \Delta{t}) - R(t)}{\Delta t} = \gamma\,I(t),

ce qui, si on considère un Δt\Delta t très petit, revient à la définition d’une dérivée, notée dR(t)dt\frac{dR(t)}{dt} ou encore R˙(t)\dot R(t). Puisqu’il s’agit de la variation de RR au cours du temps, une autre manière de voir cette quantité est de le définir comme la vitesse à laquelle les personnes guérissent. Pour ceux dont les cours de maths seraient loin, petit rappel : la dérivée d’une fonction en un point décrit en fait la pente de la fonction en ce point, autrement dit son évolution, ici dans le temps. Par exemple, regardons l’évolution de la courbe des personnes guéries dans la simulation ci-dessous :

deriv_R.png
Évolution du nombre de personnes guéries au cours du temps, en vert, et dérivée en certains points, en noir (avec S(0)S(0) = 99%, β\beta = 20% et γ\gamma = 10%).

La dérivée représente ici le taux de guérison par unité de temps : plus cette dérivée est importante, plus le nombre de personnes guéries augmentera vite. On voit que celle-ci est faible au début, augmente ensuite (+1,5% de personnes guéries par unité de temps à tt = 50), puis diminue et tend en fait vers 00 (avec R˙()=0\dot R(\infty)=0). Les zones où la dérivée est faible correspondent donc à des plateaux, ceux où la dérivée est importante à des modifications importantes.

En sachant que les deux autres populations (susceptible et infectée) dépendent aussi du nombre de personnes susceptibles, vu que s’il n’y en a plus alors il n’y a pas de nouvelles infections, mais aussi du nombre de personnes infectées, puisque s’il n’y en a plus alors il ne peut plus y avoir d’infection, le même raisonnement conduit à la définition suivante pour le modèle SIR :

{S˙(t)=βS(t)I(t),I˙(t)=βS(t)I(t)γI(t),R˙(t)=γI(t),\begin{cases} \dot S(t) = -\beta\,S(t)\,I(t),\\ \dot I(t) = \beta\,S(t)\,I(t)-\gamma\,I(t),\\ \dot R(t) = \gamma\,I(t), \end{cases}

C’est ce qu’on appelle un système d’équations différentielles.

Notez que par rapport à ce qu’on a fait précédemment, on ne considère donc non plus les individus séparément mais la population dans son ensemble. Les paramètres nmn_m et rmr_m ne peuvent plus être intégré de manière simple dans ce modèle (on part du principe que nm=1n_m=1 et rm=r_m=\infty). Dès lors, l’effet éventuel des différentes mesures sera modélisé par la modification de β\beta et γ\gamma !

Une simulation, encore une !

Comment on fait, du coup, pour connaître la population à un moment donné ?

Pour connaître la population dans un compartiment donné à un moment donné, il faut résoudre le système ci-dessus, en faisant le procédé inverse de la dérivée, l’intégration. Malheureusement, on n’a pas de solution analytique (simple) au problème ci-dessus, il faut donc se résoudre à l’intégrer de manière numérique. L’idée est assez simple : si on a, pour toute fonction dépendante du temps f(t)f(t),

Δf(t)=f(t+Δt)f(t)=ζf(t)Δt,\Delta f(t) = f(t + \Delta t) - f(t) = \zeta\,f(t)\, \Delta t,

avec ζ\zeta une constante quelconque, alors

f(t+Δt)=f(t)+Δf(t)=f(t)+ζf(t)Δt.f(t+\Delta t) = f(t) + \Delta f(t) = f(t) + \zeta\,f(t)\,\Delta t.

On peut donc s’amuser à calculer f(t2)f(t_2) à partir de f(t1)f(t_1) (avec t1<t2t_1<t_2) en approchant de t2t_2 par petits pas (avec un Δt\Delta t pas trop grand). C’est le principe de la méthode d’Euler, qui a déjà été abordée par @Aabu dans son tutoriel. Ceci dit, pour des questions de stabilité, j’ai utilisé une des méthodes de Runge-Kutta (la plus connue, rk4), basée sur le même principe.

Vous pouvez retrouver la simulation ici:

Simulation déterministe du processus d’infections-guérisons.

Un nouveau type de graphe fait donc son apparition : le graphe susceptibles-infectés, présentant la trajectoire de l’épidémie c’est-à-dire le nombre de personnes infectées en fonction du nombre de personnes susceptibles. Ce dernier graphe permet dès lors de visualiser plus facilement l’évolution de l’épidémie. Par exemple,

graphe_SI.png
Exemple de trajectoire permettant de visualiser facilement le maximum épidémique, ImaxI_{max}, et le nombre de personnes non-infectées à la fin de l’épidémie, S()S(\infty).

On peut dès lors facilement voir l’effet du paramètre β\beta sur l’évolution de l’épidémie :

SI_R0.png
Évolution des trajectoires pour différentes valeurs de β\beta (pour γ\gamma = 10% et S(0)S(0) = 99%).

De manière peu surprenante, l’augmentation de β\beta est corrélée avec une augmentation du pic épidémique, ainsi que la réduction du nombre de personnes non-infectées.

Le nombre de reproduction

Reprenons nos équations :

{S˙(t)=βS(t)I(t),I˙(t)=[βS(t)γ]I(t),R˙(t)=γI(t).\begin{cases} \dot S(t) = -\beta\,S(t)\,I(t),\\ \dot I(t) = [\beta\,S(t)-\gamma]\,I(t),\\ \dot R(t) = \gamma\,I(t). \end{cases}

Comme on l’a vu ci-dessus, puisque S˙(t)<0\dot S(t) < 0, la population de personnes susceptibles ne peut que baisser au cours du temps, tandis que celle de personnes guéries ne peut qu’augmenter au cours du temps, vu que R˙(t)>0\dot R(t) > 0. Par ailleurs,

t0:S˙(t)+I˙(t)+R˙(t)=0,\forall t \geq 0: \dot S(t) + \dot I(t) + \dot R(t) = 0,

ce qui signifie que la population, elle, reste constante dans l’absolu: aucune personne ne disparaît ou n’apparaît, il y a seulement des mouvements d’un compartiment à l’autre.

Le signe de I˙(t)\dot I(t) est beaucoup plus intéressant : en effet, comme on vient de le voir, la maladie ne se propage que lorsque cette fonction est positive, puisque dans le cas contraire, le nombre de personnes infectées diminue inexorablement. Regardons donc plus en détail le graphe correspondant :

deriv_I.png
Évolution du nombre de personnes infectées au cours du temps, en rouge, et dérivée en certains points, en noir (avec S(0)S(0) = 99%, β\beta = 20% et γ\gamma = 10%).

On voit que dans cet exemple, au-delà de t>45t>45, la dérivée devient négative : le nombre de personnes infectées diminue. Cette diminution est de plus en plus importante (valeur fortement négative, forte diminution) et puis diminue (avec, bien entendu, I˙()=0\dot I(\infty)=0).

Définition de R0R_0

On a donc augmentation de la population de personnes malades si

I˙(t)>0[βS(t)γ]I(t)>0βγS(t)>1r(t)>1,\dot I(t) > 0 \Leftrightarrow [\beta\,S(t)-\gamma]\,I(t) > 0 \Leftrightarrow \frac{\beta}{\gamma}\,S(t) > 1 \Leftrightarrow r(t) > 1,

avec r(t)r(t) est appelé le nombre de remplacement :

r(t)=βγS(t).r(t) = \frac{\beta}{\gamma}\,S(t).

Il s’agit du nombre de personnes infectées par un individu contagieux, au temps tt. Notez que r(t)r(t) ne fait que baisser au cours de la simulation, vu que S(t)S(t) ne fait que diminuer. Au début de la simulation, vu qu’on a S(t)1S(t) \approx 1, on peut alors définir le nombre de reproduction de base, le fameux R0R_0, comme étant

R0=r(0)=βγ,R_0 = r(0) = \frac{\beta}{\gamma},

qui est le nombre moyen de personnes qu’infecte une personne malade tant qu’elle est contagieuse : si R0<1R_0 < 1, un malade infectera moins d’une personne et la maladie disparaîtra d’elle même. À l’inverse, la maladie se propage si R0>1R_0 > 1.

Petite approximation pour mieux comprendre

En effet, si on considère tt petit, on a S(t)S(0)1S(t)\approx S(0) \approx 1 et donc I˙(t)γ[R01]I(t)\dot I(t) \approx \gamma\,[R_0-1]\,I(t). En intégrant, on obtient

I(t)I(0)e(R01)γt.I(t) \approx I(0)\,e^{(R_0-1)\,\gamma\,t}.

Dès lors, si R0<1R_0 < 1, alors I(t)I(t) décroît et inversement.

Par exemple, pour β\beta = 20% et γ\gamma = 10%, on trouve que R0=2R_0=2, donc l’épidémie se propagera. Notez également que r(t)R0r(t) \leq R_0. Il y a ceci dit un intérêt à suivre r(t)r(t) au cours du temps pour voir comment la situation épidémique évolue. Si ça vous intéresse, avec un petit bagage de statistique, c’est par là.

Études de solutions partielles

Malheureusement, on ne peut pas, à partir du système d’équation ci-dessus, obtenir de solution analytique à notre système. Autrement dit, il n’est pas possible d’obtenir, par exemple pour S(t)S(t), une expression qui ne fasse intervenir que β\beta et γ\gamma. On peut ceci dit étudier des solutions partielles en considérant des cas ou une quantité est fonction d’une autre, qui sont facile à obtenir.

Ainsi, on peut étudier l’évolution de I(t)I(t) en fonction de S(t)S(t), afin de comprendre l’évolution du graphe susceptible-infecté donné plus haut.

Un peu de maths pour ceux qui aiment les équations différentielles

En effet,

S˙I˙=dSdI=βS(t)I(t)βS(t)I(t)γI(t)=βS(t)βS(t)γ,\frac{\dot S}{\dot I} = \frac{dS}{dI} = \frac{-\beta\,S(t)\,I(t)}{\beta\,S(t)\,I(t)-\gamma\,I(t)} =\frac{-\beta\,S(t)}{\beta\,S(t)-\gamma},

qui a le bon goût d’être une équation différentielle séparable, possédant dès lors une solution, à savoir

dSdI=βS(t)βS(t)γ[1γβS(t)]dS=dI[11R0S(t)]dS=dII(t)=C+1R0ln[S(t)]S(t),\begin{aligned} &\frac{dS}{dI} =\frac{-\beta\,S(t)}{\beta\,S(t)-\gamma}\\ \Leftrightarrow\hspace{.5cm}&\int \left[1-\frac{\gamma}{\beta\,S(t)}\right]\,dS = -\int dI\\ \Leftrightarrow\hspace{.5cm}&\int \left[1-\frac{1}{R_0\,S(t)}\right]\,dS = -\int dI\\ \Leftrightarrow\hspace{.5cm}& I(t) = C + \frac{1}{R_0}\,\ln[S(t)] - S(t), \end{aligned}

avec CC une constante. En t=0t=0, S(0)>I(0)>0S(0) > I(0) > 0 et S(0)+I(0)=1S(0) + I(0) = 1 (R(0)=0R(0)=0, personne n’est immunisé !), on a

I(0)=C+1R0ln[S(0)]S(0)C=I(0)+S(0)1R0ln[S(0)]=11R0ln[S(0)],I(0) = C + \frac{1}{R_0} \ln[S(0)] - S(0) \Leftrightarrow C = I(0) + S(0) - \frac{1}{R_0} \ln[S(0)] = 1 - \frac{1}{R_0} \ln[S(0)],

et donc,

I(t)=1S(t)+1R0ln[S(t)S(0)]I(t) = 1 - S(t) + \frac{1}{R_0}\,\ln \left[\frac{S(t)}{S(0)}\right]

Ainsi,

  • Nombre maximal de personnes infectées : il s’agit de rechercher le maximum de I(t)I(t), qu’on obtient comme on l’a vu plus haut lorsque I˙(t)=0\dot I(t) = 0… Autrement dit lorsque r(t)=1r(t)=1, c’est-à-dire S(t)=R01S(t) = R_0^{-1}. Si on substitue cette seconde option dans l’équation de I(t)I(t), on trouve

    Imax=11R0{1+ln[R0S(0)]}.I_{max} = 1-\frac{1}{R_0}\,\{1+\ln[R_0\,S(0)]\}.

    Grâce à cette équation, on peut donc estimer le nombre maximum de personnes malades au même moment. Par exemple, pour R0=2R_0=2 et S(0)S(0) = 99%, on trouve ImaxI_{max} = 15,8%.

  • Immunité de groupe : "l’immunité de groupe" (ou, plutôt, le seuil d’immunité de groupe) est définie comme le moment où le pic d’infection est maximal, ce qu’on vient de calculer au point précédent. Il s’agit donc du point où S(t)=R01S(t)=R_0^{-1}, c’est-à-dire où

    H=I(t)+R(t)=11R0.H = I(t) + R(t) = 1 - \frac{1}{R_0}.

    Pour un R0R_0 de 2, il s’agit donc du point où 50% de la population est infectée ou l’a été. Notez bien que cela ne signifie pas que l’épidémie est terminée (loin de là !), juste que le nombre d’infection ne fera que de diminuer.

  • Nombre de personnes non-infectées en fin d’épidémie : compte tenu que I()=0I(\infty)=0, on trouve que

    0=1S()+1R0ln[S()S(0)]ln[S()S(0)]=R0[S()1]0 = 1 - S(\infty) + \frac{1}{R_0}\,\ln \left[\frac{S(\infty)}{S(0)}\right] \Leftrightarrow \ln \left[\frac{S(\infty)}{S(0)}\right] = R_0\,[S(\infty)-1]

    Malgré son apparente simplicité, cette équation ne possède pas de solutions analytiques simples. Néanmoins, on peut en estimer numériquement la solution (il y en a 2, mais évidemment, seule celle qui donne S<1S_{\infty} <1 est intéréssante). Par exemple, pour R0R_0 = 2 et S(0)S(0) = 99%, on trouve S()S(\infty) \approx 20%. En comparaison avec le seuil d’immunité de groupe pour le même R0R_0, on voit qu’il aura encore fallu 30% de malade pour achever l’épidémie.

L’évolution de ces quantités, ainsi que quelques autres, avec R0R_0 est tracée ci-dessous :

R0.png
Évolution en fonction de R0R_0 (pour γ\gamma = 10% et S(0)S(0) = 99%) du nombre maximal de personne infectées durant l’épidémie, ImaxI_{max}, du temps pour atteindre ce maximum, tmaxt_{max}, du seuil d’immunité, HH, du nombre de personnes ayant été malades à la fin de l’épidémie, R()=1S()R(\infty) = 1-S(\infty) et du temps pour repasser sous la barre de 0,1% de nouvelles personnes infectées, t0.1%t_{0.1\%}. La ligne grise détaille la situation pour R0R_0 = 2.

On voit très clairement que plus R0R_0 augmente, plus la situation est catastrophique : le pic épidémique survient de plus en plus tôt et est de plus en plus grave. Le seuil d’immunité de groupe augmente lui aussi avec R0R_0 : il est déjà de 50% pour R0R_0 = 2. Par ailleurs, le nombre de personnes ayant contracté la maladie à la fin de l’épidémie monte très vite à (quasiment, vu qu’il ne peut l’atteindre) 100%. Enfin, le retour à la normale est d’autant plus brutal, puisque le temps qu’il faut pour repasser sous la barre de 0,1% de personne nouvellement infectées diminue avec R0R_0 et donc plus R0R_0 est faible plus l’épidémie est longue.

Notez finalement la différence entre la courbe verte (immunité de groupe) et la courbe bleue (personnes guéries) : le seuil d’immunité de groupe ne signifie absolument pas la fin des ennuis !

"Moi, je l’ai pas eu !"

Un résultat surprenant intervient lorsque qu’on étudie S(t)S(t) en fonction de R(t)R(t) :

… Et encore un peu de maths.

S˙R˙=dSdR=βS(t)I(t)γI(t)=βS(t)γ,\frac{\dot S}{\dot R} = \frac{dS}{dR} = \frac{-\beta\,S(t)\,I(t)}{\gamma\,I(t)} = \frac{-\beta\,S(t)}{\gamma},

qui est également séparable et donc intégrable:

dSdR=βS(t)γdSS(t)=R0dRln[S(t)]=R0R(t)+CS(t)=KeR0R(t),\begin{aligned} &\frac{dS}{dR} = \frac{-\beta\,S(t)}{\gamma}\\ \Leftrightarrow\hspace{.5cm}&\int \frac{dS}{S(t)} = - R_0\,\int\,dR \\ \Leftrightarrow\hspace{.5cm}& \ln[S(t)] = -R_0\,R(t) + C \\ \Leftrightarrow\hspace{.5cm}& S(t) = K\,e^{-R_0\,R(t)}, \end{aligned}

avec KK une constante. Vu qu’en t=0t=0, on a R(t)=0R(t)=0, on obtient

S(t)=S(0)eR0R(t),S(t) = S(0)\,e^{-R_0\,R(t)},

vu que R(t)[0;1]R(t) \in [0;1] si on prend le cas R(t)=1R(t)=1, on peut écrire que S(t)S(0)eR0S(t) \geq S(0)\,e^{-R_0}. Dès lors, même si t=t=\infty, S()S(0)eR0S(\infty) \geq S(0)\,e^{-R_0}, ce qui donne une borne inférieure à S()S(\infty) : certaines personnes ne seront jamais infectées quoi qu’il arrive. Pour R0=2R_0=2 et S(0)S(0) = 99%, on trouve S()S(\infty) \geq 13,3%.

Évidemment, tenter l’immunité de groupe, c’est facile : on laisse faire les choses et la maladie s’éteindra d’elle-même. C’est même totalement une stratégie acceptable pour le rhume. Oui, mais tout dépend des effets de la maladie : on survit assez bien à un rhume et ça n’empêche même pas spécialement les gens de vivre, au pire ils sont plus fatigués, au pire du pire ça finit en état grippal. Le danger, et on ne le dira jamais assez, c’est d’en arriver à un point où le système de santé ne peut plus traiter les malades et est obligé de faire des choix : quand on est dans la force de l’âge en pleine santé, il est facile que dire que seuls les patients les plus faibles mourront… Jusqu’à ce que ça tombe sur un de vos proches.

Oui, mais si on… Meure ?

André fait tout de même remarquer à son frère et sa fille que malheureusement, la vie ne s’arrête pas pendant une épidémie. On peut empêcher que les gens se rencontrent, on ne peut évidemment pas empêcher qu’ils naissent et encore moins qu’ils meurent (de tout autre chose). Pas de problème, Louise est sur le coup. :pirate:

Tentons d’améliorer le modèle sans changer le nombre de compartiments et introduisons une nouvelle probabilité : α\alpha, modélisant le taux de mortalité (non dû à la maladie)… Et de naissances. En effet, on est obligés de partir du principe que le taux de mortalité et de naissance est le même pour conserver une population constante : ce n’est par exemple pas le cas en France, où on a un taux de mortalité de moins de 1% par an,2 contre un taux de natalité d’un peu plus de 1% par an, donc une légère croissance.3

SIRd.png
Modèle SIR incluant la démographie : tout le monde peut mourir et les naissances se font dans le compartiment susceptible. Pour traduire ce schéma en système d’équation, retirez ce qui est au-dessus de la flèche à l’équation du compartiment de départ, rajoutez-le à celui d’arrivée (pour conserver un bilan neutre).

On en arrive au système suivant :

{S˙(t)=α[βI(t)+α]S(t)I˙(t)=[βS(t)γα]I(t),R˙(t)=γI(t)αR(t).\begin{cases} \dot S(t) = \alpha -[\beta\,I(t)+\alpha]\,S(t)\\ \dot I(t) = [\beta\,S(t)-\gamma- \alpha]\,I(t),\\ \dot R(t) = \gamma\,I(t) - \alpha\,R(t). \end{cases}

De la même manière que pour le système SIR simple, on peut facilement définir un nombre de reproduction comme étant

Re=βγ+α,R_e = \frac{\beta}{\gamma + \alpha},

qu’on va ici nommer taux effectif de reproduction. En effet, ce système, avec lequel vous pouvez également jouer sur la simulation ci-dessus (il y a un curseur pour le taux de mortalité), a une propriété intéressante : il possède une solution d’équilibre endémique.

Une situation d’équilibre correspond au cas où les populations ne bougent plus en apparence :

S˙(t)=I˙(t)=R˙(t)=0,\dot S(t) = \dot I(t) = \dot R(t) = 0,

ce qui ne signifie pas forcément que plus rien ne se passe : juste que le nombre de personne dans chaque compartiment reste constant passé un certain temps. Posons qu’à cette situation d’équilibre correspond le nombre de personnes susceptibles SS^\star et le nombre d’infectés II^\star. Une situation d’équilibre endémique correspond au cas où I>0I^\star > 0. Ceci dit, puisque I˙(t)=0\dot I(t) = 0, alors

[βSγα]I=0,[\beta\,S^* -\gamma - \alpha]\,I^\star = 0,

et donc soit II^\star = 0%, ce qui était déjà le cas avec le modèle SIR, soit

S=γ+αβ=1Re,S^\star = \frac{\gamma + \alpha}{\beta} = \frac{1}{R_e},

ce qui, rappelez-vous, correspond à la situation de maximum épidémique pour le modèle SIR où α\alpha = 0%. De même, vu que S˙(t)=0\dot S(t) = 0,

α[βI+α]S=0I=αβ[1S1]\alpha -[\beta\,I^\star+\alpha]\,S^\star = 0 \Leftrightarrow I^\star = \frac{\alpha}{\beta}\,\left[\frac{1}{S^\star}-1\right]

Et, dès lors,

I=αβ(Re1)=α[1γ+α1β].I^\star = \frac{\alpha}{\beta}\,(R_e-1) = \alpha\,\left[\frac{1}{\gamma+\alpha}-\frac{1}{\beta}\right].

Cette dernière relation montre bien qu’un équilibre endémique n’est pas possible si Re<1R_e < 1 (vu que cela résulterait en I<0I^\star < 0, ce qui n’a pas de sens épidémiologiquement parlant). Par contre, il est possible dès que Re1R_e \geq 1 et on peut même prouver que cet équilibre est stable, c’est-à-dire que si rien n’est fait, la maladie reste en permanence dans la population, infectant au fur et à mesure les nouveau-nés.

L’équilibre endémique se voit très bien sur la trajectoire de l’épidémie. Par exemple,

canvas.png
Exemple de trajectoire (pour α\alpha = 0,05%, β\beta = 20% γ\gamma = 10% et S(0)S(0) = 99%). L’équilibre endémique se situe en (S,I)(S^\star, I^\star) = (52,5%, 2,2%) et on voit que la trajectoire orbite autour de ce point jusqu’à l’atteindre.

L’évolution de SS^\star et II^\star en fonction de ReR_e est détaillée ci-dessous :

Re.png
Évolution de l’équilibre endémique, SS^\star et II^\star en fonction de ReR_e (pour α\alpha = 0,5% et β\beta = 20%).

Vu l’expression, on voit très bien que II^\star est directement proportionnel à α\alpha. Heureusement, en pratique, cette constante est minuscule, puisqu’on a parlé plus haut d’un taux d’à peu près 1% de naissances par an : ramené sur un jour, ça fait à peine α\alpha = 0,0027%… Soit II^\star = 0,013% pour β\beta = 20% et ReR_e = 2 : c’est négligeable sur de petites populations, moins à l’échelle d’une grande ville ou d’un pays.

Conclusion

Dans cette seconde partie, on a pu voir que l’analyse mathématique du modèle SIR (dans l’hypothèse d’un brassage total de la population) permettait de mettre en évidence le nombre de reproduction, R0R_0 et son importance pour la détermination de plein de points clés de l’épidémie. On a aussi vu que si on tenait compte du taux de mortalité, on finissait avec une solution endémique… Même si ce n’est pas trop grave au vu du très faible impact en pratique. :magicien:

Bien entendu, ces prédictions doivent en pratique s’accompagner d’interprétations : gérer, par exemple, 2% de nouvelles infections par jour, c’est différent s’il s’agit d’un rhume, de la grippe ou de la malaria !


  1. En Belgique, au lieu de dire "poly(copié)", on dit "syllabus".
  2. Les chiffres pour 2020 ne compte pas, évidemment.
  3. Si on exclut les flux migratoires. M’enfin on n’en est plus à une approximation près ;)

Au delà du modèle SIR

- Donc, si je comprends bien, le taux de mortalité, ce n’est pas très important ?

- Non, ça devrait aller, papa.

- Mais ces situations endémiques, là, ça peut arriver quand même ?

- Ça peut…

- Ah ! Et t’aurais quelque chose pour les gens qui se mettent en quarantaine ?

- Ça doit pouvoir se faire…

Une fois qu’on a compris le principe, on peut évidemment multiplier le nombre de compartiments et de transitions entre ceux-ci : tant qu’on arrive ensuite à raccrocher le modèle à une réalité, ça reste prédictif. Ici, on va plus particulièrement s’intéresser à l’influence de l’immunité et à celle de la détection des malades.

Immunité limitée : encore un peu de situations endémiques ?

En fait, on obtient systématiquement des situations endémiques lorsqu’on a une boucle. Une première possibilité est le modèle le plus simple, le modèle SIS :

SIS.png
Modèle SIS

Probablement l’un des seuls modèles pour lequel on ait une solution, celui-ci modélise le cas où il n’y a pas d’immunité après la période d’infection, ce qui est le cas par exemple pour la grippe ou le rhume.1

À partir du schéma, on trouve facilement que le système est spécifié par

{S˙(t)=[γβS(t)]I(t),I˙(t)=[βS(t)γ]I(t).\begin{cases}\dot S(t) = [\gamma-\beta\,S(t)]\,I(t),\\ \dot I(t) = [\beta\,S(t)-\gamma]\,I(t).\end{cases}

Notons d’ores et déjà qu’on peut définir un nombre de reproduction :

R0=βγ,R_0 = \frac{\beta}{\gamma},

qui conduit en fait à une situation endémique si R0>1R_0>1. Dès lors, si on cherche les solutions pour I˙(t)=0\dot I(t) = 0 et vu que S(t)+I(t)=1S(t)=1I(t)S(t) + I(t)=1 \Leftrightarrow S(t) = 1-I(t),

S(t)=S=1R0I=11R0.S(t) = S^\star = \dfrac{1}{R_0} \Rightarrow I^\star = 1 -\dfrac{1}{R_0}.

De manière plus générale, on peut partir de I˙(t)\dot I(t) pour déterminer une solution à ce problème :

I˙(t)={β[1I(t)]γ}I(t)=[κβI(t)]I(t),\dot I(t) = \{\beta\,[1-I(t)]-\gamma\}\,I(t) = [\kappa-\beta\,I(t)]\,I(t),

où on a posé κ=βγ\kappa = \beta - \gamma. On obtient

Vous reprendrez bien un peu de maths ?

vu qu’on a quelque chose qui ressemble à une fonction logistique, on commence par faire un changement de variable : I(t)=[z(t)]1I(t) = [z(t)]^{-1}, donc I˙(t)=z˙(t)[z(t)]2\dot I(t) = - \dot z(t)\,[z(t)]^{-2},

z˙(t)1z(t)2=[κβ1z(t)]1z(t)dzdt=κ[z(t)βκ]dzz(t)βκ=κdtln[z(t)βκ]=κ(t+C)z(t)=λeκt+βκ\begin{aligned} &-\dot z(t)\,\frac{1}{z(t)^2} = \left[\kappa-\beta\,\frac{1}{z(t)}\right]\,\frac{1}{z(t)}\\ \Leftrightarrow\hspace{.5cm} & \frac{dz}{dt} = -\kappa\,\left[z(t)-\frac{\beta}{\kappa}\right]\\ \Leftrightarrow\hspace{.5cm} & \int \frac{dz}{z(t)-\frac{\beta}{\kappa}} = -\kappa \int dt\\ \Leftrightarrow\hspace{.5cm} & \ln\left[z(t)-\frac{\beta}{\kappa}\right]= -\kappa (t+C)\\ \Leftrightarrow\hspace{.5cm} & z(t) = \lambda\,e^{-\kappa\,t}+\frac{\beta}{\kappa} \end{aligned}

λ=eκC\lambda=e^{-\kappa\,C}. Autrement dit,

I(t)=1z(t)=κβ+κλeκt.I(t) = \frac{1}{z(t)} = \frac{\kappa}{\beta+\kappa\lambda\,e^{-\kappa\,t}}.

Si on introduit le fait que en t=0t=0, on a I(t)=I(0)I(t)=I(0), on obtient

I(0)=κβ+κλ1I(0)=β+κλκλ=1I(0)βκ.\begin{aligned} &I(0) = \frac{\kappa}{\beta+\kappa\lambda}\\ \Leftrightarrow\hspace{.5cm} & \frac{1}{I(0)} = \frac{\beta+\kappa\lambda}{\kappa}\\ \Leftrightarrow\hspace{.5cm} & \lambda = \frac{1}{I(0)}-\frac{\beta}{\kappa}. \end{aligned}

Et donc,

I(t)=κβ11+[1I(0)κβ1]eκt,I(t) = \frac{\kappa}{\beta}\frac{1}{1+\left[\dfrac{1}{I(0)}\,\dfrac{\kappa}{\beta}-1\right]\,e^{-\kappa\,t}},

ou, plus simplement,

I(t)=I1+[II(0)1]eκt,I(t) = \frac{I^\star}{1+\left [\dfrac{I^\star}{I(0)}-1\right]\,e^{-\kappa t}},

grâce à la définition de II^\star donnée plus haut. On voit assez vite que, si R01R_0 \geq 1,

  • en t=0t=0 on obtient bien I(0)I(0) et
  • limtI(t)=I\displaystyle\lim_{t\rightarrow\infty} I(t) = I^\star, vu que limteκt=0\displaystyle\lim_{t\rightarrow\infty} e^{-\kappa\,t} = 0.

On a donc une situation épidémique qui évolue de I(0)I(0) à II^\star et qui n’en bouge plus. Par exemple,

SIS.png
Évolution du modèle SIS pour R0R_0 = 1.5 (β\beta = 15%, γ\gamma = 10%, S(0)S(0) = 99%).

In fine, ça signifie que dans l’absolu tout le monde y passe et qu’il est évidemment possible d’y passer plusieurs fois.

Un autre cas de variations cyclique provient du cas où l’immunité existe, mais n’est que temporaire : c’est le modèle SIRS.

SIRS.png
Modèle SIRS

Dans ce cas, le nombre de reproduction est également

R0=βγ,R_0 = \frac{\beta}{\gamma},

qui, quand R01R_0\geq 1 conduit à une situation endémique cette fois caractérisée par

S=1R0 et I=δγ+δ[11R0],S^\star = \frac{1}{R_0} \text{ et } I^\star = \frac{\delta}{\gamma + \delta}\left[1-\frac{1}{R_0}\right],

ce qui revient bien au modèle SIR d’origine pour δ\delta = 0. Et en pratique, ça donne par exemple ceci :

SIRS.png
Évolution du nombre de personnes susceptibles, infectées et guéries dans le cadre d’un modèle SIRS où l’immunité dure en moyenne δ1\delta^{-1} unités de temps (avec β\beta = 20%, γ\gamma = 10%, δ\delta = 1%, S(0)S(0) = 99%).

On voit qu’on retrouve dans ce cas un comportement ondulatoire (avec plusieurs pics épidémiques de moindres amplitudes) similaire à l’inclusion du taux de mortalité. Ceci dit, notez bien que le nombre d’infection finit malgré tout par se stabiliser autour de II^\star : on a dans ce cas des oscillations amorties. Une fois encore, les périodes d’immunité sont généralement très longues (δ\delta très petit), donc le modèle SIR suffit.

Pour avoir des épidémies régulières, ce qui arrive par exemple dans le cas de la grippe (une épidémie par an en hiver), on peut repartir du modèle SIS et introduire un taux d’infection variable β(t)\beta(t), modélisant le fait que les défenses immunitaires sont moins efficaces à certaines périodes de l’année. Par exemple,

SIS_cyclic.png
Cas d’un modèle SIS avec taux d’infection β(t)\beta(t) variable (courbe noire, qui varie ici entre 1 et 20% sur une période de 100 unités de temps) et évolution du pourcentage de personnes infectées dans ce cas (courbe rouge, avec γ\gamma = 10% et S(0)S(0) = 99%).

Incubation et quarantaine

Sur le modèle SIR de base, on peut également rajouter une période d’incubation, durant laquelle la personne infectée n’est pas encore contagieuse. C’est d’ailleurs le cas pour bien assez de maladies, où la contagiosité ne se développe qu’après quelques jours.

SEIR.png
Modèle SEIR, avec "E" pour "exposé".

Le nombre de reproduction reste le même et le système ne présente pas de situation endémique. Par contre, par rapport au modèle SIR avec les mêmes paramètres, on voit un délai apparaître, ainsi qu’un élargissement de la courbe :

SEIR.png
Comparaison entre le pic d’infection pour le modèle SIR (en pointillé rouge, β\beta = 20%, γ\gamma = 10%, S(0)S(0) = 99%) et pour le modèle SEIR (même paramètre et η\eta = 5%), le pic d’infection (en rouge) et le nombre de personnes exposées (en orange).

Néanmoins, on peut profiter de cette période d’incubation pour tenter de détecter les (futures) personnes infectieuses et tenter de les mettre en quarantaine pour éviter qu’elles en infectent d’autre. On peut alors imaginer le circuit suivant.

SEIQR.png
Modèle SEIQR.

Dans ce cas, ζ\zeta détermine le nombre de jours moyen que restera une personne exposée avant d’être mis en quarantaine. Évidemment, plus ζ\zeta est grand, plus la détection et la mise en quarantaine sera efficace. Par la suite, on a généralement Γ<γ\Gamma < \gamma, puisque la période d’infectiosité ne change normalement pas avec la mise en quarantaine et que si la personne est mise plus tôt que le moment où elle est infectieuse, elle devra rester plus longtemps en quarantaine. Dans l’absolu, on a donc η+γ=ζ+Γ\eta + \gamma = \zeta + \Gamma, afin que la probabilité de chaque branche soit équivalente, mais on pourrait très bien imaginer guérir plus vite si la maladie est détectée plus tôt.

Par exemple,

SEIQR.png
Comparaison entre le pic d’infection pour le modèle SEIR (en pointillé rouge, β\beta = 20%, γ\gamma = 10%, η\eta = 5%, S(0)S(0) = 99%, voir ci-dessus) et pour le modèle SEIQR (même paramètre et ζ\zeta = 1%, Γ\Gamma = 14%), le pic d’infection (en rouge) et le nombre de personnes en quarantaine (en vert).

On voit bien que toute mise en quarantaine, même faible, est une amélioration :pirate:

Conclusion

… Et ainsi de suite. Le tout est de bien étudier les différents mécanismes de la maladie afin de déterminer des catégories adéquates. Par exemple, dans le cas du SIDA, on n’a pas d’immunité, mais plusieurs stades d’infectiosité avec des taux différents. Dans le cas de la malaria, on inclut également la population de moustiques, vecteurs de la maladie, etc. C’est un sujet de recherche très vaste !

Bref, toute info supplémentaire sur la maladie est la bienvenue : le modèle SIR considère une immunité ad vitam æternam, et pas d’incubation. Le problème, c’est que dans le cas d’une nouvelle maladie, les infos mettent du temps à arriver, ce qui pousse de manière assez logique à privilégier un confinement généralisé (R0R_0 et γ\gamma peuvent être déterminés assez vite) jusqu’à avoir plus d’infos.


  1. Plutôt parce que l’immunité ne fonctionne pas vu que les souches ont une forte variabilité, mais l’effet est le même.

Au final, l’île s’en est bien sortie : plus tard, les journaux titreront "gestion exceptionnelle de la violite à Zeest". André, modeste, remerciera ses collaborateurs et la chance qu’il a eu de voir l’épidémie arriver de loin. Tout est bien qui finit bien… Jusqu’à la prochaine fois. Et justement, une petite maladie sans prétention commence à faire des dégâts dans la province de Wuhan en Chine. COVID-19 ? Ma foi nous verrons…

Si vous deviez retenir une chose de tout ça, c’est que "tous les modèles sont faux… mais certains sont utiles". En effet, la réalité est toujours plus complexe que n’importe lequel des modèles qu’on pourrait imaginer : c’est pour ça qu’on les appelle des "modèles", d’ailleurs.

Dans le cas qui nous occupe, on retiendra que dans le cas déterministe (seconde et troisième partie), on part du principe que la population est brassée en permanence (tout le monde croise tout le monde) ce qui en termes de maladie représente… Le pire des cas, même si en essayant de reproduire des données réelles d’épidémies passées ou présentes, on absorbe ces effets dans les paramètres. On a vu que pour résorber ces effets, il fallait partir sur des simulations stochastiques sur base de réseaux : ce qu’on gagne en précision, on le perd alors en complexité (mais c’est parfois nécessaire).

Une autre source d’approximation provient du fait que les modèles présentés partent généralement du principe qu’une fois la direction décidée (les paramètres fixés), plus rien ne change. Bien entendu, les décisions prises au cours de l’épidémie changent parfois radicalement les paramètres et donc l’évolution des prédictions. Les simulations doivent donc être réévaluées en permanence.


Merci à @Holosmos et @Ekron pour la validation, à @Amaury et @STalone pour JSFiddle et @QuentinC pour les commentaires. :)

Tous les scripts et schémas utilisés dans ce tutoriel sont disponibles sur Github sous licence CC-BY.

Sources utilisées : outre Wikipédia,

Ces contenus pourraient vous intéresser

3 commentaires

Je confirme qu’il serait utile de préciser certaines notations utilisées, en particulier le point pour les dérivées qui n’est pas souvent abordé lors de l’introduction des dérivées au lycée.

+0 -0

Passionnant mais une heure de lecture c’est très optimiste o_O (avec mon faible niveau en math).

Stéph

Je ne suis pas responsable de ça, c’est calculé automatiquement …

Mais voilà pourquoi j’aime et soutien ce site, bravo.

Stéph

… Mais merci :)

Je confirme qu’il serait utile de préciser certaines notations utilisées, en particulier le point pour les dérivées qui n’est pas souvent abordé lors de l’introduction des dérivées au lycée.

amael

C’est précisé, mais je mettrais une note plus explicite prochaine mise à jour :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte