Welcome to Epidemic Models’ documentation!

Documentation Status GitHub last commit GitHub top language Join discussion Discord

Este projeto tem o objetivo de divulgar como desenvolver modelos para epidemias, desde sua modelagem matemática até sua concepção computacional em Python. Sendo assim composto por vídeos explicativos, notebooks em Python, e diversas visualizações, para ajudar com o entendimento do conteúdo apresentado.


Alguns resultados do século XX…

Para exemplificar o desempenho do conteúdo apresentado, foi feita uma análise com dados do século passado do Reino Unido (United Kingdom), e utilizando os modelos aqui desenvolvidos é possível obter previsões do comportamento dos dados. Essas previsões, juntamente com os dados reais, estão apresentadas na figura a seguir:

Assim como o estudo de correlação entre os modelos SIR obtidos para cada uma das cidades durante os períodos de epidemias do Reino Unido:

_images/UK_models_corr.png

Previsões da COVID-19

Nesta análise utilizamos o modelo desenvolvido para tentar prever os comportamentos da COVID-19. Para isso, primeiramente utilizamos dados de países que já apresentam um comportamento característico da estrutura SIR e já estão no seu período de amortecimento da curva de infectados. Desta forma podemos validar o modelo com relação a sua capacidade de prever eventos futuros, mesmo que somente poucos dias de dados sejam utilizados. Desta forma algumas análises específicas, e de maior impacto, são apresentadas nessa primeira página:

  • Determinação do número básico de reprodução \(R_0\) no decorrer da epidemia
  • Previsão da quantidade de infectados notificados no sistema público
  • Previsão do momento de pico da epidemia

No caso, essas análises foram feitas para Itália 🇮🇹, China 🇨🇳 e Alemanha 🇩🇪, países que já estão em seu período de diminuição do nível de infectados. Para exemplificar a capacidade de previsão do algoritmo de aprendizado desenvolvido, nas visualizações a seguir nós mostramos a previsão feita pelo algoritmo para cada país a medida que os tempo da epidemia foi passando e mais dados foram utilizados para a aprendizagem:

Nosso modelo aprende com algoritmos de otimização os parâmetros da estrutura SIR, juntamente com a proporção da população que está sendo registrada pelo sistema de saúde. No caso, ele aprende três parâmetros fundamentais do modelo: \(\beta\) (contatos por dia), \(r\) (em que \(1/r\) é o tempo médio de recuperação da doença), e o \(S(0)\) (quantidade inicial de suscetíveis), para que a epidemia tenha o comportamento que os dados mostram. No caso os valores ajustados para cada país foram:

País

\(\beta\)

\(r\)

Itália 🇮🇹

0.2038

0.0233

China 🇨🇳

0.3133

0.0445

Alemanha 🇩🇪

0.2195

0.0576

Caso queira tentar ajustar os parâmetros você mesmo, basta clicar no botão abaixo!


Determinação do \(R_0\)

Note que o parâmetro \(R_0\), é determinado a partir dos dois outros parâmetros característicos do modelo SIR, \(R_0 = \beta / r\). Aqui utilizamos um modelo SIR que pondera a quantidade de suscetíveis, uma vez que nem toda a população pode ser considerada suscetível, visto que nem todas as pessoas infectadas e recuperadas são notificadas ao sistema público. Além disso, nem toda a população é exposta ao vírus, devido a políticas públicas, isolamentos, etc.

Note

Desta forma, note que o modelo desenvolvido somente modela as pessoas notificadas pelo sistema de saúde, sendo assim, representativo de uma parte da verdade situação do país.

Dito isso, é possível definir os valores encontrados pelo algoritmo de aprendizagem para o parâmetro \(R_0\) a medida que os dias da pandemia passaram:

Previsões do consumo do sistema público

Um dos parâmetros que nosso algoritmo aprende durante seu processo de treinamento é um parâmetro que pondera a quantidade da população de suscetíveis inicial (simplesmente uma técnica para melhorar o condicionamento númerico do algoritmo). Porém, como esse parâmetro tende sempre a estimar o valor de \(S(0)\) igual ao valor de \(R(\infty)\). Note que sempre é verdade \(S(0) \geq R(\infty)\). Como os dados medidos são somente das pessoas notificadas e acompanhadas pelo sistema de saúde, podemos concluir que o valor de \(R(\infty)\) é a quantidade de pessoas que foram contaminadas, frequentaram o sistema de saúde para o diagnóstico e por isso estão na base de dados. Nosso algoritmo prevê a quantidade de \(S(0) = R(\infty)\), desta forma para cada novo dia de dados temos uma nova previsão de qual será a quantidade de pessoas absorvidas pelo sistema de saúde. Nos gráficos a seguir conseguimos mostrar o erro percentual entre o real valor de \(R(\infty)\) e o valor estimado por nosso modelo a cada dia da epidemia:

Previsões dos picos epidêmicos da COVID-19

Nesta análise apresentamos o efeito da quantidade de dados na performance do modelo desenvolvido analisando a capacidade de prever o dia em que acontecerá o pico da quantidade de infectados da epidemia da COVID-19. Para isso estamos utilizando dados de países que já tiveram seu pico de contágio e atualmente estão no período de amortecimento da quantidade de infectados. Alguns dos países analisados foram a China 🇨🇳, Itália 🇮🇹 e Alemanha 🇩🇪, que possibilitaram as análises abaixo. Nestas figuras é mostrado o erro do modelo ao tentar prever o dia de pico, para cada dia da epidemia:

Autores

Indices e tabelas