paint-brush
Simulación de la propagación de enfermedades infecciosas con Python: modelos SIR y SEIRpor@olaoluwa
2,211 lecturas
2,211 lecturas

Simulación de la propagación de enfermedades infecciosas con Python: modelos SIR y SEIR

por Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Demasiado Largo; Para Leer

Profundice en el modelado de enfermedades infecciosas utilizando Python. Descubra el poder de los modelos SIR y SEIR, explore escenarios del mundo real con código Python y aprenda a ampliar sus habilidades para obtener conocimientos epidemiológicos. Una lectura obligada para dominar el modelado de enfermedades en salud pública.
featured image - Simulación de la propagación de enfermedades infecciosas con Python: modelos SIR y SEIR
Olaoluwa Afolabi HackerNoon profile picture
0-item


Descargo de responsabilidad : este artículo tiene como objetivo aclarar que el código proporcionado no es una solución universal para todos los aspectos del modelado matemático. En cambio, sirve como una herramienta educativa, destacando un paso específico en el proceso de modelado matemático y empleando Python con fines ilustrativos, con el objetivo principal de mejorar la conciencia en este campo.


También es importante recordar que existen medidas específicas que debes tomar al presentar/proponer un proyecto de modelo matemático, como uno relacionado con el campo de la biomatemática.


Estos pasos incluyen, entre otros: definir el problema, seleccionar un enfoque de modelo (se analizarán dos modelos en este artículo), formular ecuaciones, estimación de parámetros (a menudo basada en datos históricos), implementar simulaciones numéricas resolviendo ecuaciones diferenciales analíticamente o utilizando herramientas computacionales como Python y MATLAB, validaciones y análisis de sensibilidad, pruebas de escenarios, interpretación de resultados, etc.


Como dije antes, esto solo resalta un paso específico en el proceso de modelado matemático y el empleo de Python con fines ilustrativos.


Descripción general del contenido

  1. Introducción
    • El propósito de la simulación
  2. El modelo SIR
    • Qué hace / Ejemplo de simulación de código SIR Python
    • Lo que puedes aprender
      • Comprender la propagación de enfermedades
      • Explorar la sensibilidad de los parámetros
      • Evaluar intervenciones
  3. El modelo SEIR
    • Qué hace / Ejemplo de simulación de código Python SEIR
    • Lo que puedes aprender
      • Modelo de períodos latentes
      • Evaluar las intervenciones tempranas
      • Estudiar brotes complejos
  4. Conclusión



1. Introducción

Comprender cómo se propagan las enfermedades infecciosas es esencial para mantener la salud pública porque han existido a lo largo de la historia de la humanidad durante siglos. Una herramienta potente para simular y comprender la dinámica de la propagación de enfermedades son los modelos matemáticos. En este artículo se analizarán los modelos SIR (susceptible-infeccioso-recuperado) y SEIR (susceptible-expuesto-infeccioso-recuperado), junto con cómo simularlos usando Python.


Para qué sirven las simulaciones

Para los profesionales de la salud pública y los epidemiólogos, la simulación es como una bola de cristal. Nos permite prever la posible propagación de enfermedades en diversas circunstancias y opciones de tratamiento. Estos modelos ayudan en la toma de decisiones, la asignación eficaz de recursos y la comprensión de los efectos potenciales de diversas técnicas. Examinemos dos modelos básicos, a saber; Modelo SIR y Modelo SEIR.


2. El modelo SIR

Qué hace / Ejemplo de simulación de código SIR Python

El modelo Susceptible, Infeccioso y Recuperado (SIR) separa una población en estas tres categorías. Basado en variables como la tasa de transmisión ( β ) y la tasa de recuperación ( γ ), simula cómo estos compartimentos cambian con el tiempo.


Antes de ejemplificar una simulación usando Python, es necesario hacer "suposiciones del modelo" cuando se trabaja en modelos matemáticos.


En nuestra suposición, crearemos un modelo utilizando un formulario o código 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*}


Nota: Puede latexizar este formulario usando Python. Se puede encontrar un ejemplo en https://github.com/google/latexify_py/blob/main/examples/examples.ipynb .


Este artículo no se molestará en escribir ese código Python para convertir LaTeX a una notación/ecuación matemática adecuada, pero he utilizado un editor en línea como https://latexeditor.lagrida.com/ para que pueda ver claramente los supuestos de la fórmula/ecuación a continuación. :



