La modélisation des épidémies Grand Oral · mathématiques, SVT, SES, HLP, HGGSP Un support de connaissances pour construire sa propre question

← Tous les textes du Grand Oral

MathsSVTSESHLPHGGSP

En mars 2020, tout le monde a entendu parler du « R zéro », de « croissance exponentielle », d'« aplatir la courbe » et d'« immunité collective ». Derrière ces mots, il y a des modèles mathématiques, dont certains datent de plus de deux siècles. Ils servent à comprendre comment une maladie se propage, à prévoir l'effet d'un confinement ou d'une vaccination, et à décider.

Ce texte présente ces modèles un par un, du plus simple au plus complet, avec uniquement des outils de terminale : suites, fonction exponentielle, logarithme, dérivation, primitives, probabilités conditionnelles et loi binomiale. Il rassemble des connaissances ; à chacun d'y choisir une direction et d'y construire sa question.

Sommaire
  1. Une histoire des épidémies et des calculs
  2. Le début d'une épidémie : croissance exponentielle et R0
  3. Les modèles en suites : SI, SIS, SIR
  4. Le modèle SIR continu : le pic, la fin, l'immunité collective
  5. Le hasard dans les épidémies
  6. Le Covid-19 : les modèles face à la décision
  7. Les limites des modèles
  8. Des directions pour construire sa question
Une histoire des épidémies et des calculs Les grandes épidémies

Les épidémies ont marqué l'histoire des sociétés. La peste noire, arrivée en Europe en 1347, tue en quelques années entre le tiers et la moitié de sa population. Le choléra, venu d'Inde, parcourt le monde en plusieurs vagues au XIXe siècle. La grippe dite « espagnole » de 1918-1919 fait plusieurs dizaines de millions de morts, davantage que la Première Guerre mondiale. La variole, qui tuait encore des millions de personnes au XXe siècle, est déclarée éradiquée par l'Organisation mondiale de la santé en 1980, grâce à une campagne mondiale de vaccination : c'est la seule maladie humaine que l'on ait fait disparaître.

Daniel Bernoulli et la variole (1760) Gravure : portrait d'un homme en perruque blanche, dans un cadre orné, avec une inscription latine. Daniel Bernoulli, gravure de Johann Jakob Haid. Image : Wikimedia Commons, domaine public.

Au XVIIIe siècle, la variole (la « petite vérole ») tue environ un enfant sur dix. On connaît un moyen de s'en protéger, l'inoculation : on introduit sous la peau d'une personne saine un peu de matière prélevée sur un malade peu atteint. La personne fait une forme le plus souvent légère, puis elle est protégée à vie. Mais l'inoculation est risquée : elle tue environ une personne sur deux cents. Faut-il la recommander ? (La vaccination, inventée par Edward Jenner en 1796, utilisera la variole de la vache, bien moins dangereuse.)

En 1760, le savant suisse Daniel Bernoulli (1700-1782), médecin, physicien et mathématicien, présente à l'Académie des sciences de Paris le premier modèle mathématique d'une maladie infectieuse. À partir des tables de mortalité, il calcule que si la variole disparaissait, l'espérance de vie à la naissance passerait d'environ $26$ ans et $7$ mois à environ $29$ ans et $9$ mois : un gain de plus de trois ans. Il conclut que l'inoculation doit être encouragée.

Le philosophe et mathématicien Jean le Rond d'Alembert lui répond par une objection célèbre : une moyenne ne suffit pas pour décider. Une personne qui se fait inoculer prend un risque immédiat, un sur deux cents de mourir dans le mois, pour un gain lointain et incertain. Est-il raisonnable, pour un père, d'exposer son enfant à ce risque ? Ce débat, entre l'intérêt collectif mesuré par une moyenne et la décision individuelle face au risque, est toujours actuel.

John Snow et le choléra (1854)

Au milieu du XIXe siècle, on pense que le choléra se transmet par les « miasmes », un air vicié. Le médecin londonien John Snow soupçonne plutôt l'eau. En septembre 1854, une épidémie très violente frappe le quartier de Soho, à Londres : plus de six cents morts en quelques semaines. Snow place chaque décès sur une carte et constate qu'ils se regroupent autour d'une pompe à eau, celle de Broad Street. Les exceptions confirment son idée : les ouvriers d'une brasserie voisine, qui buvaient la bière de leur employeur, sont presque tous épargnés. Il obtient que l'on retire la poignée de la pompe.

Carte en noir et blanc des rues de Soho à Londres, avec de petits traits noirs empilés devant les maisons, très nombreux autour de la pompe de Broad Street. La carte de John Snow (1854) : chaque petit trait noir est un décès. Ils se concentrent autour de la pompe de Broad Street, au centre. Carte : J. Snow, Wikimedia Commons, domaine public.

Snow fait mieux encore : dans le sud de Londres, deux compagnies distribuent l'eau dans les mêmes rues, l'une la puisant dans la Tamise en aval de la ville, là où se déversent les égouts, l'autre en amont. Il compare les décès dans les maisons desservies par chacune : environ $315$ décès pour $10\,000$ maisons d'un côté, $37$ de l'autre. C'est une véritable expérience statistique, l'un des actes de naissance de l'épidémiologie. La bactérie du choléra ne sera clairement identifiée qu'en 1884, par Robert Koch.

Ross, puis Kermack et McKendrick

