Code Monkey home page Code Monkey logo

covid-19's Introduction

COVID-19

O objetivo deste repositório é iniciar uma força tarefa conjunta da comunidade científica e tecnológica a fim de organizar dados e criar modelos de previsão de infectados (e talvez outras métricas, entre elas demanda por leitos de internação) pelo COVID-19, focando no Brasil. O projeto é público e pode ser usado por todxs.

Toda e qualquer comunicação deve ser feita publicamente via GitHub Issues (fique a vontade para criar uma issue nova). Veja como contribuir com sua área de conhecimento (seja você profissional da saúde, computação, dados ou qualquer outra área) na seção Como contribuir?

No momento, as principais contribuições são o modelo SEIR-Bayes que pode ser visualizado interativamente com o Simulador; e os Dados disponíveis neste respositório

É importante entender que as análises estão em fase preliminar. Use a seu próprio risco.

Índice

Informações rápidas

Qual o modelo que acreditamos ser melhor?

SEIR-Bayes

Como posso usar o simulador online?

https://covid-simulator.3778.care/

Como entro no grupo oficial do Telegram?

Clique neste link: https://t.me/covid3778

Setup para rodar os modelos

  1. Instale python 3.6 ou superior;
  2. (Opcional) Crie um ambiente virtual;
  3. Instale as dependências com pip install -r requirements.txt

Modelos

Estes modelos são testes iniciais e não são bons exemplos de como se deve programar em Python.

Modelos Compartimentados

https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_model

Buscamos na literatura e temos as seguintes estimativas para os parâmetros desses modelos. Temos alguns artigos a serem estudados para melhorar essas estimativas.

Parâmetro Limite inferior Valor típico Limite superior Referências
Tempo de incubação (1/α) 4.1 5.2 dias 7.0 1, 2, 4
Número básico de reprodução (R0) 1.4 2.2 3.9 2, 3, 4
Período infeccioso médio (1/γ) ? 14 dias ? 1

SEIR-ODE

Este modelo deterministico separa a população em 4 compartimentos: Suscetíveis, Expostos, Infectados e Removidos; cujo equacionamento é dado por uma equação differencial ordinária.

Para rodar: python legacy/seir_ode.py (a forma de rodar provavelmente vai mudar no futuro)

[Codigo] [Equacionamento]

SEIR-SDE

Modelo similar ao SEIR-ODE, porem com dinâmica de transição de estados estabelecida por uma binomial.

Para rodar: python legacy/seir_sde.py (a forma de rodar provavelmente vai mudar no futuro)

[Codigo]

SEIR-Bayes

Modelo similar ao SEIR-SDE, porém com os parâmetros alpha, gamma e beta amostrados de uma distribuição à priori para cada rodada de simulação.

Para rodar: python legacy/seir_bayes.py (a forma de rodar provavelmente vai mudar no futuro), ou use https://covid-simulator.3778.care/

[Codigo]

Resultado

Este resultado é preliminar, favor ver issue 13. O objetivo era simular a cidade de São Paulo.

É importante entender que as análises estão em fase preliminar. Use a seu próprio risco.

Acessar resultados com Python

Temos uma classe para rodar o modelo de forma fácil em covid19/models.py. A documentação está no próprio arquivo.

Dados disponíveis neste respositório

O arquivo data/ibge_population.csv possui a estimativa de 2019 das populações por município. Além disso, é possível baixar os casos diários por município, assim como as populações, utilizando as funções load_cases e load_population do arquivo covid19/data.py. A documentação das funções estão no arquivo.

Simulador

Este simulador usa o Streamlit. No momento, ele permite simular o SEIR-Bayes variando os parâmetros. Estamos trabalhando para melhorar este simulador (veja as issues).

Hosteado pela 3778

Apenas clique aqui: https://covid-simulator.3778.care/

Com pip

  1. Faça o Setup para rodar os modelos
  2. Execute make launch

Com Docker

  1. Instale docker;
  2. Na raiz do projeto execute make image para construir a imagem;
  3. Em seguida, execute make covid-19 e aponte seu navegador para http://localhost:8501.

Como contribuir?

Nas seção de issues profissionais de diversas áreas podem ajudar. Veja a lista de exemplos abaixo sobre sugestões de como você pode ajudar com sua àrea de conhecimento, seja ela da saúde, ciências biológicas, exatas, computação, ou outras:

