Visualização de dados de interesse para a vigilância em saúde

Fazer uma boa apresentação que valorize sua análise de dados e a torne simples para seu interlocutor pode ser desafiador, não é mesmo?! Na vigilância em saúde comunicar análises é uma etapa essencial do trabalho e para isso podemos utilizar diversas estratégias de visualização dos dados.

O profissional de vigilância em saúde produz slides, tabelas, boletins, informes e relatórios diariamente. Estes materiais organizam dados e revelam informações valiosas que apoiam a tomada de decisão de profissionais de saúde e gestores. Neste contexto, a comunicação visual é chave para informar, e os gráficos que compõem a maioria dos relatórios descritivos dão forma às análises da vigilância.

Mas, qual a melhor maneira de se produzir visualização de dados? Qual gráfico utilizar? Existe gráfico específicos para informar um evento ou doença?

Neste curso, você desenvolverá diversas visualizações de dados de forma rápida com poucos comandos. Com o apoio da linguagem de programação R você poderá automatizar a produção gráfica e torná-la mais interessante e atrativa. Você aprenderá a utilizar cores e escolher os gráficos corretos para as suas análises.

Você quer análises ainda mais poderosas e gráficos com excelente qualidade visual? Este curso é para você!


Ao final deste curso, você será capaz de:

  1. produzir gráficos de barras e de linhas;
  2. criar e interpretar histogramas e boxplots;
  3. produzir pirâmides etárias;
  4. criar gráficos temporais de calor (calendar heatmaps);


Atenção

Para seguir com este curso, você deve conhecer as ferramentas básicas para uso da linguagem R e do RStudio, além de possuir conhecimentos básicos de rotinas de análises e visualização de dados utilizando a linguagem de programação R. Lembre-se que você pode acessar a qualquer momento o curso “Análise de dados para a vigilância em saúde – curso básico” obtendo os códigos desejados para a confecção de seus gráficos. Caso não tenha feito os cursos, sugerimos fortemente que se inscreva neles. Maiores informações em https://www.abrasco.org.br/site/analise-de-dados-para-a-vigilancia-em-saude/


1. O uso de gráfico na vigilância em saúde

Gráficos são representações de algo que possa ser mensurado, quantificado ou ilustrado de forma mais ou menos lógica. Eles facilitam a análise de dados e quase sempre são primeiramente organizados em tabelas que facilitam sua análise estatística. A partir delas utilizamos algumas ferramentas para interpretação e apresentação de resultados na vigilância em saúde.</div>

Em seu dia a dia provavelmente você já utilizou ferramentas como o Microsoft Excel para produção gráfica, ou ainda utilizou outros softwares que apoiam a visualização de dados de vigilância como o Epi Info e o Tabwin. Cada vez mais na realidade dos serviços de vigilância em saúde estamos nos deparando com o aumento do volume de dados e da sua complexidade, o que torna essas ferramentas limitadas para a produção de visualização de dados (DataViz).

O uso da linguagem de programação R para a produção gráfica trará muito mais praticidade, principalmente quando o volume de dados que você utiliza é consideravelmente grande. Além disso, o R possibilitará que você possa automatizar a produção gráfica, podendo também optar por uma gama diversificada de gráficos que tornam a interpretação da informação mais precisa e clara.

Neste curso, além de produzir uma grande variedade de tipos de gráficos como os de coluna, em barras, pizza, área, linha, pirâmides etárias e gráficos interativos, você aprenderá a escolher os gráficos mais adequados para a representação correta de sua necessidade.

Para isso, no R você encontrará diversos pacotes que te permitirão produzir gráficos arrojados e atraentes, com uma ampla gama de possibilidades. Neste curso, você aprenderá a utilizar dois pacotes do R: o módulo base (nativo do R) e o ggplot2 (um dos componentes do metapacote tidyverse). Vamos lá!

1.1 Preparando os dados

Um dos maiores benefícios da linguagem de programação </div> R é a facilidade de estruturação de dados e organização das rotinas para análise de vigilância em saúde. Base de dados como a do Sinan Net é facilmente importada e, além disso, é possível escrever um roteiro (um script) para a elaboração de gráfico com excelente qualidade visual podendo ser replicado de forma automática.

Vamos práticar! Para iniciarmos a conversa sobre a capacidade gráfica do R, vamos utilizar a base de dados proveniente do inquérito epidemiológico do VIGITEL de 2015. O VIGITEL, sigla para Vigilância de Fatores de Risco e Proteção para Doenças Crônicas por Inquérito Telefônico, compõe o sistema de Vigilância de Fatores de Risco para Doenças Crônicas Não Transmissíveis (DCNT) do Ministério da Saúde.

Para nosso exemplo, selecionaremos apenas algumas das variáveis disponíveis no inquérito para apresentarmos uma introdução dos recursos gráficos. Caso necessite acessar o dicionário de dados completo para conhecer todas as variáveis disponíveis acesse AQUI. Seguindo, acesse o menu lateral “Arquivos” do curso e faça download do banco de dados de nome vigitel_2015.csv. Lembre-se de manter todas as bases de dados deste curso em uma mesma pasta ou diretório.

