Análise dos Dados de Vacinação COVID-19 no Brasil - 2021

Sobre os Dados

Os dados apresentados referem-se a informações sobre a vacinação contra a Covid-19, coletados no início de 2021, especificamente durante os meses de janeiro e fevereiro. Esses dados são parte de um esforço nacional coordenado pelo Ministério da Saúde e instituições locais de saúde pública para combater a pandemia de Covid-19. Durante esse período, a vacinação iniciou-se com grupos prioritários definidos, com foco inicial nos trabalhadores da saúde e nas pessoas com maior risco de complicações decorrentes da infecção pelo vírus.

Os registros contêm informações detalhadas sobre os pacientes vacinados, incluindo códigos de identificação do paciente, a vacina administrada, os lotes utilizados, os estabelecimentos de saúde responsáveis pela aplicação, além de detalhes administrativos e geográficos, como o município, o estado e o sistema de origem dos dados. Os dados também fornecem informações sobre a etnia, o sexo biológico, a idade e a nacionalidade dos pacientes, permitindo análises mais detalhadas sobre as características da população vacinada.

Acessar o Dataset

Informações sobre o Dataset

  • O dataset consiste em um único arquivo chamado “microdados_vacinacao.csv” com tamanho de 2.12 GB.
  • Dataset possui 29 colunas de dados
  • O upload foi feito a 4 anos (2021)

Estrutura dos Dados

Os dados estão organizados em formato tabular, com cada linha representando um registro individual de vacinação. Abaixo está um exemplo da estrutura dos dados:

dados_exemplo <- data.frame(
  paciente_codigo_grupo = c(9, 9, 9),
  vacina = c("Covid-19-Coronavac-Sinovac/Butantan", "Covid-19-Coronavac-Sinovac/Butantan", "Covid-19-Coronavac-Sinovac/Butantan"),
  vacina_lote = c(202009011, 210009, 202010041),
  estabelecimento_razao_social = c("PM DE MORRO DO CHAPEU DO PIAUI", "SANTA CASA DE MISERICORDIA DE GUARAREMA", "SECRETARIA DE SAUDE"),
  estabelecimento = c("UNIDADE BASICA DE SAUDE PATRIOTINO LAGES REBELO", "SANTA CASA DE GUARAREMA", "HOSPITAL BARAO DE LUCENA"),
  paciente_cep = c(64180, 12010, 50751),
  estabelecimento_unidade_federativa = c("PI", "SP", "PE"),
  sistema_origem = c("ESUS APS - NACIONAL (OFFLINE)", "VACIVIDA", "Novo PNI"),
  paciente_municipio = c("Esperantina", "Taubaté", "Recife"),
  paciente_etnia = c("Amarela", "Branca", "Amarela"),
  estabelecimento_municipio = c("Morro do Chapéu do Piauí", "Guararema", "Recife"),
  paciente_idade = c(39, 35, 55),
  paciente_codigo_subgrupo = c(907, 926, 927),
  numero_dose = c(2, 1, 1),
  paciente_nacionalidade = c("B", "B", "B"),
  codigo_vacina = c(86, 86, 86),
  estabelecimento_codigo_ibge_municipio = c(2206670, 3518305, 2611606),
  paciente_uuid = c("ab41423f-2b62-5e23-8f83-be4e65c5f332", "1244d0c0-e1f2-58f7-9c5c-64054a6f37ce", "e56816e6-b605-58f5-8c66-a2a673678a0f"),
  paciente_grupo = c("Trabalhadores de Saúde", "Trabalhadores de Saúde", "Trabalhadores de Saúde"),
  data_aplicacao = c("2021-02-16", "2021-02-06", "2021-02-12"),
  documento_uuid = c("f9a282c2-d608-50e3-8cd6-614b94579138", "0b20fb92-d744-563c-ba0e-fa4a8839fbef", "df60db8c-841a-572d-873b-3f45ea50306a"),
  paciente_sexo_biologico = c("F", "F", "M"),
  estabelecimento_codigo_cnes = c(2649462, 2773333, 2427427),
  paciente_unidade_federativa = c("PI", "SP", "PE"),
  paciente_codigo_pais = c(10, 10, 10),
  paciente_pais = c("Brasil", "Brasil", "Brasil"),
  paciente_codigo_ibge_municipio = c(2203701, 2203701, 2611606),
  paciente_subgrupo = c("Enfermeiro(a)", "Outros", "Auxiliar de Enfermagem"),
  paciente_codigo_etnia = c(4, 1, 4)
)

kable(dados_exemplo, 
      caption = "Exemplo da Estrutura dos Dados",
      format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) 
