paint-brush
Simuler la propagation de maladies infectieuses avec Python : modèles SIR et SEIRpar@olaoluwa
5,164 lectures
5,164 lectures

Simuler la propagation de maladies infectieuses avec Python : modèles SIR et SEIR

par Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Trop long; Pour lire

Plongez dans la modélisation des maladies infectieuses à l’aide de Python. Découvrez la puissance des modèles SIR et SEIR, explorez des scénarios du monde réel avec le code Python et apprenez à développer vos compétences en matière d'informations épidémiologiques. Une lecture incontournable pour maîtriser la modélisation des maladies en santé publique.
featured image - Simuler la propagation de maladies infectieuses avec Python : modèles SIR et SEIR
Olaoluwa Afolabi HackerNoon profile picture
0-item


Avertissement : Cet article vise à clarifier que le code fourni n'est pas une solution universelle pour tous les aspects de la modélisation mathématique. Au lieu de cela, il sert d'outil pédagogique, mettant en évidence une étape spécifique du processus de modélisation mathématique et utilisant Python à des fins d'illustration, dans le but principal de sensibiliser l'opinion dans ce domaine.


Il est également important de se rappeler qu'il existe des mesures spécifiques que vous devez prendre lorsque vous soumettez/proposez un projet de modèle mathématique, comme celui lié au domaine des biomathématiques.


Ces étapes comprennent, sans s'y limiter : la définition du problème, la sélection d'une approche de modèle (deux modèles seront abordés dans cet article), la formulation d'équations, l'estimation des paramètres - souvent basée sur des données historiques, la mise en œuvre de simulations numériques en résolvant les équations différentielles de manière analytique ou en utilisant des outils informatiques comme Python et MATLAB, des validations et des analyses de sensibilité, des tests de scénarios, l'interprétation des résultats, etc.


Comme je l'ai dit plus tôt, cela ne met en évidence qu'une étape spécifique du processus de modélisation mathématique et de l'utilisation de Python à des fins d'illustration.


Aperçu du contenu

  1. Introduction
    • Le but de la simulation
  2. Le modèle SIR
    • Ce qu'il fait / Exemple de simulation de code SIR Python
    • Ce que vous pouvez apprendre
      • Comprendre la propagation des maladies
      • Explorer la sensibilité des paramètres
      • Évaluer les interventions
  3. Le modèle SEIR
    • Ce qu'il fait / Exemple de simulation de code SEIR Python
    • Ce que vous pouvez apprendre
      • Périodes de latence du modèle
      • Évaluer les interventions précoces
      • Étudier les épidémies complexes
  4. Conclusion



1. Introduction

Comprendre comment les maladies infectieuses se propagent est essentiel au maintien de la santé publique, car elles existent tout au long de l'histoire de l'humanité depuis des siècles. Les modèles mathématiques constituent un outil puissant pour simuler et comprendre la dynamique de la propagation des maladies. Les modèles SIR (Susceptible-Infectious-Recovered) et SEIR (Susceptible-Exposed-Infectious-Recovered) seront abordés dans cet article, ainsi que la manière de les simuler à l'aide de Python.


À quoi servent les simulations

Pour les professionnels de santé publique et les épidémiologistes, la simulation est comme une boule de cristal. Cela nous permet de prévoir la propagation potentielle de maladies dans diverses circonstances et options de traitement. Ces modèles facilitent la prise de décision, l'allocation efficace des ressources et la compréhension des effets potentiels de diverses techniques. Examinons deux modèles de base, à savoir : Modèle SIR et modèle SEIR.


2. Le modèle SIR

Ce qu'il fait / Exemple de simulation de code SIR Python

Le modèle sensible, infectieux et rétabli (SIR) sépare une population en ces trois catégories. Basé sur des variables telles que le taux de transmission ( β ) et le taux de récupération ( γ ), il simule la façon dont ces compartiments évoluent avec le temps.


Avant d'illustrer une simulation à l'aide de Python, il est nécessaire de formuler des « hypothèses de modèle » lorsque l'on travaille sur des modèles mathématiques.


Dans notre hypothèse, nous allons créer un modèle à l'aide d'un formulaire ou d'un code LaTeX :


 \begin{align*} \frac{dS}{dt} &= -\beta \cdot S \cdot I \\ \frac{dI}{dt} &= \beta \cdot S \cdot I - \gamma \cdot I \\ \frac{dR}{dt} &= \gamma \cdot I \end{align*}


Remarque : Vous pouvez latexifier cette formule à l'aide de Python. Un exemple peut être trouvé sur https://github.com/google/latexify_py/blob/main/examples/examples.ipynb .


Cet article ne prendra pas la peine d'écrire ce code Python pour convertir LaTeX en une notation/équation mathématique appropriée, mais j'ai utilisé un éditeur en ligne tel que https://latexeditor.lagrida.com/ afin que vous voyiez clairement les hypothèses de formule/équation ci-dessous. :



Fig 1 : Équation modèle


:


  • S représente les individus sensibles,
  • Je représente les personnes infectées,
  • R représente les individus récupérés.


