vacinaBrasil

Dados de vacinação contra Covid-19 no Brasil por faixa etária

OTHER License

Stars
10
Committers
1

vacinaBrasil

Dados de pessoas vacinadas no Brasil por idade. A populao estimada a partir da PNAD contnua. Os dados de vacinao so obtidos do Open Datasus. Ver cdigos para obteno dos resultados na pasta data-raw/.

ltima atualizao: 25/04/2021

Populao

library(ggplot2)
library(vacinaBrasil)

fonte <- stringr::str_glue(
  "Fonte:\n",
  "Populao: PNAD Contnua\n",
  "Vacinao: Open DataSus"
)

dose <- datasus_idade_sexo_dose %>% 
  dplyr::select(sexo, idade, tipo = dose, n) %>% 
  dplyr::filter(tipo %in% c("1 Dose", "2 Dose"))

pop <- pop_idade_sexo %>% 
  dplyr::transmute(
    sexo,
    idade = as.numeric(idade),
    tipo = "Populao",
    n = pop 
  ) %>% 
  dplyr::filter(idade <= 100, idade >= 18)

dados <- dplyr::bind_rows(pop, dose)

dados %>% 
  dplyr::mutate(n = n * ((sexo == "Homem") * 2 -1)) %>% 
  dplyr::mutate(tipo = forcats::lvls_reorder(tipo, c(2, 1, 3))) %>% 
  ggplot(aes(x = n, y = factor(idade), fill = sexo, alpha = tipo)) +
  geom_col(width = 1, position = "identity") +
  annotate(geom = "text", x = 0, y = seq(3, 73, 10), label = seq(20, 90, 10)) +
  scale_x_continuous(
    breaks = seq(-1500, 1500, 500) * 1000,
    labels = paste0(abs(seq(-1500, 1500, 500)), "K")
  ) +
  scale_y_discrete(breaks = seq(0, 100, 10)) + 
  scale_fill_viridis_d(begin = .3, end = .8, option = "C") +
  scale_alpha_manual(values = c(1, .6, .3)) +
  theme_minimal() +
  labs(
    x = "Populao", 
    y = "Idade",
    fill = "",
    alpha = "",
    title = "Vacinao no Brasil",
    caption = fonte
  ) +
  guides(fill = guide_legend(reverse = TRUE)) +
  theme(
    panel.grid.minor = element_blank(),
    axis.text.y = element_blank(),
    legend.position = "top",
    plot.title = element_text(hjust = .5)
  )

Proporcional

dados %>% 
  dplyr::mutate(n = n * ((sexo == "Homem") * 2 -1)) %>% 
  tidyr::pivot_wider(names_from = tipo, values_from = n) %>% 
  janitor::clean_names() %>% 
  dplyr::mutate(
    prop1 = x1a_dose / abs(populacao),
    prop2 = x2a_dose / abs(populacao)
  ) %>% 
  dplyr::select(sexo, idade, prop1, prop2) %>% 
  tidyr::pivot_longer(c(prop1, prop2), names_to = "tipo", values_to = "n") %>% 
  dplyr::mutate(n = pmin(abs(n), 1) * sign(n)) %>% 
  dplyr::mutate(tipo = dplyr::if_else(tipo == "prop1", "1 Dose", "2 Dose")) %>% 
  dplyr::mutate(tipo = forcats::lvls_reorder(tipo, c(2, 1))) %>% 
  ggplot(aes(x = n, y = factor(idade), fill = sexo, alpha = tipo)) +
  geom_col(width = 1, position = "identity") +
  annotate(geom = "text", x = 0, y = seq(3, 73, 10), label = seq(20, 90, 10)) +
  scale_x_continuous(
    breaks = seq(-1, 1, .2),
    labels = scales::percent(abs(seq(-1, 1, .2)))
  ) +
  scale_y_discrete(breaks = seq(0, 100, 10)) + 
  scale_fill_viridis_d(begin = .3, end = .8, option = "C") +
  scale_alpha_manual(values = c(1, .6, .3)) +
  theme_minimal() +
  labs(
    x = "Proporo da populao", 
    y = "Idade",
    fill = "",
    alpha = "",
    title = "Vacinao no Brasil",
    caption = fonte
  ) +
  guides(fill = guide_legend(reverse = TRUE)) +
  theme(
    panel.grid.minor = element_blank(),
    axis.text.y = element_blank(),
    legend.position = "top",
    plot.title = element_text(hjust = .5)
  )

Crditos

A ideia do primeiro grfico foi do professor Elias Krainski, da UFPR

https://twitter.com/eliaskrainski/status/1385056297322696709/photo/1

O que fiz foi apenas reproduzir com todos os cdigos abertos.