Exemplo da Estrutura dos Dados
paciente_codigo_grupo vacina vacina_lote estabelecimento_razao_social estabelecimento paciente_cep estabelecimento_unidade_federativa sistema_origem paciente_municipio paciente_etnia estabelecimento_municipio paciente_idade paciente_codigo_subgrupo numero_dose paciente_nacionalidade codigo_vacina estabelecimento_codigo_ibge_municipio paciente_uuid paciente_grupo data_aplicacao documento_uuid paciente_sexo_biologico estabelecimento_codigo_cnes paciente_unidade_federativa paciente_codigo_pais paciente_pais paciente_codigo_ibge_municipio paciente_subgrupo paciente_codigo_etnia
9 Covid-19-Coronavac-Sinovac/Butantan 202009011 PM DE MORRO DO CHAPEU DO PIAUI UNIDADE BASICA DE SAUDE PATRIOTINO LAGES REBELO 64180 PI ESUS APS - NACIONAL (OFFLINE) Esperantina Amarela Morro do Chapéu do Piauí 39 907 2 B 86 2206670 ab41423f-2b62-5e23-8f83-be4e65c5f332 Trabalhadores de Saúde 2021-02-16 f9a282c2-d608-50e3-8cd6-614b94579138 F 2649462 PI 10 Brasil 2203701 Enfermeiro(a) 4
9 Covid-19-Coronavac-Sinovac/Butantan 210009 SANTA CASA DE MISERICORDIA DE GUARAREMA SANTA CASA DE GUARAREMA 12010 SP VACIVIDA Taubaté Branca Guararema 35 926 1 B 86 3518305 1244d0c0-e1f2-58f7-9c5c-64054a6f37ce Trabalhadores de Saúde 2021-02-06 0b20fb92-d744-563c-ba0e-fa4a8839fbef F 2773333 SP 10 Brasil 2203701 Outros 1
9 Covid-19-Coronavac-Sinovac/Butantan 202010041 SECRETARIA DE SAUDE HOSPITAL BARAO DE LUCENA 50751 PE Novo PNI Recife Amarela Recife 55 927 1 B 86 2611606 e56816e6-b605-58f5-8c66-a2a673678a0f Trabalhadores de Saúde 2021-02-12 df60db8c-841a-572d-873b-3f45ea50306a M 2427427 PE 10 Brasil 2611606 Auxiliar de Enfermagem 4
dados_vacinacao <- read_csv("microdados_vacinacao.csv")

# Convertendo a coluna de data para o formato correto
dados_vacinacao$data_aplicacao <- as.Date(dados_vacinacao$data_aplicacao)

Metodologia

O processo de análise dos dados de vacinação contra a Covid-19 no Brasil foi conduzido seguindo as seguintes etapas:

1. Limpeza e Tratamento dos Dados

Para garantir a qualidade das análises, foram adotadas as seguintes medidas:

  • Remoção de valores ausentes: Foi realizada uma análise exploratória inicial dos dados de vacinação com o objetivo de identificar valores ausentes e possíveis inconsistências nas variáveis. A tabela abaixo apresenta um resumo das principais métricas analisadas:
    • paciente_etnia — 26,69% de valores ausentes
    • paciente_cep — 19,89% de valores ausentes
    • paciente_municipio — 0,56% de valores ausentes
    • paciente_unidade_federativa — 0,56% de valores ausentes
# Definindo as variáveis (nomes das colunas)
variaveis <- colnames(dados_vacinacao)

# Criando o dataframe com as métricas
metricas <- data.frame(
  #variavel = variaveis,
  Total = sapply(variaveis, function(col) sum(!is.na(dados_vacinacao[[col]]))), # Total de itens
  Pct_de_NA = sapply(variaveis, function(col) mean(is.na(dados_vacinacao[[col]])) * 100), # Percentual de NAs
  Qt_Variaveis_Distintas = sapply(variaveis, function(col) length(unique(dados_vacinacao[[col]]))) # Quantidade de valores distintos
)

# Ajustando a coluna de percentual de NAs
metricas$Pct_de_NA <- paste0(format(round(metricas$Pct_de_NA, 2), nsmall = 2), "%")

# Renomeando as colunas para nomes mais amigáveis
colnames(metricas)[colnames(metricas) == "Pct_de_NA"] <- "Porcentagem de Valores Ausentes"
colnames(metricas)[colnames(metricas) == "Qt_Variaveis_Distintas"] <- "Quantidade de Valores Distintos"