Les paramètres β et γ régissent respectivement les taux de transmission et de récupération. Le signe négatif (c'est-à-dire −β) indique que le nombre d'individus sensibles (S) diminue avec le temps. La notation par points indique « multiplication ».


En résumé, ces équations décrivent la dynamique du modèle SIR, où le nombre de personnes sensibles diminue à mesure qu'elles contractent la maladie (c'est-à-dire dS/dt), le nombre de personnes infectieuses augmente en raison de nouvelles infections et diminue à mesure qu'elles se rétablissent ( c'est-à-dire dI/dt), et le nombre de personnes guéries augmente à mesure que la maladie est traitée (c'est-à-dire dR/dt). Étant donné que le changement dans chaque compartiment dépend de la multiplication des composants pertinents, les points (.) sont utilisés pour désigner la multiplication.


Puisque toutes les hypothèses sont définies, nous pouvons ensuite exécuter une simulation à l'aide de Python pour le modèle SIR, puis visualiser la dynamique :


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SIR model equations def SIR_model(y, t, beta, gamma): S, I, R = y dSdt = -beta * S * I dIdt = beta * S * I - gamma * I dRdt = gamma * I return [dSdt, dIdt, dRdt] """ Initial conditions (such as S0, I0, and R0) are not to be random but I hardcoded them with specific values. These choices are typically made based on the characteristics of the disease being modeled and the context of the simulation. Initial condition are set such that S0 = 99%, which indicates the proportion of susceptible individuals when the simulation starts. I0 is set to 1%, which indicates proportion of infected individuals to be 1% when the simulation starts. R0 is set to 0% which is expected that there are are no recovered individuals when the simulations start. """ S0 = 0.99 I0 = 0.01 R0 = 0.00 y0 = [S0, I0, R0] # Parameters # β (beta) is transmission rate and I chose 30%. γ (gamma) is set to 1% beta = 0.3 gamma = 0.1 # Time vector t = np.linspace(0, 200, 200) # Simulate for 200 days # Solve the SIR model equations using odeint() solution = odeint(SIR_model, y0, t, args=(beta, gamma)) # Extract results S, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SIR Model Simulation') plt.legend() plt.grid(True) plt.show()


Pour les différences entre scipy.integrate.ode et scipy.integrate.odeint , j'aimerais vous indiquer odeint et ode pour que vous puissiez mieux comprendre.


Ce que vous pouvez découvrir


Exécuter le modèle SIR en Python vous permet de :

  • Comprendre la propagation de la maladie : observez la courbe épidémique et visualisez comment une maladie se propage dans une communauté. En exécutant le modèle Python SIR ci-dessus, vous pouvez voir le résultat dans le graphique ci-dessous :



Résultat de notre simulation montrant une sensibilité et un taux d'infection réduits, avec des taux de guérison élevés.



  • Explorez la sensibilité des paramètres : essayez de tester diverses valeurs bêta et gamma pour observer comment elles affectent la durée et le pic de l'épidémie.


  • Évaluer les interventions : en modifiant les paramètres, vous pouvez simuler les conséquences d'interventions telles que

    l’isolement social ou la vaccination.


3. Le modèle SEIR

Ce qu'il fait / Exemple de simulation de code SEIR Python

En ajoutant un compartiment « Exposé », le modèle SEIR étend le modèle SIR. Il prend en compte la période d'incubation pendant laquelle les personnes ont été exposées mais ne sont pas encore contagieuses. Comment l'émuler en Python est montré ici.


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SEIR model equations def SEIR_model(y, t, beta, sigma, gamma): S, E, I, R = y dSdt = -beta * S * I dEdt = beta * S * I - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return [dSdt, dEdt, dIdt, dRdt] # Initial conditions S0 = 0.99 E0 = 0.01 I0 = 0.00 R0 = 0.00 y0 = [S0, E0, I0, R0] # Parameters beta = 0.3 sigma = 0.1 gamma = 0.05 # Time vector t = np.linspace(0, 200, 200) # Solve the SEIR model equations solution = odeint(SEIR_model, y0, t, args=(beta, sigma, gamma)) # Extract results S, E, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, E, label='Exposed') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SEIR Model Simulation') plt.legend() plt.grid(True) plt.show()


La seule différence dans ce cas est l’introduction du latent period rate (σ) pour explorer différents scénarios et comprendre la dynamique des maladies infectieuses avec une période « d’exposition ». Cela démontre comment cela représente une période d’incubation avant que les individus ne deviennent contagieux.


Ce que vous pouvez apprendre


Lorsque vous utilisez Python pour exécuter le modèle SEIR, vous pouvez :


  • Périodes de latence du modèle

    Reconnaître les différences entre les comportements des maladies immédiatement infectieuses et des maladies avec périodes d'incubation.


  • Évaluer les interventions précoces

    Analyser les effets des stratégies d’isolement et de détection précoce.


  • Étudier les épidémies complexes

    Pour les maladies comme la COVID-19 pour lesquelles les personnes exposées constituent un facteur majeur de transmission, utilisez SEIR.



4. Conclusion

La simplicité et les bibliothèques robustes de Python, comme SciPy, en font le langage idéal pour modéliser les maladies. Et en effectuant ces simulations, vous en apprenez davantage sur la dynamique des maladies infectieuses. Cela peut vous doter de verdicts et de prouesses qui peuvent vous aider à prendre des décisions éclairées et à améliorer votre propre capacité à évaluer les épidémies dans le monde réel.


Il y a bien plus à venir après les modèles SIR et SEIR. Il existe d'autres modèles complexes tels que le modèle SEIRS (Susceptible-Exposed-Infectious-Removed-Susceptible), les modèles spatiaux, les modèles de réseau, etc. Étudier des modèles complexes, ainsi que des données du monde réel, telles que des données géospatiales, des données épidémiologiques, des données comportementales. , etc., et en examinant attentivement les effets des interventions, telles que les stratégies de vaccination, la disponibilité des traitements, les mesures de distanciation sociale, vous développerez encore plus vos capacités de modélisation.


Votre connaissance de ces outils de modélisation peut avoir un impact significatif sur la protection de la santé publique dans un avenir où la compréhension de la transmission des maladies infectieuses est vitale.


C'est déjà trop long, mais j'espère avoir pu vous montrer comment simuler les modèles SIR et SEIR dans un modèle mathématique, en utilisant Python.