Le médecin britannique Ronald Ross reçoit le prix Nobel de médecine en 1902 pour avoir montré que le paludisme est transmis par un moustique. Il en tire un modèle mathématique et une conclusion importante : il n'est pas nécessaire de tuer tous les moustiques pour faire disparaître le paludisme ; il suffit de passer sous un certain seuil. C'est la première apparition de l'idée de seuil, que l'on retrouvera dans le nombre $R_0$.

En 1927, deux Écossais, le biochimiste William Kermack (devenu aveugle après un accident de laboratoire) et le médecin militaire Anderson McKendrick, publient le modèle qui sert encore de base à presque tous les autres : le modèle SIR, étudié dans les parties 3 et 4.

Le début d'une épidémie : croissance exponentielle et R0 Le nombre $R_0$

On appelle nombre de reproduction de base, noté $R_0$ (« R zéro »), le nombre moyen de personnes qu'une personne malade contamine, au début de l'épidémie, quand tout le monde autour d'elle peut encore être contaminé. C'est une moyenne : certains malades ne contaminent personne, d'autres beaucoup.

Simplifions : comptons les malades par « générations » (le premier malade forme la génération $0$, ceux qu'il contamine la génération $1$, etc.), et supposons que chacun contamine exactement $R_0$ personnes. Si $u_n$ est le nombre de nouveaux malades de la génération $n$, alors

$$u_{n+1} = R_0\,u_n, \qquad \text{donc} \qquad u_n = u_0\,R_0^{\,n}.$$

La suite $(u_n)$ est géométrique de raison $R_0$. Avec $u_0 = 1$ et $R_0 = 3$ : $3$ malades à la génération $1$, $9$ à la génération $2$, $27$ à la génération $3$… et $3^{10} = 59\,049$ à la génération $10$.

Le seuil $R_0 = 1$

Combien de personnes auront été malades au total, de la génération $0$ à la génération $n$ ? C'est la somme des termes d'une suite géométrique : pour $R_0 \neq 1$,

$$1 + R_0 + R_0^2 + \cdots + R_0^{\,n} = \frac{R_0^{\,n+1} - 1}{R_0 - 1}.$$
  • Si $R_0 > 1$, $R_0^{\,n+1}$ tend vers $+\infty$ : le nombre de malades explose. Avec $R_0 = 3$, on dépasse déjà $88\,000$ malades à la dixième génération.
  • Si $0 < R_0 < 1$, $R_0^{\,n+1}$ tend vers $0$ et le total tend vers $\dfrac{-1}{R_0 - 1} = \dfrac{1}{1 - R_0}$ : l'épidémie s'éteint d'elle-même. Avec $R_0 = 0{,}5$, il n'y a en moyenne que $\dfrac{1}{1 - 0{,}5} = 2$ malades en tout.

Tout l'enjeu de la lutte contre une épidémie est donc de faire passer le nombre de reproduction sous $1$ : en réduisant les contacts (gestes barrières, confinement), en réduisant la contagiosité (masques), en réduisant le nombre de personnes qui peuvent être contaminées (vaccination). Quelques valeurs de $R_0$ estimées : environ $1{,}3$ pour la grippe saisonnière, $2$ à $3$ pour la première souche du virus du Covid-19, $12$ à $18$ pour la rougeole, l'une des maladies les plus contagieuses.

En temps continu : l'exponentielle et le temps de doublement

En réalité, les contaminations ne se font pas par générations bien séparées, mais tous les jours. On décrit alors le nombre de malades par une fonction du temps, qui vérifie au début de l'épidémie $I'(t) = r\,I(t)$ : la vitesse d'augmentation est proportionnelle au nombre de malades. D'après le cours, $I(t) = I_0\,\mathrm{e}^{rt}$.

Le temps de doublement $T$ est la durée au bout de laquelle le nombre de malades a doublé :

  • il faut $I(t + T) = 2\,I(t)$, c'est-à-dire $I_0\,\mathrm{e}^{rt}\,\mathrm{e}^{rT} = 2\,I_0\,\mathrm{e}^{rt}$ ;
  • en divisant par $I_0\,\mathrm{e}^{rt} > 0$ : $\mathrm{e}^{rT} = 2$ ;
  • en appliquant le logarithme : $rT = \ln 2$, soit $T = \dfrac{\ln 2}{r}$.

Au début de l'épidémie de Covid-19 en France, en mars 2020, le nombre de cas doublait environ tous les trois jours. Cela correspond à $r = \dfrac{\ln 2}{3} \approx 0{,}23$ par jour. En $30$ jours, soit $10$ doublements, le nombre de cas est multiplié par $2^{10} = 1\,024$. C'est ce qui rend la croissance exponentielle si difficile à percevoir : quand on commence à voir les malades, il est déjà tard.

Les modèles en suites : SI, SIS, SIR

La croissance exponentielle ne peut pas durer : à force de contaminer, il ne reste plus personne à contaminer. Pour en tenir compte, on partage la population en compartiments et l'on suit, jour après jour, la part de la population dans chacun.

Le modèle SI : sains et infectés

Deux compartiments : les personnes saines (S, pour « susceptibles » d'être contaminées) et les personnes infectées (I). On note $i_n$ la proportion d'infectés au jour $n$, et donc $1 - i_n$ celle des personnes saines. On suppose qu'une fois infecté, on le reste (c'est le cas de certaines infections chroniques, ou d'une rumeur qui se répand).

Les nouvelles infections. Une contamination demande une rencontre entre une personne saine et une personne infectée. Le nombre de ces rencontres est proportionnel à la part des saines et à la part des infectées, donc au produit $(1 - i_n)\,i_n$ (le même raisonnement que pour les rencontres entre proies et prédateurs, voir Les systèmes proies-prédateurs). Avec un taux de contamination $\beta$ (la lettre grecque « bêta ») :

$$i_{n+1} = i_n + \beta\,i_n\,(1 - i_n).$$

Avec $\beta = 0{,}5$ et $1\,\%$ d'infectés au départ ($i_0 = 0{,}01$) :

  • $i_1 = 0{,}01 + 0{,}5 \times 0{,}01 \times 0{,}99$, soit $i_1 = 0{,}01 + 0{,}00495 \approx 0{,}015$ ;
  • $i_2 \approx 0{,}015 + 0{,}5 \times 0{,}015 \times 0{,}985$, soit $i_2 \approx 0{,}022$.
jour $n$$0$$3$$6$$9$$12$$15$
$i_n$$0{,}010$$0{,}033$$0{,}106$$0{,}305$$0{,}656$$0{,}919$

Au début, quand $1 - i_n \approx 1$, on a $i_{n+1} \approx (1 + \beta)\,i_n$ : on retrouve la croissance géométrique. Puis elle ralentit, car il reste de moins en moins de personnes saines.

La suite $(i_n)$ converge vers $1$ (avec $0 < \beta \leqslant 1$ et $0 < i_0 < 1$)

Une récurrence : $0 < i_n < 1$ pour tout $n$. C'est vrai pour $n = 0$. Supposons $0 < i_n < 1$. Alors $\beta\,i_n(1 - i_n) > 0$, donc $i_{n+1} > i_n > 0$. D'autre part, on factorise :

$$1 - i_{n+1} = (1 - i_n) - \beta\,i_n(1 - i_n),$$

et, en factorisant par $(1 - i_n)$,

$$1 - i_{n+1} = (1 - i_n)(1 - \beta\,i_n).$$

Comme $1 - i_n > 0$ et $\beta\,i_n < 1$ (car $\beta \leqslant 1$ et $i_n < 1$), ce produit est strictement positif : $i_{n+1} < 1$. La propriété est héréditaire, donc vraie pour tout $n$.

Monotonie. On vient de voir que $i_{n+1} - i_n = \beta\,i_n(1 - i_n) > 0$ : la suite est croissante.

Convergence. Croissante et majorée par $1$, elle converge vers une limite $\ell$. Comme la fonction $f(x) = x + \beta x(1 - x)$ est continue et que $i_{n+1} = f(i_n)$, la limite vérifie $\ell = f(\ell)$, c'est-à-dire $\beta\,\ell(1 - \ell) = 0$ : $\ell = 0$ ou $\ell = 1$. Mais la suite est croissante, donc $\ell \geqslant i_0 > 0$. Finalement $\ell = 1$ : dans le modèle SI, toute la population finit infectée.

La version continue : la courbe logistique. En temps continu, le modèle s'écrit $i'(t) = \beta\,i(t)\big(1 - i(t)\big)$. On vérifie (en dérivant, comme pour la fonction sigmoïde du texte Neurone biologique, neurone mathématique) que la fonction

$$i(t) = \frac{1}{1 + A\,\mathrm{e}^{-\beta t}}, \qquad A = \frac{1 - i_0}{i_0},$$

est solution. Avec $i_0 = 0{,}01$, on a $A = 99$. C'est une courbe en S, dite logistique : lente au début, très rapide au milieu, de nouveau lente à la fin. On l'appelle aussi courbe de diffusion, car elle décrit aussi bien la propagation d'une rumeur, d'une innovation ou d'un produit nouveau (la suite logistique est étudiée dans Suites récurrentes et chaos).

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var b = 0.5, X = [], Y = [], i = 0.01; for (var n = 0; n <= 25; n++) { X.push(n); Y.push(i); i = i + b * i * (1 - i); } board.create('functiongraph', [function (t) { return 1 / (1 + 99 * Math.exp(-b * t)); }, 0, 25], {strokeColor: '#2e7d32', strokeWidth: 2, highlight: false}); board.create('curve', [X, Y], {strokeWidth: 0, curveType: 'plot', highlight: false, strokeColor: '#c62828'}); for (var k = 0; k < X.length; k++) { board.create('point', [X[k], Y[k]], {name: '', size: 2, color: '#c62828', fixed: true, showInfobox: false}); } board.create('text', [1, 1.07, 'points rouges : suite i(n) ; courbe verte : i(t)'], opt); board.create('text', [21, -0.09, 'jours'], opt); Le modèle SI avec un taux de contamination de $0{,}5$ par jour et $1\,\%$ d'infectés au départ : en rouge, la suite $(i_n)$, jour par jour ; en vert, la solution continue, une courbe logistique. Les deux modèles ont la même allure, sans être identiques.
Le modèle SIS : une maladie qui revient

Pour certaines maladies, on guérit sans être protégé ensuite : on redevient « sain mais contaminable ». C'est le cas de certaines infections bactériennes. On ajoute donc des guérisons : chaque jour, une part $\gamma$ (la lettre grecque « gamma ») des infectés guérit et retourne dans le compartiment des sains :

$$i_{n+1} = i_n + \beta\,i_n(1 - i_n) - \gamma\,i_n.$$

Où la suite peut-elle se stabiliser ? Une limite $\ell$ doit vérifier $\beta\,\ell(1 - \ell) - \gamma\,\ell = 0$, c'est-à-dire $\ell\big(\beta(1 - \ell) - \gamma\big) = 0$. Donc $\ell = 0$ (la maladie disparaît) ou

$$1 - \ell = \frac{\gamma}{\beta}, \qquad \text{soit} \qquad \ell = 1 - \frac{\gamma}{\beta}.$$

Cette seconde valeur n'a de sens que si $\beta > \gamma$. Avec $\beta = 0{,}5$ et $\gamma = 0{,}2$, la maladie se stabilise avec $60\,\%$ de la population infectée en permanence : on dit qu'elle devient endémique. Si au contraire $\beta < \gamma$, on guérit plus vite qu'on ne contamine, et la maladie disparaît. On retrouve un seuil : le quotient $\dfrac{\beta}{\gamma}$ joue le rôle de $R_0$.

Le modèle SIR : sains, infectés, rétablis

Pour la plupart des maladies virales (rougeole, grippe, Covid-19), on est protégé après la guérison, au moins un temps. On ajoute un troisième compartiment : les rétablis (R, pour « removed » en anglais : retirés), qui ne peuvent plus être contaminés. On compte maintenant des personnes : dans une ville de $N = 10\,000$ habitants, on note $S_n$, $I_n$ et $R_n$ les nombres de sains, d'infectés et de rétablis au jour $n$.

  • Les nouvelles infections du jour sont $\beta\,\dfrac{S_n\,I_n}{N}$ (proportionnelles aux rencontres) ;
  • les guérisons du jour sont $\gamma\,I_n$.
$$\left\{\begin{array}{l} S_{n+1} = S_n - \beta\,\dfrac{S_n I_n}{N} \\[8pt] I_{n+1} = I_n + \beta\,\dfrac{S_n I_n}{N} - \gamma\,I_n \\[8pt] R_{n+1} = R_n + \gamma\,I_n \end{array}\right.$$

La population reste constante. En additionnant les trois lignes, les termes $\beta\,\dfrac{S_nI_n}{N}$ se compensent, ainsi que les termes $\gamma I_n$ : $S_{n+1} + I_{n+1} + R_{n+1} = S_n + I_n + R_n$. Personne n'apparaît ni ne disparaît (on néglige les naissances et les décès).

Le sens de $\gamma$. Si $\gamma = 0{,}2$, un cinquième des malades guérit chaque jour : on reste malade en moyenne $\dfrac{1}{\gamma} = 5$ jours. Pendant ces $5$ jours, un malade contamine $\beta$ personnes par jour au début de l'épidémie, donc $R_0 = \dfrac{\beta}{\gamma}$ personnes en tout. Avec $\beta = 0{,}5$, $R_0 = \dfrac{0{,}5}{0{,}2} = 2{,}5$.

Le premier jour, à la main, avec $10$ malades au départ ($S_0 = 9\,990$, $I_0 = 10$, $R_0 = 0$ ; attention, ici $R_0$ désigne le nombre de rétablis au jour $0$, à ne pas confondre avec le nombre de reproduction).

  • Nouvelles infections : $0{,}5 \times \dfrac{9\,990 \times 10}{10\,000} = 4{,}995$ ; guérisons : $0{,}2 \times 10 = 2$.
  • $S_1 = 9\,990 - 4{,}995 = 9\,985{,}005$ ;
  • $I_1 = 10 + 4{,}995 - 2 = 12{,}995$ ;
  • $R_1 = 0 + 2 = 2$.

Le tableur ci-dessous fait le calcul sur $100$ jours. On peut cliquer sur une cellule pour voir sa formule, et modifier $\beta$ (en B2), $\gamma$ (en B3) ou la population (en B4), puis appuyer sur Entrée : tout se recalcule, et la figure qui suit aussi. Ce tableur utilise le point comme séparateur décimal (0.5 et non 0,5). Les formules de la ligne 8 :

celluleformule
B8 (sains)=B7-$B$2*B7*C7/$B$4
C8 (infectés)=C7+$B$2*B7*C7/$B$4-$B$3*C7
D8 (rétablis)=D7+$B$3*C7
var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var etat = '', P = null; function lire() { var el = document.getElementById('ep-tab'); if (!el) { return null; } var st = el.getAttribute('data-state') || ''; if (st === etat && P) { return P; } etat = st; var c = {}; try { c = JSON.parse(st).cells || {}; } catch (e) { c = {}; } function v(k, d) { var x = parseFloat(String(c[k] === undefined ? d : c[k]).replace(',', '.')); return isFinite(x) ? x : d; } P = {b: v('B2', 0.5), g: v('B3', 0.2), N: v('B4', 10000), S: v('B7', 9990), I: v('C7', 10), R: v('D7', 0)}; return P; } var col = ['#1565c0', '#c62828', '#2e7d32']; for (var k = 0; k < 3; k++) { (function (k) { var cu = board.create('curve', [[0], [0]], {strokeColor: col[k], strokeWidth: 2, highlight: false}); cu.updateDataArray = function () { var p = lire(); this.dataX = []; this.dataY = []; if (!p) { return; } var S = p.S, I = p.I, R = p.R; for (var n = 0; n <= 100; n++) { this.dataX.push(n); this.dataY.push([S, I, R][k]); var nv = p.b * S * I / p.N, gu = p.g * I; S = S - nv; I = I + nv - gu; R = R + gu; } }; })(k); } board.create('text', [2, 10900, 'sains'], Object.assign({}, opt, {strokeColor: col[0]})); board.create('text', [24, 10900, 'infectés'], Object.assign({}, opt, {strokeColor: col[1]})); board.create('text', [52, 10900, 'rétablis'], Object.assign({}, opt, {strokeColor: col[2]})); board.create('text', [78, -1300, 'jours'], opt); var vu = ''; setInterval(function () { var el = document.getElementById('ep-tab'); var st = el ? el.getAttribute('data-state') : ''; if (st !== vu) { vu = st; board.update(); } }, 500); Les trois colonnes du tableur tracées sur $100$ jours. Avec les valeurs de départ, le nombre d'infectés culmine vers le $27^\text{e}$ jour, à environ $2\,500$ malades en même temps, puis l'épidémie s'éteint.

On observe un pic, puis une décroissance, et l'épidémie s'arrête alors qu'il reste encore des personnes saines (environ $940$ sur $10\,000$) : elle s'éteint faute de malades, pas faute de personnes à contaminer. La partie suivante explique ces deux observations.

Le modèle SIR continu : le pic, la fin, l'immunité collective Les équations

Passons au temps continu, avec des proportions : $S(t)$, $I(t)$ et $R(t)$ sont les parts de la population saine, infectée et rétablie à l'instant $t$ (en jours), avec $S + I + R = 1$. Comme pour la méthode d'Euler (voir le texte sur les proies et les prédateurs), les suites de la partie précédente sont des approximations de ce système d'équations différentielles :

$$\left\{\begin{array}{l} S' = -\beta\,S\,I \\[4pt] I' = \beta\,S\,I - \gamma\,I \\[4pt] R' = \gamma\,I \end{array}\right.$$

On ne sait pas écrire ses solutions avec les fonctions usuelles, mais on peut en déduire beaucoup de choses par le calcul.

Quand le pic arrive-t-il ?

Factorisons la deuxième équation : $I' = I\,(\beta S - \gamma)$. Comme $I > 0$, le signe de $I'$ est celui de $\beta S - \gamma$ :

  • le nombre d'infectés augmente tant que $S > \dfrac{\gamma}{\beta} = \dfrac{1}{R_0}$ ;
  • il diminue dès que $S < \dfrac{1}{R_0}$.

Or $S' = -\beta S I < 0$ : la part des sains ne fait que diminuer. Le nombre d'infectés augmente donc, atteint un maximum au moment exact où $S = \dfrac{1}{R_0}$, puis diminue. Avec $R_0 = 2{,}5$, le pic a lieu quand il ne reste plus que $\dfrac{1}{2{,}5} = 40\,\%$ de la population saine, donc quand $60\,\%$ de la population a déjà été touchée.

Le seuil épidémique. Au départ, presque tout le monde est sain ($S \approx 1$). L'épidémie démarre si $I'(0) > 0$, c'est-à-dire si $\beta > \gamma$, soit $R_0 > 1$. On retrouve le seuil de la partie 2.

Retrouver $R_0$ à partir du temps de doublement. Au début, $S \approx 1$ et $I' \approx (\beta - \gamma)\,I$ : la croissance est exponentielle de taux $r = \beta - \gamma$. Comme $R_0 = \dfrac{\beta}{\gamma} = \dfrac{r + \gamma}{\gamma}$,

$$R_0 = 1 + \frac{r}{\gamma}.$$

Pour le Covid-19 en mars 2020, avec $r \approx 0{,}23$ par jour et une durée de contagiosité d'environ une semaine ($\gamma \approx \tfrac{1}{7})$, on obtient $R_0 \approx 1 + 0{,}23 \times 7 \approx 2{,}6$ : c'est l'ordre de grandeur publié à l'époque. Ce calcul simple montre comment on estime un nombre qu'on ne peut pas mesurer directement.

Combien de personnes seront touchées au total ? L'équation de la taille finale

Étape 1. En divisant la première équation par $S$, $\dfrac{S'}{S} = -\beta I$. La troisième donne $I = \dfrac{R'}{\gamma}$. Donc

$$\frac{S'}{S} = -\frac{\beta}{\gamma}\,R' = -R_0\,R'.$$

Étape 2. À gauche, on reconnaît la dérivée de $\ln S$ ; à droite, celle de $-R_0\,R$. Deux fonctions qui ont la même dérivée diffèrent d'une constante : $\ln S(t) = -R_0\,R(t) + C$.

Étape 3. Au départ, presque tout le monde est sain et personne n'est rétabli : $S(0) \approx 1$ et $R(0) = 0$, donc $C \approx \ln 1 = 0$.

Étape 4. À la fin, il n'y a plus d'infectés : en notant $s_\infty$ la part finale des sains, la part des rétablis est $1 - s_\infty$. D'où

$$\ln s_\infty = -R_0\,(1 - s_\infty).$$

Cette équation ne se résout pas par un calcul exact, mais on l'approche par dichotomie (voir le texte Approximation des solutions d'une équation). Avec $R_0 = 2{,}5$, on trouve $s_\infty \approx 0{,}107$ : environ $89\,\%$ de la population aura été infectée. Le tableur donnait $9\,061$ personnes sur $10\,000$, soit $91\,\%$, avec son pas d'une journée.

Le dépassement. Le pic a lieu quand $60\,\%$ de la population a été touchée, mais l'épidémie continue sur sa lancée jusqu'à $89\,\%$ : les malades encore nombreux après le pic contaminent encore. Il y a un écart important entre le seuil où l'épidémie commence à reculer et le nombre total de personnes touchées.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var R0 = board.create('slider', [[0.02, 0.8], [0.5, 0.8], [1.2, 2.5, 5]], {withLabel: false, snapWidth: 0.1}); board.create('functiongraph', [function (x) { return Math.log(x); }, 0.03, 1.1], {strokeColor: '#1565c0', strokeWidth: 2, highlight: false}); board.create('functiongraph', [function (x) { return -R0.Value() * (1 - x); }, 0, 1.1], {strokeColor: '#c62828', strokeWidth: 2, highlight: false}); function racine() { var a = 1e-9, b = 0.999, r = R0.Value(); for (var k = 0; k < 60; k++) { var m = (a + b) / 2; if (Math.log(m) + r * (1 - m) < 0) { a = m; } else { b = m; } } return (a + b) / 2; } board.create('point', [function () { return racine(); }, function () { return Math.log(racine()); }], {name: '', size: 4, color: '#000', fixed: true}); board.create('text', [0.56, 0.8, function () { return 'R0 = ' + R0.Value().toFixed(1).replace('.', ','); }], opt); board.create('text', [0.02, 0.55, function () { var s = racine(); return 's∞ ≈ ' + s.toFixed(3).replace('.', ',') + ' : ' + Math.round(100 * (1 - s)) + ' % de personnes touchées'; }], opt); board.create('text', [0.3, -0.5, 'y = ln x'], Object.assign({}, opt, {strokeColor: '#1565c0'})); board.create('text', [0.5, -2.1, 'y = −R0 (1 − x)'], Object.assign({}, opt, {strokeColor: '#c62828'})); Les solutions de l'équation de la taille finale sont les abscisses des points d'intersection de la courbe du logarithme (en bleu) et de la droite (en rouge). L'une est toujours $x = 1$ ; l'autre, le point noir, donne la part finale des personnes saines. Le curseur fait varier $R_0$.
L'immunité collective et la vaccination

Supposons qu'avant l'arrivée de la maladie, on vaccine une proportion $p$ de la population. Les personnes vaccinées ne peuvent pas être contaminées : au départ, la part des sains contaminables est $S(0) \approx 1 - p$. L'épidémie démarre seulement si $I'(0) > 0$, c'est-à-dire si $\beta S(0) > \gamma$.

Le seuil de vaccination : $p > 1 - \dfrac{1}{R_0}$

L'épidémie ne démarre pas si $\beta(1 - p) \leqslant \gamma$. En divisant par $\gamma > 0$ : $R_0(1 - p) \leqslant 1$, soit $1 - p \leqslant \dfrac{1}{R_0}$, soit $p \geqslant 1 - \dfrac{1}{R_0}$.

maladie$R_0$ (ordre de grandeur)part à vacciner $1 - \frac{1}{R_0}$
grippe saisonnière$1{,}3$environ $23\,\%$
Covid-19 (première souche)$3$environ $67\,\%$
rougeole$15$environ $93\,\%$

C'est l'immunité collective : au-delà de ce seuil, même les personnes non vaccinées (nourrissons, personnes malades qui ne peuvent pas l'être) sont protégées, car la maladie ne peut plus circuler. Pour la rougeole, c'est pourquoi l'Organisation mondiale de la santé vise $95\,\%$ de couverture vaccinale, et pourquoi une baisse de quelques points suffit à faire revenir des épidémies.

Un regard de SES : le passager clandestin. La vaccination protège celui qui est vacciné, mais aussi les autres : les économistes parlent d'externalité positive. L'immunité collective a les caractères d'un bien commun : quand presque tout le monde est vacciné, une personne peut être tentée de ne pas l'être, en profitant de la protection des autres sans en prendre le (faible) risque. C'est le comportement de « passager clandestin » ; s'il se généralise, la couverture passe sous le seuil et l'épidémie revient. On retrouve, sous une autre forme, le débat entre Bernoulli et d'Alembert.

var opt = {fontSize: 12, useKatex: false, useMathJax: false, parse: false, fixed: true, highlight: false}; var g = 0.2; var bs = board.create('slider', [[5, -0.2], [70, -0.2], [0.1, 0.5, 1]], {withLabel: false, snapWidth: 0.05}); var ps = board.create('slider', [[5, -0.33], [70, -0.33], [0, 0, 0.9]], {withLabel: false, snapWidth: 0.05}); board.create('text', [78, -0.2, function () { return 'β = ' + bs.Value().toFixed(2).replace('.', ',') + ' (R0 = ' + (bs.Value() / g).toFixed(1).replace('.', ',') + ')'; }], opt); board.create('text', [78, -0.33, function () { return 'vaccinés : ' + Math.round(100 * ps.Value()) + ' %'; }], opt); var D = null, cle = ''; function calc() { var k = bs.Value() + '|' + ps.Value(); if (k === cle && D) { return D; } cle = k; var S = 0.999 * (1 - ps.Value()), I = 0.001, R = 0.999 * ps.Value(), h = 0.1, T = [0], A = [[S], [I], [R]], pic = I, tp = 0; for (var n = 1; n <= 1600; n++) { var b = bs.Value(); function F(S, I) { return [-b * S * I, b * S * I - g * I]; } var k1 = F(S, I), k2 = F(S + h/2*k1[0], I + h/2*k1[1]), k3 = F(S + h/2*k2[0], I + h/2*k2[1]), k4 = F(S + h*k3[0], I + h*k3[1]); S += h/6*(k1[0] + 2*k2[0] + 2*k3[0] + k4[0]); I += h/6*(k1[1] + 2*k2[1] + 2*k3[1] + k4[1]); R = 1 - S - I; T.push(n * h); A[0].push(S); A[1].push(I); A[2].push(R); if (I > pic) { pic = I; tp = n * h; } } D = {T: T, A: A, pic: pic, tp: tp}; return D; } var col = ['#1565c0', '#c62828', '#2e7d32']; for (var j = 0; j < 3; j++) { (function (j) { var c = board.create('curve', [[0], [0]], {strokeColor: col[j], strokeWidth: 2, highlight: false}); c.updateDataArray = function () { var d = calc(); this.dataX = d.T; this.dataY = d.A[j]; }; })(j); } board.create('text', [2, 1.24, 'sains'], Object.assign({}, opt, {strokeColor: col[0]})); board.create('text', [35, 1.24, 'infectés'], Object.assign({}, opt, {strokeColor: col[1]})); board.create('text', [75, 1.24, 'rétablis ou vaccinés'], Object.assign({}, opt, {strokeColor: col[2]})); board.create('text', [2, 1.12, function () { var d = calc(); if (bs.Value() / g * (1 - ps.Value()) <= 1) { return 'R0 × (1 − p) ≤ 1 : pas d\'épidémie'; } return 'pic : ' + Math.round(100 * d.pic) + ' % de malades vers le jour ' + Math.round(d.tp); }], opt); board.create('text', [138, 0.08, 'jours'], opt); Le modèle SIR continu sur $160$ jours, avec une durée moyenne de maladie de $5$ jours, c'est-à-dire un taux de guérison de $0{,}2$ par jour. Le premier curseur règle le taux de contamination $\beta$ (que les gestes barrières font baisser), le second la part de la population vaccinée avant l'épidémie.

« Aplatir la courbe ». En faisant baisser $\beta$ avec le premier curseur, on voit le pic devenir plus bas et plus tardif. C'était l'objectif des mesures de 2020 : ne pas forcément empêcher l'épidémie, mais éviter que le nombre de malades graves au même moment dépasse le nombre de lits de réanimation, et gagner du temps en attendant des traitements et des vaccins.

Le hasard dans les épidémies Les tests de dépistage : que vaut un résultat positif ?

Un test n'est jamais parfait. On le caractérise par deux nombres :

  • sa sensibilité : la probabilité qu'il soit positif pour une personne malade, ici $95\,\%$ ;
  • sa spécificité : la probabilité qu'il soit négatif pour une personne saine, ici $98\,\%$.

Le test paraît excellent. Pourtant, si $1\,\%$ seulement de la population est malade, que vaut un test positif ? Raisonnons sur $10\,000$ personnes testées.

  • $1\,\%$ sont malades : $100$ personnes. Le test est positif pour $95\,\%$ d'entre elles : $95$ vrais positifs.
  • $9\,900$ sont saines. Le test est négatif pour $98\,\%$ d'entre elles, donc positif pour $2\,\%$ : $0{,}02 \times 9\,900 = 198$ faux positifs.
  • En tout, $95 + 198 = 293$ tests positifs, dont $95$ seulement concernent des malades.
test positiftest négatiftotal
malades$95$$5$$100$
sains$198$$9\,702$$9\,900$
total$293$$9\,707$$10\,000$

Une personne testée positive n'a donc qu'une probabilité $\dfrac{95}{293} \approx 0{,}32$ d'être malade : environ une chance sur trois !

Le même calcul avec les probabilités conditionnelles

Notons $M$ l'événement « la personne est malade » et $T$ « le test est positif ». On connaît $P(M) = 0{,}01$, $P_M(T) = 0{,}95$ et $P_{\overline{M}}(T) = 0{,}02$. D'après la formule des probabilités totales,

$$P(T) = P(M \cap T) + P(\overline{M} \cap T),$$

avec $P(M \cap T) = P(M)\,P_M(T)$, soit $P(M \cap T) = 0{,}01 \times 0{,}95 = 0{,}0095$, et $P(\overline{M} \cap T) = 0{,}99 \times 0{,}02 = 0{,}0198$. Donc $P(T) = 0{,}0293$. Puis, par définition d'une probabilité conditionnelle,

$$P_T(M) = \frac{P(M \cap T)}{P(T)},$$

soit $P_T(M) = \dfrac{0{,}0095}{0{,}0293} \approx 0{,}324$.

Si l'on teste plutôt des personnes qui ont des symptômes, parmi lesquelles $20\,\%$ sont malades, le même calcul donne $P_T(M) \approx 0{,}92$. La valeur d'un résultat dépend donc beaucoup de la part de malades dans la population testée. C'est pourquoi on ne dépiste pas toute la population pour toutes les maladies, et pourquoi on confirme souvent un premier test positif par un second.

$R_0$ comme une espérance : la loi binomiale

Imaginons un malade qui rencontre $10$ personnes pendant sa maladie, et qui contamine chacune avec la probabilité $0{,}25$, indépendamment des autres. Le nombre $X$ de personnes contaminées suit la loi binomiale de paramètres $10$ et $0{,}25$.

  • Son espérance est $E(X) = 10 \times 0{,}25 = 2{,}5$ : c'est le $R_0$ de ce malade, en moyenne.
  • Mais $P(X = 0) = 0{,}75^{10} \approx 0{,}056$ : environ une fois sur dix-huit, ce malade ne contamine personne.

Le nombre $R_0$ est une moyenne, et derrière une moyenne il y a une grande variabilité. Dans la réalité, elle est encore plus grande qu'avec une loi binomiale : une petite partie des malades, les « super-contaminateurs », provoque une grande partie des contaminations, souvent lors de rassemblements dans des lieux fermés.

Une épidémie peut s'éteindre toute seule

Même avec $R_0 > 1$, une épidémie qui commence avec un seul malade peut disparaître par chance. Prenons un modèle très simple : chaque malade, indépendamment des autres, contamine $0$ personne avec la probabilité $\dfrac{1}{3}$, ou $2$ personnes avec la probabilité $\dfrac{2}{3}$. En moyenne, il contamine $0 \times \dfrac{1}{3} + 2 \times \dfrac{2}{3} = \dfrac{4}{3}$ personnes : $R_0 = \dfrac{4}{3} > 1$.

La probabilité d'extinction

Notons $x$ la probabilité que l'épidémie partie d'un seul malade finisse par s'éteindre. Distinguons deux cas selon ce que fait le premier malade (formule des probabilités totales).

  • Il ne contamine personne (probabilité $\frac{1}{3}$) : l'épidémie s'éteint immédiatement.
  • Il contamine deux personnes (probabilité $\frac{2}{3}$) : chacune déclenche sa propre « petite épidémie », qui s'éteint avec la probabilité $x$, indépendamment de l'autre. Les deux s'éteignent avec la probabilité $x \times x = x^2$.

Donc $x = \dfrac{1}{3} + \dfrac{2}{3}\,x^2$. En multipliant par $3$ : $2x^2 - 3x + 1 = 0$. Le discriminant vaut $9 - 8 = 1$, et les solutions sont $x = \dfrac{3 - 1}{4} = \dfrac{1}{2}$ et $x = \dfrac{3 + 1}{4} = 1$. On admet que la probabilité d'extinction est la plus petite des deux : $x = \dfrac{1}{2}$.

Une fois sur deux, l'épidémie s'arrête d'elle-même, alors que $R_0 > 1$ ! Avec trois malades introduits au départ, indépendants, il faudrait que les trois lignées s'éteignent : probabilité $\left(\tfrac{1}{2}\right)^3 = \tfrac{1}{8}$. C'est pourquoi on cherche à limiter les arrivées de cas au tout début d'une épidémie : chaque introduction est une nouvelle chance qu'elle s'installe. Le programme suivant simule ce modèle un grand nombre de fois. Plus le nombre de simulations est grand, plus il est probable que la fréquence d'extinction obtenue soit proche de $\frac{1}{2}$.

from random import random def epidemie(): malades = 1 # nombre de malades de la génération en cours for generation in range(30): if malades == 0: return True # l'épidémie s'est éteinte if malades > 200: return False # elle s'est installée nouveaux = 0 for k in range(malades): if random() < 2 / 3: # ce malade contamine 2 personnes nouveaux = nouveaux + 2 malades = nouveaux return malades == 0 n = 2000 eteintes = 0 for essai in range(n): if epidemie(): eteintes = eteintes + 1 print("fréquence d'extinction :", eteintes / n)
Le Covid-19 : les modèles face à la décision

Le 16 mars 2020, une équipe de l'Imperial College de Londres publie un rapport fondé sur un modèle de ce type, beaucoup plus détaillé (âges, foyers, écoles, lieux de travail). Sans aucune mesure, il prévoit plusieurs centaines de milliers de morts au Royaume-Uni et plus de deux millions aux États-Unis. Ce rapport pèse sur la décision de confiner la population, en France dès le 17 mars, au Royaume-Uni une semaine plus tard.

Ces modèles ont été très utiles pour comprendre l'effet d'une mesure (fermer les écoles, limiter les rassemblements) et pour prévoir la charge des hôpitaux. Ils ont aussi été critiqués : leurs prévisions dépendent fortement de paramètres mal connus au début d'une épidémie (la contagiosité, la part de formes sans symptômes, la mortalité), et les comportements changent dès que l'épidémie est annoncée, ce qui modifie le résultat même que l'on cherche à prévoir. Un modèle ne dit pas ce qui va se passer, mais ce qui se passerait sous certaines hypothèses.

Le regard des sciences économiques et sociales. Le confinement a un coût : en 2020, la production de la France a connu sa plus forte baisse depuis la Seconde Guerre mondiale. Décider, c'est arbitrer entre des vies sauvées, des dépenses publiques, des emplois, l'éducation des enfants, la santé mentale. Les modèles éclairent ces choix, ils ne les font pas à la place des responsables politiques.

Les limites des modèles

Comme le disait le statisticien George Box, « tous les modèles sont faux, mais certains sont utiles ». Le modèle SIR est faux dans le détail, mais il a fait comprendre le seuil $R_0 = 1$, le pic, le dépassement et l'immunité collective, des idées qui guident aujourd'hui la santé publique.

Des directions pour construire sa question

Ce texte n'est pas un Grand Oral. Il rassemble des connaissances dans lesquelles chacun peut choisir une direction, la creuser et formuler sa propre question. Quelques directions possibles :

Pour l'échange avec le jury : les notions du cours à maîtriser

Le jury peut interroger sur les chapitres de spécialité mobilisés. Avec ce thème, il est utile de connaître parfaitement : les suites géométriques, la somme de leurs termes et leur limite ; le raisonnement par récurrence et le théorème de convergence monotone ; la fonction exponentielle et l'équation $y' = ay$ ; la fonction logarithme ; la dérivation et le lien avec les variations ; les primitives ; les probabilités conditionnelles et la formule des probabilités totales ; la loi binomiale et son espérance.

Pour réviser ces chapitres, l'application Maths FlashBac reprend tout le cours de spécialité en cartes.

Pour aller plus loin