# Gerando a tabela com kable
kable(metricas, align = "lccc", digits = 2)
Total Porcentagem de Valores Ausentes Quantidade de Valores Distintos
paciente_codigo_grupo 6153568 1.90% 16
vacina 6272491 0.00% 4
vacina_lote 6272491 0.00% 493
estabelecimento_razao_social 6272491 0.00% 7582
estabelecimento 6272491 0.00% 19099
paciente_cep 5025031 19.89% 22778
estabelecimento_unidade_federativa 6272491 0.00% 27
sistema_origem 6272491 0.00% 13
paciente_municipio 6237569 0.56% 5325
paciente_etnia 4598651 26.69% 6
estabelecimento_municipio 6272491 0.00% 5196
paciente_idade 6272490 0.00% 130
paciente_codigo_subgrupo 6272491 0.00% 71
numero_dose 6272479 0.00% 3
paciente_nacionalidade 6262167 0.16% 4
codigo_vacina 6272491 0.00% 4
estabelecimento_codigo_ibge_municipio 6272491 0.00% 5462
paciente_uuid 6272490 0.00% 5015657
paciente_grupo 6153568 1.90% 16
data_aplicacao 6251709 0.33% 58
documento_uuid 6272491 0.00% 6272491
paciente_sexo_biologico 6272490 0.00% 4
estabelecimento_codigo_cnes 6272491 0.00% 20063
paciente_unidade_federativa 6237540 0.56% 28
paciente_codigo_pais 6238529 0.54% 14
paciente_pais 6238529 0.54% 14
paciente_codigo_ibge_municipio 6237540 0.56% 5575
paciente_subgrupo 6153568 1.90% 66
paciente_codigo_etnia 6272490 0.00% 7
Inconsistências nos dados: Durante a verificação das variáveis categóricas, foi identificado que a coluna paciente_unidade_federativa apresentou 28 valores distintos, ao invés dos 27 esperados, sugerindo a presença de valores nulos ou registros inconsistentes.
  • Filtragem de idades válidas: Nos dados foram encontrados mais de 130 variações de idades, quando plotados, foi encontrado que possuem idades que variam de 0 até 221, no caso, será somente considerado idades até 109 anos.

A pessoa mais velha vacinada no Brasil no período analisado

dados_filtrados_maior_100 <- dados_vacinacao %>%
  filter(paciente_idade > 100) # Filtra as idades acima de 100

ggplot(dados_filtrados_maior_100, 
       aes(x = paciente_idade)) +
  geom_histogram(binwidth = 5, position = "dodge", alpha = 0.8, fill = "skyblue") +
  geom_text(stat = "bin",
            aes(label = ..count..),
            binwidth = 5,
            position = position_dodge(width = 5),
            vjust = -0.5,
            size = 3) +
  theme_minimal() +
  labs(
    title = "Distribuição de Idade dos Pacientes (Acima de 100 anos)",
    subtitle = "Idades acima de 100 anos",
    x = "Idade",
    y = "Quantidade"
  ) +
  theme(
    legend.position = "none", # Remover legenda
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  ) +
  scale_y_continuous(labels = comma)

  • Tipos de Vacina: O dataset contém informações sobre quatro tipos de vacinas. No entanto, como pode ser observado na tabela abaixo, as proporções entre elas não são ideais, com apenas duas vacinas apresentando uma participação significativa.
vacinas_quantidade <- dados_vacinacao %>%
  group_by(vacina) %>%
  summarise(quantidade = n()) %>%
  arrange(desc(quantidade))

# Criar a tabela no R Markdown
kable(vacinas_quantidade, 
      caption = "Quantidade de Vacinas por Tipo", 
      format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) %>%
  scroll_box(width = "100%")
Quantidade de Vacinas por Tipo
vacina quantidade
Covid-19-Coronavac-Sinovac/Butantan 4842847
Vacina Covid-19 - Covishield 1429338
Vacina covid-19 - BNT162b2 - BioNTech/Fosun Pharma/Pfizer 294
Vacina covid-19 - Ad26.COV2.S - Janssen-Cilag 12

2. Criação de Variáveis Derivadas

Variáveis adicionais foram criadas para facilitar as análises e visualizações:

  • Ano e Mês da vacinação: extraídos a partir da data de aplicação.
  • Faixas etárias: divisão das idades em grupos, como “0-17”, “18-29”, “30-44”, “45-59”, “60-74” e “75+”.
dados_vacinacao <- dados_vacinacao %>%
  mutate(
    ano = year(data_aplicacao),
    mes = month(data_aplicacao, label = TRUE, abbr = FALSE),
    faixa_etaria = case_when(
      paciente_idade <= 17 ~ "0-17",
      paciente_idade <= 29 ~ "18-29",
      paciente_idade <= 44 ~ "30-44",
      paciente_idade <= 59 ~ "45-59",
      paciente_idade <= 74 ~ "60-74",
      TRUE ~ "75+"
    )
  )