Clique aqui para ver uma lista de exemplos
  1. Profissionais da saúde/ciências biológicas podem levantar evidências de hipóteses não contempladas no algoritmo (ex: transmissão entre assintomáticos, ou no período assintomático
  2. Matemáticos podem sugerir novos métodos ou refinamentos ao algoritmo
  3. Economistas podem contribuir com refinamentos em impactos econômicos da disseminação do coronavirus
  4. Administradores hospitalares e profissionais da sáude podem sugerir calculos para provisionamento de recursos (material para UTIs, respiradores, máscaras, etc)
  5. Programadores com código
  6. Cientistas de dados com estimativas de parâmetros, e códigos etc

Fique a vontade para abrir uma issue nova, ou trabalhar em uma já existente. Discussões e sugestões, além de código e modelagem, são bem vindas.

Quero entender os modelos, mas não sei por onde começar!

Tipos de contribuições

Toda contribuição é bem vinda. Estamos gerenciando via GitHub Issues. Existem algumas categorias de contribuições:

  • modelagem - relacionados a modelagem matemática (discussões e implementações) dos modelos;
  • bug - problemas encontrados no código;
  • documentação;
  • dev - tudo que é relacionado a código (sem ser a modelagem ou bugs);
  • paper - artigo a ser analisado;
  • modelo: $NOME_DO_MODELO- para modelos específicos (por exemplo, modelo: SEIR-Bayes).

Recursos didáticos

Introdução aos modelos SEIR e variantes

Implementações

Efeito das intervenções públicas

Datasets Brasileiros

Referências

  1. Report of the WHO-China Joint Mission on Coronavirus Disease 2019 (COVID-19)
  2. Early Transmission Dynamics in Wuhan, China, of Novel Coronavirus–Infected Pneumonia
  3. Estimation of the reproductive number of novel coronavirus (COVID-19) and the probable outbreak size on the Diamond Princess cruise ship: A data-driven analysis
  4. MIDAS Online Portal for COVID-19 Modeling Research

covid-19's People

Contributors

aantunesnds avatar andre-msantos avatar bentoborges avatar bherrera avatar cchenzi avatar dependabot-preview[bot] avatar dependabot[bot] avatar dsevero avatar giulianonetto avatar kztn avatar lpillmann avatar luizberti avatar m4rcelofs avatar octaviobr avatar papb avatar renatocmaciel avatar rgiglio avatar thiagocaiubi avatar vitoventurieri avatar zelacerda-certi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

covid-19's Issues

Popular S(0) com população das cidades brasileiras.

A maior parte dos casos por estado estão concentradas nas maiores cidades. Seria mais útil ter a população (e consequentemente, o S(0)) por cidade.

A ideia seria utilizar uma API tipo essa pra pegar a populacao de cada cidade e colocar em um selectbox. Ou, achar um CSV que tem isso (deve ter em algum lugar).

Nova Fonte de Dados

Apareceu um novo site que se propõe a divulgar construir uma espécie de dataset colaborativo. Talvez valesse a pena dar uma olhada para ver se ajuda o modelo (ou pelo menos corrobora com as informações que vocês já tem)
http://covidzero.com.br/

Termo de trocar para descrição do cenário Brasileiro

Ola gente, tudo bem ? Sou novo aqui, e também não sou da área sou físico. Bem topei com um post falando desse projeto no Reddit e fui dar uma olhada nesse SEIR model. Fiquei ciente da dificuldade descrever um pais continental como no caso do brasil. Então pensei se é possível separarmos o brasil por regiões, aplicar o método SEIR em cada uma delas e colocar um termo de troca entre essas regiões. Bem temos a explicação do modelo aqui:
https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_model

Então, basicamente temos essa equação:
Captura de tela_2020-03-18_20-30-32

Regida por esse grupo de equações diferencias:

Captura de tela_2020-03-18_20-30-41

O que eu pensei foi, em perdemos a continuidade da quantidade de pessoas por região, porem mantendo a quantidade total continua:

Captura de tela_2020-03-18_20-30-49

E alterando as equações para termos um termo de troca, para as pessoas suscetíveis, na fase encubação do vírus e quando estão curadas, sendo assim:

Captura de tela_2020-03-18_17-08-51

O termo chi^{S,E,R}_k é a razão de pessoas suscetíveis, na fase de encubação e recuperas que estão transitando entre cada região. Sendo, assim, esse valor respeita:

Captura de tela_2020-03-18_17-08-59

Agora, podemos aplicar na equação da região micro e:

Captura de tela_2020-03-18_17-09-07

Captura de tela_2020-03-18_17-09-16

Ou seja, deixei a equação para pessoas doentes sem nada, porque acredito que a quantidade dessas pessoas transitando é ínfima, geralmente a transição de pessoas infectadas é na fase de encubação. O que acham ? Lembrando, não sei muita coisa do tema, vi por cima, mas uma pessoa pediu pra eu levantar esse debate aqui.

Botão de exportação dos dados da simulação

Atualmente oferecemos somente a visualização, mas seria muito útil poder exportar os dados que estão plotados em formato CSV para uso em outros locais como continuação da análise.

Exportar:

  • Dados do gráfico
  • Parâmetros da simulação

Estimar número de leitos necessários de enfermaria e UTI a cada momento

É desejável incluir no modelo uma previsão de necessidade de leitos de UTI e leitos de internação necessários ao atendimento de infectados pelo SARS-CoV2.

Para isso precisamos que contribuam com

  • Papers e dados com estimativas sobre a necessidade de internação (leito normal ou UTI) em cada faixa etária

Em segundo momento, tendo dados de boa qualidade, discutimos sobre a modelagem que deverá tomar em conta:

  • Pirâmides etárias (fazer adaptável a realidade de cada região se possível)
  • Necessidade de internação (leito de enfermaria ou UTI) em cada faixa etária

Escrever seção de "compilação de resultados"

Seria interessante, já no início, ter uma seção de compilação dos resultados. O objetivo seria fazer a comunicação para um público leigo, sobre os impactos possíveis do COVID-19 na vida dx Brasileirx comum.

Inspirem-se no Carl Sagan.

Modelo com compartimento para assintomáticos

Acho que aproveitando o SEIR dá pra criar um outro compartimento dividindo o I(sintomático) e o I(assintomático) e a partir dos (poucos) estudos/dados de locais onde houve testagem abrangente de assintomáticos tentar inferir o número assintomáticos % de casos pra tentar modelar

By @vitoventurieri

Isso faz sentido? Como podemos equacionar esse compartimento? Como estimar os parametros?

Revisar modelo SEIR-Bayes

Seria interessante, alguém com conhecimento de modelagem e python, revisar se a implementação do SEIR-Bayes ta correta.

App em produção dá "rerun" automático indevido a cada ~10s

Ao testar o app em produção (https://covid-simulator.3778.care/), notei que a cada ~10 s é disparado um evento que executa novamente o Streamlit (como se fosse "rerun") sem ter sido solicitado. A resposta é como se tivesse sido feita alguma alteração nos parâmetros, mas sem ter sido clicado em nada. Aparece "Connecting..." e depois "Running..." no canto direito superior.

Isso é um problema pq os parâmetros são resetados e o fluxo de interação do usuário é interrompido, sem que se consiga finalizar um configuração e analisar os resultados minimamente.

Isso não acontece rodando localmente com make launch, então imagino que seja algo relacionado com a forma que fizemos o deploy. Algum insight do que poderia ser @thiagocaiubi?

Cheguei a gravar um screencast pra ilustrar, mas por limitações técnicas (aka noob) não consegui subir aqui como GIF. Tô usando Firefox 74.0 (64-bit) no mac osx 10.15.3, mas acontece no Chrome 80.0.3987.149 também.

Melhorar a visualização das curvas.

Por hora estamos utilizando o matplotlib, que por mais que seja flexível, é limitado. Seria interessante explorar o bokeh e Altair para termos visualizações dinâmicas.

Branch permissions

Caros,

Estive tentando criar um dev e feature branch no repositório para organizarmos a colaboração usando o git flow como padrão. Contudo, não tenho permissão para "pushar" estes branches. Será que os admins poderiam:

  1. Autorizar a criação e push de feature branches?
  2. Restringir o master como Pull / Merge request only?
  3. Criar um dev. branch?

Abraços (sem o risco de corona)

Criar função que roda o SEIR-Bayes para todos os municípios

A ideia é disponibilizar pra quem quiser fazer análises em cima.

Assinatura da função será algo do tipo:

In: {gamma, alpha, R0}x{limite inferior, limite superior} + runs + t_max + SEIR(0)
Out: DataFrame(UF, municipio, t, run, S, E, I, R)

São 12 entrada e 1 dataframe de saída.

Utilizar outra prior no modelo SEIR-Bayes

O modelo SEIR-Bayes utiliza priors gaussianas nos parâmetros do modelo. Isso claramente pode ser melhorado.

O que fazer?

  • Pesquisar na literatura quais famílias de priors (e.g. log-normal, gamma, weibull) geralmente são utilizdas;
  • Implementar no modelo.

É importante entender que a prior define as incertezas que temos nos parâmetros, que foram levantados de acordo com a literatura (ver o README.md).

Gráfico corta margens de erro

Quando valores das margens de erro são negativos, o gráfico as corta. Isso impede que seja visualizado o limite superior e compromete o uso desse recurso do simulador. Deve-se corrigir para, nesses casos, plotar o valor em zero como é feito na função seir_bayes_plot por meio do .clip(I0).

Marcador identificando em que dia estamos em relação ao dia zero.

Posso ter compreendido o gráfico errado, mas a princípio não tem nenhuma informação no gráfico representado indicando em que dia estamos em relação ao dia zero.

Isso torna a informação mais clara e acessível ao público que está começando a acompanhar o desenvolvimento da doença agora, e acho mais interessante do que fazer a pessoa pesquisar em fontes externas qual foi o dia zero para então determinar em que dia estamos com relação ao gráfico.

PS:. marquei como label dev na falta de uma label UX/usabilidade.

Modelagem de níveis de isolamento durante a quarentena

Uma das utilidades do modelo seria a de direcionar políticals públicas (e.g. nível de isolamento durante o período de quarentena). O modelo SEIR atual modela a transmissão do vírus assumindo que ela é homogênea. Na realidade, é preciso um contato físico para haver a transmissão. Como nem todos os membros da população vão ter um contato entre si, uma das estratégias para reduzir o número de casos é a de isolamento das pessoas.

É possível modelar essa dinâmica fazendo pequenas variações no modelo atual. Primeiramente, a população total é dividida em n compartimentos. Em seguida, introduzindo uma variável image que modela o número de pessoas que se transportaram do compartimento i para o compartimento j da população durante o período de tempo, as equações que antes, para cada compartimento eram:
image
Se tornam:
image

Esse modelo permitiria a modelagem da evolução dos casos de forma mais realista (e.g. se os dados de viagem entre cidades/bairros estivessem disponíveis). O modelo também pode ser simplificado para modelar a evolução dos casos em uma cidade com diferentes níveis de isolamento (diferentes valores de T, assumindo uma taxa constante entre compartimentos).

[Edit: Somatório colocado na última eq.]

Estimating the asymptomatic proportion of coronavirus disease 2019 (COVID-19) cases on board the Diamond Princess cruise ship, Yokohama, Japan, 2020

Precisamos de uma análise crítica desse artigo encontrado aqui - Estimating the asymptomatic proportion of coronavirus disease 2019 (COVID-19) cases on board the Diamond Princess cruise ship, Yokohama, Japan, 2020 , sobre suas premissas e fontes, para saber se é possível aproveitar alguma das inferências ou dos dados oriundos das fontes/referências do artigo. O objetivo é saber se podemos fazer estimativas de casos assintomaticos usando o método, ou dados das fontes.

Estimar taxa de subreportagem

O Brazil ta testando apenas quem ta hospitalizado, o que diminui o número de infectados reportado e faz com que o pico de infecção seja daqui a ~3 meses (pra SP).

Automatizar geração de CSVs usados na simulação de filas

Atualmente a simulação de filas consome 2 arquivos CSV que foram gerados manualmente, conforme mostrado em #70

Precisamos automatizar a geração desses arquivos para poder incluir novos dados facilmente e documentar o procedimento.

Arquivos:

  • data/tmp/cnes_leitos.csv
  • data/tmp/dados_covid.csv

Juntar R0 estimado com uma prior

Em #36 temos um modelo pra estimar R0 a partir do dado histórico. Porém, seria interessante juntar isso com os dados globais, pra ter uma forma de variar a estimativa utilizando os dados globais.

Visto que o R0 estimado na verdade é uma lognormal, pensei em usar isso como likelihood junto com uma conjugate prior dos dados globais (que podem ser setadas via simulador) e calcular uma posterior que será utilizada na simulação de fato.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.