Sitemap
Danielly Xavier

Danielly Xavier

Epidemiologista e Cientista de Dados

Diagrama de Controle Epidemiológico no R

7 min readSep 3, 2022
Press enter or click to view image in full size
Photo by Martin Sanchez on Unsplash

Um conceito básico na Epidemiologia, que norteia toda a nossa ciência, é o conceito de Epidemia. Uma Epidemia é descrita como o aumento inesperado do número de casos de um determinado agravo em determinados período e local.

Nesse sentido, definir o número de casos esperado é algo fundamental na Epidemiologia. Existem diversas análises estatísticas, principalmente no campo da Análise de Séries Temporais que permitem a estimativa de valores esperados no tempo, entretanto, nem sempre os profissionais de saúde tem as skills necessárias para ajustar um modelo desse tipo.

Uma das ferramentas mais simples para esse trabalho é o Diagrama de Controle. Ela é muito útil nos serviços de saúde e não exige um conhecimento profundo de estatística para sua elaboração.

Para o tutorial de hoje,usaremos dados de dengue no Distrito Federal entre 2013 e 2019 para criar um diagrama de controle.

Os dados utilizados estão disponíveis de forma pública no repositório de Transferência de Arquivos do DATASUS, disponível aqui. Se você preferir, pode baixar os dados pelo Python usando o tutorial que criei aqui. Estou disponibilizando os tutoriais do Medium em um repositório do GitHub, em que você pode acessar e baixar o script completo e todos os dados. O repositório está disponível aqui.

Inicialmente, importaremos os três pacotes que usaremos nesse tutorial. Usaremos o Tidyverse para manipular os dados e para criar gráficos com o Ggplot2. Para importar os dados em formato “.dbc”, usaremos o pacote read.dbc e para pivotar as tabelas que criaremos, usaremos o pacote reshape2.

Criaremos uma estrutura de repetição para importar todos os dados e a função glimpse() para visualizar as variáveis do nosso dataset.

Para esses comandos, obteremos o seguinte output.

Press enter or click to view image in full size
Output do comando glimpse()

Perceba que o comando vai mostrar as variáveis do dataset, incluindo uma amostra dos valores e o tipo de cada variável, que está marcado em vermelho na imagem.

A variável que nos interessa também está marcada em vermelho, é a variável DIAG_SIN_PRI, que se refere a data dos primeiros sintomas. Essa data é importante, especialmente em doenças infecciosas e parasitárias, porque permite estimar a data em que houve a transmissão da doença.

Após isso, investigaremos a amplitude dos dados para ver se não temos valores discrepantes ou faltantes. Usando a função summary, veremos a distribuição de casos por data. Criaremos um histograma mensal de casos dos anos considerados para visualizar a distribuição dos casos.

Usando o summary, identificamos que a menor data de início dos sintomas é o dia 25 de novembro de 1936, o que é possivelmente um erro de digitação. É bem improvável que alguém que teve o primeiro sintoma em 1936 tenha registrado isso apenas depois de 2012 (rsrsrs) e mesmo que o tenha feito, esse dado não interessaria para o nosso diagrama de controle por ser muito antigo. Olhando o histograma da distribuição dos dados, conseguimos ver que há valores anteriores a 1 de janeiro de 2013, que é o primeiro ano considerado em nossa análise.

Press enter or click to view image in full size
Histograma de casos de dengue registrados no DF (sem seleção de datas)

Para corrigir esse problema, nós selecionamos os dados em que a data dos primeiros sintomas são maiores ou iguais a 30 de dezembro de 2012, que é o primeiro dia da primeira semana epidemiológica de 2013. Se quiser saber mais sobre semanas epidemiológicas, consulte o Calendário Epidemiológico no SINAN, disponível aqui.

Também selecionamos apenas os casos com classificação final (variável CLASS_FIN) diferente de 5, que inclui os casos descartados. Ou seja, consideramos todos os casos confirmados e prováveis.

Press enter or click to view image in full size
Histograma de casos de dengue registrados no DF (datas de início dos sintomas maiores que 30/12/2012)

Perceba que, aparentemente, julgando apenas pelo histograma, há uma sazonalidade na incidência de dengue. Podemos entender também que houve uma epidemia de dengue no DF em 2019, pois o número de casos é muito maior que em anos anteriores.

Para verificar isso, estimaremos os valores esperados de dengue para o ano de 2019, usando os dados entre 2013 e 2018. Criaremos um data.frame com as taxas de incidência entre 2013 e 2018.

Get Danielly Xavier’s stories in your inbox

Join Medium for free to get updates from this writer.