3. Bibliotecas Utilizadas

  • tidyverse: Conjunto de pacotes para manipulação e visualização de dados, incluindo ggplot2, dplyr, tidyr e outros.
  • scales: Fornece funções para personalizar escalas, como formatação de eixos e legendas em gráficos.
  • knitr: Gera relatórios dinâmicos ao integrar código R com documentos Markdown, HTML e LaTeX.
  • kableExtra: Extensão do kable para criar tabelas mais bonitas e personalizáveis em R Markdown.
  • plotly: Cria gráficos interativos e dinâmicos, incluindo 3D e mapas.

4. Filtros Aplicados durante a Analise

  • Filtro de somente 2 vacinas
dados_vacinacao_filtrados <- dados_vacinacao %>%
  filter(vacina %in% c("Covid-19-Coronavac-Sinovac/Butantan", "Vacina Covid-19 - Covishield")) %>%
  select(vacina, estabelecimento_unidade_federativa, paciente_idade, numero_dose, faixa_etaria) %>%
  na.omit()
  • Filtro de valores únicos da coluna de grupo de pacientes
# Tabela de valores únicos de paciente_grupo
valores_unicos <- dados_vacinacao %>%
  select(paciente_grupo) %>%
  distinct() %>%
  na.omit()
  • Agrupamento por faixa etária, com Idade limite de até 109 anos
dados_vacinacao_clean_idade <- dados_vacinacao_filtrados %>%
  # Remover NAs
  filter(!is.na(paciente_idade),
         !is.na(numero_dose)) %>%
  filter(paciente_idade <= 109) %>%
  mutate(
    faixa_etaria = cut(paciente_idade, 
                       breaks = c(0, 17, 29, 44, 59, 74, 109),
                       labels = c("0-17", "18-29", "30-45", "46-59", "60-74", "75+"),
                       include.lowest = TRUE)
  ) %>%
  select(faixa_etaria, paciente_idade, numero_dose, vacina)
  • Agrupamento da idade pelo número de doses
dados_prop <- dados_vacinacao_clean_idade %>%
  select(numero_dose, faixa_etaria) %>%
  group_by(faixa_etaria, numero_dose) %>%
  summarise(n = n()) %>%
  group_by(faixa_etaria) %>%
  mutate(prop = n/sum(n)) %>%
  ungroup()
  • Agrupamento de faixa etária pelo número de doses
dados_prop2 <- dados_vacinacao_clean_idade %>%
  select(faixa_etaria, numero_dose) %>%
  group_by(faixa_etaria, numero_dose) %>%
  summarise(total_vacinacao = n(), .groups = "drop")
dados_prop2 <- dados_prop2 %>% na.omit()
  • Agrupamento de grupos vacinados
# Contagem da quantidade de vacinados por grupo
quantidade_vacinados <- dados_vacinacao %>%
  group_by(paciente_grupo) %>%
  summarise(quantidade_vacinados = n()) %>%
  na.omit()

# Proporção de vacinados por grupo
total_vacinados <- sum(quantidade_vacinados$quantidade_vacinados)

quantidade_vacinados <- quantidade_vacinados %>%
  mutate(proporcao = quantidade_vacinados / total_vacinados)
  • Somente vacinações que aconteceram devido ao Programa Nacional de Imunização(PNI)
# Lista completa de UFs sem NA
ufs_completas <- unique(na.omit(dados_vacinacao$estabelecimento_unidade_federativa))

# Contagem das vacinações, garantindo que todas as UFs apareçam
dados_pni <- dados_vacinacao %>%
  filter(grepl("PNI", sistema_origem)) %>%
  group_by(estabelecimento_unidade_federativa) %>%
  summarise(volume_vacinacao = n()) %>%
  right_join(
    tibble(estabelecimento_unidade_federativa = ufs_completas),
    by = "estabelecimento_unidade_federativa"
  ) %>%
  mutate(volume_vacinacao = replace_na(volume_vacinacao, 0))

Análise Exploratória dos Dados

Faixa Etária

Distribuição de Idade por Tipo de Vacina

ggplot(dados_vacinacao_clean_idade, 
       aes(x = paciente_idade, fill = vacina)) +
  geom_histogram(binwidth = 5, position = "dodge", alpha = 0.8) +
  theme_minimal() +
  scale_fill_viridis_d(name = "Tipo de Vacina") +
  labs(
    subtitle = "Idades até 109 anos",
    x = "Idade",
    y = "Quantidade"
  ) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  ) +
  scale_y_continuous(labels = comma)


Faixa Etária por Vacina