Fig 1: Ecuación del modelo


donde :


  • S representa individuos susceptibles,
  • Represento a personas infectadas,
  • R representa individuos recuperados.


Los parámetros β y γ gobiernan las tasas de transmisión y recuperación, respectivamente. El signo negativo (es decir, −β) indica que el número de individuos susceptibles (S) disminuye con el tiempo. La notación de puntos indica "multiplicación".


En resumen, estas ecuaciones describen la dinámica del modelo SIR, donde el número de personas susceptibles disminuye a medida que contraen la enfermedad (es decir, dS/dt), el número de personas infecciosas aumenta como resultado de nuevas infecciones y disminuye a medida que se recuperan ( es decir, dI/dt), y el número de personas recuperadas aumenta a medida que se trata la enfermedad (es decir, dR/dt). Debido a que el cambio en cada compartimento depende de la multiplicación de los componentes pertinentes, se utilizan puntos (.) para indicar la multiplicación.


Dado que se establecen todos los supuestos, podemos ejecutar una simulación usando Python para el modelo SIR y luego visualizar la dinámica:


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


Para conocer las diferencias entre scipy.integrate.ode y scipy.integrate.odeint , me gustaría indicarle odeint y ode para que pueda entenderlo mejor.


Lo que puedes descubrir


Ejecutar el modelo SIR en Python le permite:

  • Comprenda la propagación de enfermedades : observe la curva epidémica y visualice cómo se propaga una enfermedad en una comunidad. Al ejecutar el modelo Python SIR anterior, puede ver el resultado en el siguiente gráfico:



El resultado de nuestra simulación muestra una susceptibilidad reducida y una tasa de infección, con altas tasas de recuperación.



  • Explore la sensibilidad de los parámetros: intente probar varios valores beta y gamma para observar cómo afectan la duración y el pico del brote.


  • Evaluar intervenciones: al cambiar los parámetros, puede simular las consecuencias de intervenciones como

    aislamiento social o inmunización.


3. El modelo SEIR

Qué hace / Ejemplo de simulación de código Python SEIR

Al agregar un compartimento "expuesto", el modelo SEIR amplía el modelo SIR. Tiene en cuenta el período de incubación durante el cual las personas han estado expuestas pero aún no son contagiosas. Aquí se muestra cómo emularlo en Python.


 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 única diferencia en este caso es la introducción de latent period rate (σ) para explorar diferentes escenarios y comprender la dinámica de las enfermedades infecciosas con un período "expuesto". Demuestra cómo representa un período de incubación antes de que los individuos se vuelvan infecciosos.


Lo que puedes aprender


Cuando usa Python para ejecutar el modelo SEIR, puede:


  • Modelo de períodos latentes

    Reconocer las diferencias entre los comportamientos de las enfermedades inmediatamente infecciosas y las enfermedades con períodos de incubación.


  • Evaluar las intervenciones tempranas

    Analizar los efectos del aislamiento y las estrategias de detección temprana.


  • Estudiar brotes complejos

    Para enfermedades como COVID-19, donde las personas expuestas son un factor importante de transmisión, utilice SEIR.



4. Conclusión

La simplicidad y las bibliotecas robustas de Python, como SciPy, lo convierten en el lenguaje perfecto para modelar enfermedades. Y al realizar estas simulaciones con él, aprenderá más sobre la dinámica de las enfermedades infecciosas. Esto puede proporcionarle veredictos y destrezas que pueden ayudarle a tomar decisiones bien informadas y mejorar su propia capacidad para evaluar epidemias en el mundo real.


Hay mucho más por venir después de los modelos SIR y SEIR. Existen otros modelos complejos como el modelo SEIRS (Susceptible-Exposed-Infectious-Removed-Susceptible), modelos espaciales, modelos de red, etc. Investigando modelos complejos, así como datos del mundo real, como datos geoespaciales, datos epidemiológicos, datos de comportamiento. , etc., y examinando cuidadosamente los efectos de las intervenciones, como las estrategias de vacunación, la disponibilidad de tratamientos y las medidas de distanciamiento social, desarrollará aún más sus habilidades de modelado.


Su conocimiento de estas herramientas de modelado puede tener un impacto significativo en la protección de la salud pública en un futuro donde comprender la transmisión de enfermedades infecciosas es vital.


Esto ya es demasiado largo, pero espero haber podido mostrarles cómo simular los modelos SIR y SEIR en un modelo matemático, usando Python.