paint-brush
Simulando a propagação de doenças infecciosas com Python: modelos SIR e SEIRpor@olaoluwa
5,822 leituras
5,822 leituras

Simulando a propagação de doenças infecciosas com Python: modelos SIR e SEIR

por Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Muito longo; Para ler

Aprofunde-se na modelagem de doenças infecciosas usando Python. Descubra o poder dos modelos SIR e SEIR, explore cenários do mundo real com código Python e aprenda a expandir suas habilidades para obter insights epidemiológicos. Uma leitura obrigatória para dominar a modelagem de doenças em saúde pública.
featured image - Simulando a propagação de doenças infecciosas com Python: modelos SIR e SEIR
Olaoluwa Afolabi HackerNoon profile picture
0-item


Isenção de responsabilidade : Este artigo visa esclarecer que o código fornecido não é uma solução universal para todos os aspectos da modelagem matemática. Em vez disso, serve como uma ferramenta educacional, destacando uma etapa específica no processo de modelagem matemática e empregando Python para fins ilustrativos, com o objetivo principal de aumentar a conscientização neste campo.


Também é importante lembrar que existem medidas específicas que você deve tomar ao submeter/propor um projeto de modelo matemático, como aquele relacionado à área de biomatemática.


Essas etapas incluem, mas não estão limitadas a: definir o problema, selecionar uma abordagem de modelo (dois modelos serão discutidos neste artigo), formular equações, estimar parâmetros - geralmente com base em dados históricos, implementar simulações numéricas resolvendo equações diferenciais analiticamente ou usando ferramentas computacionais como Python e MATLAB, validações e análises de sensibilidade, testes de cenários, interpretação de resultados e assim por diante.


Como eu disse anteriormente, isso destaca apenas uma etapa específica no processo de modelagem matemática e no emprego do Python para fins ilustrativos.


Visão geral do conteúdo

  1. Introdução
    • O objetivo da simulação
  2. O modelo SIR
    • O que faz / Exemplo de simulação de código SIR Python
    • O que você pode aprender
      • Entenda a propagação de doenças
      • Explore a sensibilidade dos parâmetros
      • Avaliar intervenções
  3. O modelo SEIR
    • O que faz / Exemplo de simulação de código SEIR Python
    • O que você pode aprender
      • Modelo de Períodos Latentes
      • Avalie as intervenções precoces
      • Estudar surtos complexos
  4. Conclusão



1. Introdução

Compreender como as doenças infecciosas se espalham é essencial para manter a saúde pública porque elas existem há séculos ao longo da história da humanidade. Uma ferramenta potente para simular e compreender a dinâmica da propagação de doenças são os modelos matemáticos. Os modelos SIR (Suscetível-Infeccioso-Recuperado) e SEIR (Susceptível-Exposto-Infeccioso-Recuperado) serão discutidos neste artigo, juntamente com como simulá-los usando Python.


Para que servem as simulações

Para profissionais de saúde pública e epidemiologistas, a simulação é como uma bola de cristal. Permite-nos prever a potencial propagação de doenças sob diversas circunstâncias e opções de tratamento. Esses modelos auxiliam na tomada de decisões, na alocação eficaz de recursos e na compreensão dos efeitos potenciais de diversas técnicas. Vamos examinar dois modelos básicos, a saber; Modelo SIR e Modelo SEIR.


2. O modelo SIR

O que faz / Exemplo de simulação de código SIR Python

O modelo Suscetível, Infeccioso e Recuperado (SIR) separa uma população nessas três categorias. Com base em variáveis como taxa de transmissão ( β ) e taxa de recuperação ( γ ), simula como esses compartimentos se alteram com o tempo.


Antes de exemplificarmos uma simulação usando Python, é necessário fazer “suposições de modelo” ao trabalhar com modelos matemáticos.


Em nossa suposição, criaremos um modelo usando fórmula ou 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: Você pode latexificar este formulário usando Python. Um exemplo pode ser encontrado em https://github.com/google/latexify_py/blob/main/examples/examples.ipynb .


Este artigo não se preocupará em escrever esse código Python para converter LaTeX em uma notação/equação matemática adequada, mas usei um editor online como https://latexeditor.lagrida.com/ para que você veja as suposições da fórmula/equação claramente abaixo :



Fig 1: Equação do Modelo