tabela_vacinas_faixa <- dados_vacinacao_filtrados %>%
  group_by(faixa_etaria, vacina) %>%
  summarise(total_vacinacao = n(), .groups = "drop") %>%
  arrange(faixa_etaria)
  
total_geral <- sum(tabela_vacinas_faixa$total_vacinacao)

tabela_vacinas_faixa <- tabela_vacinas_faixa %>%
  mutate(Porcentagem = (total_vacinacao / total_geral) * 100)

tabela_vacinas_faixa$Porcentagem <- paste0(round(tabela_vacinas_faixa$Porcentagem,2), "%")

tabela_vacinas_faixa %>%
  select(faixa_etaria, vacina, total_vacinacao, Porcentagem) %>%
  kable(caption = "Total de Vacinas por Faixa Etária e Tipo de Vacina",
        format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE)
Total de Vacinas por Faixa Etária e Tipo de Vacina
faixa_etaria vacina total_vacinacao Porcentagem
0-17 Covid-19-Coronavac-Sinovac/Butantan 1741 0.03%
0-17 Vacina Covid-19 - Covishield 729 0.01%
18-29 Covid-19-Coronavac-Sinovac/Butantan 734068 11.7%
18-29 Vacina Covid-19 - Covishield 211146 3.37%
30-44 Covid-19-Coronavac-Sinovac/Butantan 1641928 26.18%
30-44 Vacina Covid-19 - Covishield 460198 7.34%
45-59 Covid-19-Coronavac-Sinovac/Butantan 966883 15.42%
45-59 Vacina Covid-19 - Covishield 278184 4.44%
60-74 Covid-19-Coronavac-Sinovac/Butantan 334068 5.33%
60-74 Vacina Covid-19 - Covishield 140319 2.24%
75+ Covid-19-Coronavac-Sinovac/Butantan 1164158 18.56%
75+ Vacina Covid-19 - Covishield 338762 5.4%

Doses por Faixa Etária

ggplot(dados_prop, 
       aes(x = faixa_etaria, y = prop, fill = factor(numero_dose))) +
  geom_bar(stat = "identity", position = "fill", color="#FFF") +
  geom_text(aes(label = scales::percent(prop, accuracy = 0.1)),
            position = position_fill(vjust = 0.5)) +
  scale_y_continuous(labels = percent) +
  scale_fill_hue(name="Dose") +
  theme_minimal() +
  labs(
    title = "Proporção de Doses por Faixa Etária",
    subtitle = "Dados filtrados para idades até 109 anos",
    x = "Faixa Etária",
    y = "Proporção"
  ) +
  theme(
    legend.position = "bottom",
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  )


Doses

# Criar a tabela com as colunas "1 Dose" e "2 Doses"
tabela_doses <- dados_prop2 %>%
  spread(key = numero_dose, value = total_vacinacao, fill = 0) %>%
  rename("1º Dose" = `1`, "2º Doses" = `2`) %>%
  arrange(faixa_etaria)

tabela_doses %>%
  kable(caption = "Total de Vacinações por Faixa Etária e Dose",
        format = "html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE) 
Total de Vacinações por Faixa Etária e Dose
faixa_etaria 1º Dose 2º Doses
0-17 2213 257
18-29 741430 203784
30-45 1598634 503492
46-59 946094 298973
60-74 388153 86234
75+ 1436945 60870

Distribuição por Estado

Proporção de Vacinados por Tipo de Vacina nos Estados

ggplot(dados_vacinacao_filtrados, 
       aes(x = estabelecimento_unidade_federativa, fill = vacina)) +
  geom_bar(position = "stack") +
  labs(
    subtitle = "Covid-19-Coronavac-Sinovac/Butantan vs Vacina Covid-19 - Covishield",
    x = "Estado",
    y = "Quantidade de Doses"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  )


Grupos Prioritarios

Valores Únicos de Paciente Grupo

# Criando tabela com kable
kable(data.frame(paciente_grupo = valores_unicos), 
      col.names = c("Paciente Grupo"), 
      caption = "Valores Únicos de Paciente Grupo")
Valores Únicos de Paciente Grupo
Paciente Grupo
Trabalhadores de Saúde
Faixa Etária
Pessoas de 60 anos ou mais institucionalizadas
Povos Indígenas
Comorbidades
Povos e Comunidades Tradicionais
Pessoas com Deficiência
Trabalhadores da Educação
Forças de Segurança e Salvamento
Funcionário do Sistema de Privação de Liberdade
Pessoas em Situação de Rua
Forças Armadas (membros ativos)
População Privada de Liberdade
Trabalhadores Industriais
Trabalhadores Portuários

Proporção de Vacinados por Grupo

# Gráfico de barras (Proporção de vacinados por grupo)
ggplot(quantidade_vacinados, aes(x = paciente_grupo, y = proporcao, fill = paciente_grupo)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = quantidade_vacinados), vjust = -0.5, color = "black") +
  labs(title = "Proporção de Vacinados por Grupo", x = "Grupo de Pacientes", y = "Proporção") +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))