Primeiro precisaremos importar a base de dados VIGITEL 2015. Para isso utilizaremos a função read_csv2() do pacote readr, carregado pelo metapacote tidyverse. Acompanhe o código a seguir e replique-o em seu RStudio:

if(!require(tidyverse)) install.packages("tidyverse");library(tidyverse)
#> Carregando pacotes exigidos: tidyverse
#> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
#> ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
#> ✔ tibble  3.1.8     ✔ dplyr   1.0.9
#> ✔ tidyr   1.2.0     ✔ stringr 1.4.0
#> ✔ readr   2.1.2     ✔ forcats 0.5.1
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
# Importando o banco de dados {`vigitel_2015.csv`}
# e armazenando os dados no objeto `vigitel`
vigitel <- read_csv2('Dados/vigitel_2015.csv')


Pronto, agora os dados estão armazenados no objeto {vigitel} e analisaremos a estrutura do banco de dados utilizando a função glimpse() do pacote dplyr. Perceba que o objeto {vigitel} contém 12 colunas (variáveis) e 54.174 linhas (observações) individuais. Acompanhe o código a seguir e replique-o em seu RStudio:

# Visualizando a estrutura do objeto {`vigitel`}
glimpse(vigitel)
#> Rows: 54,174
#> Columns: 12
#> $ cidade      <chr> "aracaju", "aracaju", "aracaju", "aracaju", "aracaju", "vi…
#> $ regiao      <chr> "nordeste", "nordeste", "nordeste", "nordeste", "nordeste"…
#> $ idade       <dbl> 59, 20, 53, 32, 70, 84, 84, 27, 71, 72, 70, 64, 56, 64, 52…
#> $ civil       <chr> "casado legalmente", "solteiro", "casado legalmente", "sol…
#> $ sexo        <chr> "masculino", "feminino", "feminino", "feminino", "feminino…
#> $ racacor     <chr> "branca", "parda", "parda", "preta", "parda", "não sabe", …
#> $ peso        <dbl> 76, 84, 77, 45, 62, NA, 51, 57, 77, 67, 74, 61, 69, 63, 65…
#> $ altura      <dbl> 172, 162, NA, 160, 153, 158, 140, 170, 155, 159, 156, 150,…
#> $ bebe        <chr> "não", "não", "não", "não", "sim", "não", "não", "não", "n…
#> $ fuma        <chr> "não", "não", "sim, diariamente", "não", "não", "não", "nã…
#> $ hipertensao <chr> "não", "sim", "não", "não", "sim", "não", "sim", "não", "s…
#> $ diabetis    <chr> "não", "não", "não", "não", "não", "sim", "sim", "não", "n…


Observe que a variável fuma contém três categorias de respostas (“não”, “sim, diariamente” e “sim, mas não diariamente”) que, para nossos exemplos, vamos categorizar para apenas duas (“sim” e “não”). Para isso, vamos utilizar a função if_else(), aninhada à função mutate(), ambas do pacote dplyr. Com essa função, vamos definir que se a variável for igual a “não”, substitua para “não” e, caso contrário, substitua para “sim”. É uma operação simples de transformação. Acompanhe o código a seguir e replique-o no script em seu computador:

vigitel <- vigitel |> 
  
  # Transformando os valores da coluna "fuma" para "sim" e "não" apenas
  mutate(fuma = if_else(fuma == "não", "não", "sim"))


Pronto, agora que já organizamos nossos dados podemos seguir para o processo de visualização gráfica.


Atenção

Todos os bancos de dados utilizados para análises neste curso se encontram no menu lateral “Arquivos” do curso. Lembre-se de fazer o download do material do curso diretamente do Ambiente Virtual de Aprendizagem do curso e arquivá-los em um diretório que deverá indicar para que o R o localize.


1.2 Utilizando a função plot()

Destacamos para uso em seu dia a dia o módulo base do R. Apesar de apresentar gráficos mais simples, ele é muito bom quando necessitamos obter uma visualização gráfica rápida, com poucos comandos, como por exemplo, traçar gráficos de linhas ou de barras ou analisar a distribuição dos dados que serão analisados utilizando um gráfico do tipo boxplot.

Vamos iniciar a produção dos gráficos utilizando então a função plot(). Ela é a mais genérica função para visualizar objetos gráficos no R. Essa função é nativa da linguagem, não sendo necessário nenhum pacote para acessá-la. É muito utilizada para uma análise rápida, mas possui inúmeros recursos que, quando usados em conjunto, tornam-se poderosos auxílios para visualização de dados.

Os argumentos básicos da função plot() são:

  • x: os dados que serão apresentados no eixo x. Usualmente pode ser utilizado sozinho, a depender do tipo de gráfico;
  • y: os dados que serão apresentados no eixo y é opcional.