onde :


  • S representa indivíduos suscetíveis,
  • I representa indivíduos infectados,
  • R representa indivíduos recuperados.


Os parâmetros β e γ governam as taxas de transmissão e recuperação, respectivamente. O sinal negativo (ou seja, −β) indica que o número de indivíduos suscetíveis (S) diminui ao longo do tempo. A notação de ponto indica “multiplicação”.


Em resumo, estas equações descrevem a dinâmica do modelo SIR, onde o número de pessoas susceptíveis diminui à medida que contraem a doença (ou seja, dS/dt), o número de pessoas infecciosas aumenta como resultado de novas infecções e diminui à medida que recuperam ( ou seja, dI/dt), e o número de pessoas recuperadas aumenta à medida que a doença é tratada (ou seja, dR/dt). Como a mudança em cada compartimento depende da multiplicação dos componentes pertinentes, os pontos (.) são usados para denotar a multiplicação.


Como todas as suposições estão definidas, podemos então executar uma simulação usando Python para o modelo SIR e então visualizar a 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 diferenças entre scipy.integrate.ode e scipy.integrate.odeint , gostaria de apontar para odeint e ode para que você entenda melhor.


O que você pode descobrir


Executar o modelo SIR em Python permite:

  • Entenda a propagação de doenças : observe a curva epidêmica e visualize como uma doença se espalha por uma comunidade. Executando o modelo Python SIR acima, você pode ver o resultado/resultado no gráfico abaixo:



Resultado da nossa simulação mostrando suscetibilidade e taxa de infecção reduzidas, com altas taxas de recuperação.



  • Explore a sensibilidade dos parâmetros: tente testar vários valores beta e gama para observar como eles afetam a duração e o pico do surto.


  • Avaliar Intervenções: Ao alterar os parâmetros, você pode simular as consequências de intervenções como

    isolamento social ou imunização.


3. O modelo SEIR

O que faz / Exemplo de simulação de código SEIR Python

Ao adicionar um compartimento "Exposto", o modelo SEIR expande o modelo SIR. Leva em consideração o período de incubação durante o qual as pessoas foram expostas, mas ainda não são contagiosas. Como emulá-lo em Python é mostrado aqui.


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


A única diferença neste caso é a introdução da latent period rate (σ) para explorar diferentes cenários e compreender a dinâmica das doenças infecciosas com período “exposto”. Ele demonstra como é responsável por um período de incubação antes que os indivíduos se tornem infecciosos.


O que você pode aprender


Ao usar Python para executar o modelo SEIR, você pode:


  • Modelo de Períodos Latentes

    Reconhecer as diferenças entre os comportamentos das doenças imediatamente infecciosas e das doenças com período de incubação.


  • Avalie as intervenções precoces

    Analise os efeitos das estratégias de isolamento e detecção precoce.


  • Estudar surtos complexos

    Para doenças como a COVID-19, em que as pessoas expostas são um fator importante na transmissão, use o SEIR.



4. Conclusão

A simplicidade e as bibliotecas robustas do Python, como o SciPy, tornam-no a linguagem perfeita para modelar doenças. E ao realizar essas simulações com ele, você aprende mais sobre a dinâmica das doenças infecciosas. Isto pode equipá-lo com veredictos e proezas que podem ajudá-lo a tomar decisões bem informadas e melhorar a sua própria capacidade de avaliar epidemias no mundo real.


Há muito mais por vir depois dos modelos SIR e SEIR. Existem outros modelos complexos, como modelo SEIRS (Suscetível-Exposto-Infeccioso-Removido-Suscetível), Modelos Espaciais, Modelos de Rede, etc. Investigando modelos intrincados, bem como dados do mundo real, como dados geoespaciais, dados epidemiológicos, dados comportamentais , etc, e examinando cuidadosamente os efeitos das intervenções, tais como estratégias de vacinação, disponibilidade de tratamento, medidas de distanciamento social, você desenvolverá ainda mais suas habilidades de modelagem.


Seu conhecimento dessas ferramentas de modelagem pode impactar significativamente a proteção da saúde pública em um futuro onde a compreensão da transmissão de doenças infecciosas é vital.


Já é muito longo, mas espero ter conseguido mostrar como simular modelos SIR e SEIR em modelo matemático, usando Python.