Porcentagem de Pacientes por Unidade Federativa e Grupo

# Filtrar os dados e calcular as porcentagens
tabela_porcentagem <- dados_vacinacao %>%
  filter(!is.na(paciente_grupo)) %>%  # Remover os NA de paciente_grupo
  count(estabelecimento_unidade_federativa, paciente_grupo) %>%  # Contar os pacientes por estado e grupo
  group_by(estabelecimento_unidade_federativa) %>%  # Agrupar por estado
  mutate(porcentagem = paste0(round(n / sum(n) * 100,1), "%")) %>%  # Calcular a porcentagem
  ungroup() %>%  # Desagrupar
  select(Unidade_Federativa = estabelecimento_unidade_federativa, paciente_grupo, porcentagem) %>%  # Renomear coluna
  spread(key = paciente_grupo, value = porcentagem, fill = 0)  # Criar colunas para os grupos

kable(tabela_porcentagem)#, caption = "Porcentagem de Pacientes por Unidade Federativa e Grupo")
Unidade_Federativa Comorbidades Faixa Etária Forças Armadas (membros ativos) Forças de Segurança e Salvamento Funcionário do Sistema de Privação de Liberdade Pessoas com Deficiência Pessoas de 60 anos ou mais institucionalizadas Pessoas em Situação de Rua População Privada de Liberdade Povos e Comunidades Tradicionais Povos Indígenas Trabalhadores da Educação Trabalhadores de Saúde Trabalhadores Industriais Trabalhadores Portuários
AC 0% 6.8% 0 0.2% 0 0.1% 4.7% 0 0 0 27.8% 0% 60.3% 0 0%
AL 0% 26.8% 0 0% 0 0% 1.5% 0 0 0 9.7% 0 62% 0 0
AM 0.1% 40% 0% 0% 0 0% 0.3% 0 0 0 21.3% 0% 38.2% 0 0
AP 0 11.2% 0 0% 0 0.4% 6% 0 0 0 22.5% 0 59.9% 0 0
BA 0% 28.4% 0% 0.1% 0% 0.1% 2.5% 0% 0 0% 4% 0% 64.9% 0% 0%
CE 0.1% 27.7% 0 0% 0 0.1% 1.5% 0 0 0 13.5% 0% 57.1% 0% 0%
DF 0.2% 40% 0.1% 0.3% 0 0.4% 1% 0% 0% 0 0.1% 0% 58% 0 0
ES 0% 15.9% 0 0% 0% 0.4% 3.1% 0% 0% 0 1.6% 0% 79% 0 0
GO 0.1% 22.2% 0% 0.2% 0% 1% 5.8% 0 0% 0 0.2% 0% 70.5% 0 0
MA 1.9% 16.2% 0% 0% 0% 0.1% 1.3% 0 0% 0.1% 5.7% 0% 74.6% 0% 0
MG 0% 16.1% 0% 0.1% 0% 0.4% 6.4% 0 0% 0% 1.9% 0% 74.9% 0% 0%
MS 0.1% 23.5% 0% 0.1% 0% 0.1% 2.3% 0 0 0 28.2% 0.3% 45.3% 0 0
MT 0% 8.2% 0 0% 0% 0.1% 2% 0% 0% 0 11.6% 0% 78% 0 0
PA 0% 21.5% 0 0% 0 0% 1.6% 0 0% 0.5% 6.9% 0% 69.4% 0 0
PB 0.2% 20.3% 0% 0% 0 0% 2.2% 0 0 0 6.9% 0 70.3% 0 0
PE 0.1% 22.5% 0 0% 0% 0.2% 3.7% 0 0 0% 15.3% 0% 58.2% 0 0%
PI 0% 12% 0 0% 0 0% 1.4% 0 0 0 0 0% 86.6% 0 0%
PR 0% 12.2% 0% 0.2% 0% 0.2% 5% 0 0 0% 2.5% 0% 79.9% 0% 0%
RJ 0.1% 33.8% 0% 0% 0% 0.6% 6% 0.1% 0 0.2% 0% 0% 59.1% 0% 0
RN 7.5% 18.2% 0 0.1% 0.1% 0.4% 0.8% 0% 0% 0% 0% 0% 72.9% 0% 0%
RO 0% 26.9% 0 0% 0% 0.2% 0.9% 0 0% 0% 8.2% 0% 63.7% 0 0
RR 0 8.4% 0 0 0 0 0.8% 0 0 0 22.8% 0 68% 0 0
RS 0.1% 26.4% 0% 0.1% 0% 0.9% 8.3% 0% 0% 0.2% 2.4% 0.1% 61.5% 0% 0%
SC 0% 9.7% 0% 1.1% 0% 0.3% 5.8% 0 0 0 2.9% 1% 79.3% 0 0
SE 0% 5.6% 0 0 0 0.1% 1.3% 0 0 0 0.5% 0 92.5% 0 0
SP 0% 26.3% 0 0% 0% 0.2% 1.7% 0 0 0.3% 0.2% 0% 71.3% 0 0
TO 0% 30.1% 0 0% 0 0% 1.5% 0 0 0 5.2% 0% 63.1% 0 0