Primeiro, selecionaremos apenas os casos com data dos primeiros sintomas menores ou iguais que 29 de dezembro de 2018, que é o último dia da última semana epidemiológica daquele ano. Depois, criaremos a variável “caso” que vai receber o valor 1. Essa variável será usada para calcular o número de casos por mês, agregaremos os casos por mês e ano usando a função “aggregate()”. Criaremos a variável “pop” que receberá a população do DF estimada por ano. Por fim, calcularemos a taxa de incidência dividindo o número de casos pela população e multiplicando por 100.000. Arredondaremos a taxa em 2 casas decimais usando a função “round()”. Apagaremos as variáveis de caso e população e elaboraremos uma tabela com a taxa de incidência por mês e ano.

Para criar o diagrama de controle, usaremos o método do Capítulo 4:“Distribuição das doenças no espaço e no tempo” do livro “Epidemiologia” do Medronho. Existem várias outras formas de calcular o valor esperado e os limites superiores e inferiores de um diagrama de controle, mas a discussão desses métodos não é o foco do nosso tutorial e sim a aplicação no R. Você pode usar as mesmas funções no R para criar um diagrama com o cálculo que você quiser. No método que estamos usando, seguiremos os seguintes passos:

  1. Calcular a média mensal (ou semanal) da doença em um período anterior, geralmente 10 anos. No nosso caso, estamos usando um período menor no tutorial apenas para ilustrar a ideia. Para calcular a média mensal (usando a função “mean()”) por linha, usamos a função “dcast()” para pivotar a tabela por mês e ano. Armazenamos as médias mensais na variável “media”.
  2. Calcular o desvio-padrão para cada incidência da média mensal. Usando a função “sd()”, calculamos o desvio-padrão para cada incidência média e armazenamos na variável “sd”.
  3. Estabelecer o intervalo de variação esperado para a incidência mensal da doença. Usando a distribuição normal, multiplica-se o desvio-padrão por 1,96 para uma confiança de 95% desses valores.

Para esse último passo, criamos o intervalo inferior subtraindo o intervalo de variação da média e o intervalo superior somando o intervalo de variação à média mensal. Salvamos os valores de intervalo inferior e superior, arredondado em 2 casas decimais, nas variáveis “low” e “high”.

Realizaremos todos os passos anteriores, com exceção da estimação de média, desvio padrão e intervalo superior e inferior para o ano de 2019, com a finalidade de usar esse ano para testar nosso diagrama de controle quanto à sua capacidade de identificar uma epidemia.

Agora que temos nossos dados totalmente tratados e armazenados em data.frames específicos, plotaremos o diagrama de controle usando o Rbase e o Ggplot2.

Para o Rbase, usaremos a cor preta para a média mensal, a cor cinza para os intervalos de variação esperados para a taxa de incidência de dengue no DF e a linha vermelha para representar a incidência em 2019.

Com esses comandos, obteremos o seguinte gráfico:

Press enter or click to view image in full size
Diagrama de controle de dengue no DF em 2019 com Rbase

Perceba que as taxas de incidência de dengue nesse ano foram maiores do que o esperado considerando a média e o intervalo de variação dos últimos 6 anos. Por esse critério, podemos considerar que houve uma epidemia de dengue no DF nesse ano.

Vamos plotar o mesmo gráfico usando o Ggplot2:

Obteremos um gráfico semelhante ao anterior, mas com a elegância do Ggplot2:

Press enter or click to view image in full size
Diagrama de controle de dengue no DF em 2019 com Ggplot2

Vamos pensar no uso de um diagrama desses em uma situação real, no serviço de saúde. Se você utilizar o diagrama de controle em seus relatórios e o atualizar mensalmente, você pode identificar o aumento inesperado de casos no início da epidemia e elaborar ações de controle de forma rápida para impedir a continuidade do aumento da incidência.

Suponhamos que você estivesse monitorando a incidência mensal de dengue em 2019 e tivesse dados até o mês de março daquele ano. O R permite a criação de um gráfico com os dados do ano incompletos, o que é ótimo para monitoramos epidemias. Você usaria o seguinte código para criar um diagrama de controle com os dados do ano incompletos:

Nesse caso você obteria o seguinte gráfico:

Press enter or click to view image in full size
Diagrama de controle de dengue no DF em 2019 com Ggplot2 cm dados do ano incompletos

Nesse caso, identificamos que o mês de março apresentou uma incidência de dengue maior que a esperada quando consideramos o intervalo de incidência esperado, que seria aceitável para o mês. Assim, medidas de controle da epidemia poderiam ter sido recomendadas e evitado o aumento que ocorreu até maio daquele ano.

Referências Bibliográficas

Medronho RA, Werneck GL, Perez, MA. Distribuição das Doenças no Espaço e no Tempo. In: Epidemiologia/ Roberto Andrade Medronho…[et al.]. — São Paulo : Editora Atheneu, 2009.

--

--

Danielly Xavier
Danielly Xavier

Written by Danielly Xavier

Epidemiologista e Cientista de Dados