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.
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) | 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%")| 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,tidyre 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
kablepara 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)| 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) | 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")| 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")| 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 XPrograma 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:
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.
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).
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”.
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.
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.
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.
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.
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.
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.↩︎
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.↩︎