Programas de Vacinação

Quantidade de Doses por Programa de Vacinação

# Tabela com o total de doses por sistema_origem
tabela_programas <- dados_vacinacao %>%
  group_by(sistema_origem) %>%
  summarise(quantidade_doses = n()) %>%
  arrange(desc(quantidade_doses)) %>%
  na.omit()

colnames(tabela_programas) <- c("Sistema de Origem", "Quantidade de Doses")

# Exibir a tabela no kable
kable(tabela_programas, caption = "Quantidade de Doses por Programa de Vacinação")
Quantidade de Doses por Programa de Vacinação
Sistema de Origem Quantidade de Doses
Novo PNI 3633550
VACIVIDA 2061625
ESUS APS - NACIONAL (OFFLINE) 182824
SMV 119045
RN + Vacina 112176
VIDA+ 87035
Vacina Campo Grande 26323
IDS Saúde 21781
G-MUS 16879
SIGSS MV 7389
Saudetech 2606
G-MUS - Gestão Municipal de Saude 1257
IPM Sistemas Ltda. 1

Quantidade de Doses por Programa de Vacinação

# Gráfico de barras
ggplot(tabela_programas, aes(x = reorder(`Sistema de Origem`, -`Quantidade de Doses`), y = `Quantidade de Doses`)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  geom_text(aes(label = scales::comma(`Quantidade de Doses`)), vjust = -0.5, size = 3) +  # Adiciona os rótulos acima das barras
  theme_minimal() +
  labs(
    x = "Sistema de Origem",
    y = "Quantidade de Doses"
  ) +
  scale_y_continuous(labels = label_comma()) +  # Formatar o eixo Y para valores normais
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # Ajuste do texto no eixo X


Programa Nacional de Imunização (PNI)

# Criar o gráfico de barras sem legenda e formatar o eixo Y
ggplot(dados_pni, aes(x = estabelecimento_unidade_federativa, y = volume_vacinacao)) +
  geom_bar(stat = "identity", fill = "skyblue") +  # Barras
  #geom_text(aes(label = volume_vacinacao),          # Adiciona rótulos com os valores reais
  #          vjust = -0.5,                           # Posição do texto acima da barra
  #          size = 3) +                             # Tamanho da fonte
  theme_minimal() +
  labs(
    x = "Unidade Federativa",
    y = "Volume de Vacinação"
  ) +
  scale_y_continuous(labels = comma) +  # Formata os números no eixo Y
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  # Rotação dos rótulos no eixo X
    legend.position = "none"  # Remove a legenda
  )


Conclusão

Conclusão da Declaração do Problema

Este relatório teve como objetivo analisar os dados de vacinação contra a COVID-19 no Brasil durante os meses de janeiro e fevereiro de 2021, focando na distribuição por faixa etária, tipos de vacina, cobertura geográfica e grupos prioritários. A pesquisa visou identificar padrões e tendências na campanha de vacinação, a fim de avaliar sua eficácia e abrangência em diferentes segmentos da população brasileira.

Abordagem da Declaração do Problema

Para abordar a questão, utilizamos um conjunto de dados sobre a vacinação contra a COVID-19 no Brasil, que contém informações sobre os tipos de vacina (Coronavac-Sinovac/Butantan, Covishield e mais dois tipos), distribuição por faixa etária, doses aplicadas, distribuição por estado e grupos prioritários. A metodologia consistiu em realizar uma análise exploratória e criar visualizações para entender a cobertura vacinal no país.

Embora o conjunto de dados incluísse quatro tipos de vacinas, as duas últimas (Vacina covid-19 - BNT162b2 - BioNTech/Fosun Pharma/Pfizer, Vacina covid-19 - Ad26.COV2.S - Janssen-Cilag) representaram menos de 1% da amostra total (6.272.491 doses), razão pela qual foram desconsideradas na análise.

Insights Interessantes da Análise