Outros argumentos são complementares e serão utilizados para acessarmos alguns recursos gráficos como:

  • type: elemento que define qual tipo de gráfico será plotado. Alguns tipos muito úteis são:

    • “p” para gráfico de pontos;
    • “l” para gráfico de linhas;
    • “b” para gráfico de pontos e linhas.
  • pch: um número inteiro que define a forma geométrica utilizada para gráfico de pontos (quadrado, triângulo);

  • col: cor dos símbolos, das linhas. Existem muitas formas de especificar as cores. Veremos mais à frente sobre isso;

  • cex: tamanho de texto e símbolos. O padrão é 1, podendo ser ampliado (por exemplo 1.1, 1.2, 1.3) ou reduzido (por exemplo 0.9, 0.8, 0.5);

  • main: título do gráfico;

  • xlab: título do eixo x do gráfico;

  • ylab: título do eixo y;

  • lty: um número inteiro que define o tipo de linha dos gráficos. Os mais utilizados serão:

    • 1 para linha sólida,
    • 2 para linha tracejada, e
    • 3 para linha pontilhada.
  • lwd: espessura da linha.

Vamos demonstrar a criação de quatro tipos de gráficos como exemplo: gráfico de pontos, boxplot, histograma e gráfico de barras. Mais à frente vamos aprofundar nosso conhecimento sobre eles. Neste momento, perceba como podem ser facilmente elaborados com poucas linhas de código. Perceba, também, que a maneira que acessamos as colunas da base é utilizando o cifrão ($).

Para visualizar quatro gráficos alinhados e arrumados, utilizaremos a função par e o argumento mfrow, no qual definimos que queremos dois gráficos por linha divididos em duas colunas (c(2, 2)).

Acompanhe o código a seguir e replique-o em seu RStudio:

par(mfrow = c(2, 2))

plot(
  x = vigitel$peso,
  y = vigitel$altura,
  pch = 19,
  col = "blue",
  cex = 0.3,
  main = "Gráfico 1. Gráfico de pontos Peso x Altura",
  xlab = "Peso",
  ylab = "Altura"
)
abline(v = mean(vigitel$peso, na.rm = T), col = "green", lty = 2, lwd = 3)
abline(h = mean(vigitel$altura, na.rm = T), col = 2, lty = 2, lwd = 3)

# Gráfico 2
boxplot(
  vigitel$idade ~ vigitel$sexo,
  col = c("darkgreen", "darkred"),
  main = "Gráfico 2. Boxplot Idade / Sexo",
  xlab = "Sexo",
  ylab = "Idade"
)

# Gráfico 3
hist(
  x = vigitel$peso,
  col = "salmon",
  main = "Gráfico 3. Histograma Peso",
  xlab = "Peso",
  ylab = "Frequência"
)

# Gráfico 4
barplot(prop.table(table(vigitel$fuma)),
        col = c("steelblue", "orange"),
        main = "Gráfico 4.Proporção de Fumantes")


Figura 1: Exemplo de quatro gráficos diferentes gerados em uma mesma imagem.


Conseguiu visualizar? Caso não tenha conseguido revise o código e atente-se para sua escrita seguindo novamente o passo a passo acima. A qualquer momento você poderá copiar e colar o seu erro e pedir ajuda em algum desses locais:


Vamos lá! Observe na Figura 1 que o Gráfico 1 apresenta um cruzamento da variável peso com a variável altura utilizando um gráfico de pontos. Ele também plota (imprime) uma linha verde tracejada marcando no eixo x o peso médio dos dados utilizados e uma linha vermelha marcando a altura média no* eixo y*. Perceba que aninhamos a função mean() dentro da função abline(). Esta última é a responsável por criar as linhas. Além disso, para a linha vertical utilizamos o argumento v da função, e, para linha horizontal, utilizamos o argumento h.

No Gráfico 2 visualizamos um gráfico do tipo boxplot com o cruzamento da variável categórica sexo com a variável numérica Idade. Para mostrarmos ao R que queríamos este cruzamento utilizamos o operador til (~). Observe também que concatenamos as cores num vetor simples, na sequência em que são apresentadas as categorias da variável.

Já no Gráfico 3 conseguimos visualizar um gráfico do tipo histograma que apresenta a distribuição da variável Peso.

E, finalmente, no Gráfico 4 temos um gráfico de barras com a proporção de fumantes, usando o mesmo recurso de cores do Gráfico 2: um vetor com o nome das cores na sequência das categorias apresentadas.

Bem interessante, não é mesmo? Estes são os gráficos mais utilizados no dia a dia de análise de dados. Este exercício inicial, apenas apresenta como é simples e rápido a produção de visualização gráfica com R. Agora, precisamos aprofundar os componentes gráficos que nos exigirão um pouco mais de tempo para a personalização. Aqui iniciaremos com um elemento muito importante da visualização de dados: a cor. Siga em frente!