A análise exploratória revelou diversos insights relevantes:

  1. Tipos de Vacina e Distribuição Etária: A vacina Coronavac-Sinovac/Butantan foi significativamente mais utilizada que a Covishield em todas as faixas etárias. O pico de vacinação com Coronavac ocorreu na faixa dos 30-45 e 75+ anos, enquanto a Covishield manteve uma distribuição mais equilibrada.

  2. Cobertura de Segunda Dose: Existe uma disparidade significativa entre a aplicação da primeira e segunda doses em todas as faixas etárias. As faixas de 30-45 e 46-59 anos apresentaram as maiores proporções de completude vacinal (24%), enquanto as faixas de 0-17 e 75+ tiveram as menores taxas de segunda dose (10,4% e 4,1%, respectivamente).

  3. Cobertura de Vacina para 75+ Anos: Do público de mais de 75 anos, que correspondem a cerca de 23,96% (1.502.920) do público amostral, foram vacinados, sendo 18,56% utilizando a “Covid-19-Coronavac-Sinovac/Butantan” e os outros 5,4% receberam a “Vacina Covid-19 - Covishield”.

  4. Volume de Vacinação por Faixa Etária: A faixa etária de 30-44 anos recebeu o maior número de primeiras doses (1.598.634), seguida pela faixa de 75+ (1.436.945). No entanto, a faixa etária com menor volume de vacinação na amostra, foram os de 0-17 anos, que tiveram cerca de 0,4% dentre os 6.272.184 amostras coletada.

  5. Distribuição Geográfica: Houve uma distribuição desigual de vacinas entre os estados brasileiros. O estado identificado como “SP” recebeu uma quantidade significativamente maior de doses, especialmente da Coronavac-Sinovac/Butantan, o que é consistente com o fato de ser o estado mais populoso e também sede do Instituto Butantan, e serem um dos primeiros estados a adotar a nova vacina.

  6. Grupos Prioritários: Os trabalhadores da saúde foram o grupo mais vacinado (4.195.807 doses), seguido por pessoas categorizadas por faixa etária (1.467.236). Isso reflete a estratégia de priorização adotada no início da campanha, focando em profissionais de saúde e idosos.

  7. Sistemas de Registro: O Novo PNI1 (Programa Nacional de Imunizações) foi o principal sistema de registro de vacinação (3.633.550 doses), seguido pelo VACIVIDA2 (2.061.625 doses), indicando diferentes infraestruturas tecnológicas utilizadas nos processos de imunização.

  8. Unidades Federativas: A análise do volume de vacinação por estado revela que alguns estados, como MA, RJ e RS, apresentaram volumes consideravelmente maiores do que outros, o que pode refletir variações nas populações ou nas capacidades de execução da campanha. É importante destacar que São Paulo (SP) e Rio Grande do Norte (RN) não utilizaram o sistema do PNI para a vacinação, provavelmente adotando os programas “VaciVida” e “RN + Vida”, respectivamente.

Pontos Finais

Este relatório apresenta uma análise detalhada da campanha de vacinação contra a COVID-19 no Brasil, destacando os padrões de distribuição, cobertura e alcance em diversos segmentos populacionais. Os dados indicam uma estratégia de vacinação que deu prioridade, inicialmente, aos profissionais de saúde e idosos, expandindo-se posteriormente para outras faixas etárias, mesmo um ano após o início da pandemia.

A disparidade entre primeiras e segundas doses, especialmente nas faixas etárias mais jovens, sugere desafios na completude do esquema vacinal que podem ter impactado a eficácia global da campanha. A predominância da Coronavac-Sinovac/Butantan reflete a capacidade de produção nacional e as parcerias estabelecidas no início da pandemia.

A análise destacou também diferenças regionais importantes na distribuição de vacinas, que podem estar relacionadas a fatores como população, infraestrutura de saúde e capacidade logística. Esses insights são valiosos para avaliar a eficácia da campanha de vacinação e podem contribuir para o planejamento de futuras estratégias de imunização em larga escala no país.


  1. Programa Nacional de Imunizações (PNI) - É uma iniciativa contínua do Ministério da Saúde do Brasil, responsável por coordenar a vacinação da população brasileira contra diversas doenças, incluindo sarampo, poliomielite, tuberculose e outras, oferecendo vacinas gratuitas para todos os cidadãos.↩︎

  2. VACIVIDA - É uma plataforma digital criada especificamente para apoiar a gestão da vacinação contra a COVID-19, facilitando o monitoramento da distribuição de vacinas, o registro das doses aplicadas e o acompanhamento da cobertura vacinal durante a pandemia, com foco na população em risco e grupos prioritários.↩︎