O sarampo e a Vacinação no Brasil

Avaliação do impacto das políticas públicas de imunização e a incidência de casos e óbitos de Sarampo no Brasil
Autores

Mariana Lacerda Epiphanio

Mariana Letícia Costa Pedrosa

Júlia Nogueira Gomes

André Luiz Zaidan Martins

Heron Oliveira Hilário

Data de Publicação

15 de novembro de 2025

O Sarampo e a vacinação no Brasil

Carregando pacotes

#instale apenas caso você ainda não tenha o pacote ----
#    DICA: só é preciso instalar cada pacote uma única vez

{
  library(microdatasus)
  library(ggplot2)
  library(tidyverse)
  library(pdftools)
  library(stringr)
  library(ggpubr)
  library(ggridges)
}

Dados da análise

Baixar dados organizados

#conferir diretório de trabalho ----
getwd()
# caso não seja o mesmo dir onde está o seu código, defina corretamente com setwd()

# criar diretórios para os dados e para os resultados ----
dir.create(path = "arquivos")
dir.create(path = "results")


# baixar dados de entrada ----

download.file(
  "https://raw.githubusercontent.com/heronoh/bioinfo/main/aulas/r/arquivos/sarampo--todos_dados.xlsx",
  destfile = "arquivos/sarampo--todos_dados.xlsx",
  mode = "wb",
  method = "libcurl"
  )

Tabela de siglas

# ler dados de entrada ----
## siglas ----
sigla_reg <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                  sheet = "Siglas",
                                  col_names = T,
                                  .name_repair = "unique") %>%
  tibble::tibble()

sigla_reg %>% 
  print(n=100)
# A tibble: 27 × 3
   Região                  `Unidade da Federação` Sigla
   <chr>                   <chr>                  <chr>
 1 "Região\\nCentro-Oeste" Distrito Federal       DF   
 2 "Região\\nCentro-Oeste" Goiás                  GO   
 3 "Região\\nCentro-Oeste" Mato Grosso            MT   
 4 "Região\\nCentro-Oeste" Mato Grosso do Sul     MS   
 5 "Região\\nNordeste"     Alagoas                AL   
 6 "Região\\nNordeste"     Bahia                  BA   
 7 "Região\\nNordeste"     Ceará                  CE   
 8 "Região\\nNordeste"     Maranhão               MA   
 9 "Região\\nNordeste"     Paraíba                PB   
10 "Região\\nNordeste"     Pernambuco             PE   
11 "Região\\nNordeste"     Piauí                  PI   
12 "Região\\nNordeste"     Rio Grande do Norte    RN   
13 "Região\\nNordeste"     Sergipe                SE   
14 "Região\\nNorte"        Acre                   AC   
15 "Região\\nNorte"        Amapá                  AM   
16 "Região\\nNorte"        Amazonas               AP   
17 "Região\\nNorte"        Pará                   PA   
18 "Região\\nNorte"        Rondônia               RO   
19 "Região\\nNorte"        Roraima                RR   
20 "Região\\nNorte"        Tocantins              TO   
21 "Região\\nSudeste"      Espírito Santo         ES   
22 "Região\\nSudeste"      Minas Gerais           MG   
23 "Região\\nSudeste"      Rio de Janeiro         RJ   
24 "Região\\nSudeste"      São Paulo              SP   
25 "Região\\nSul"          Paraná                 PR   
26 "Região\\nSul"          Rio Grande do Sul      RS   
27 "Região\\nSul"          Santa Catarina         SC   

Habitantes por estado e ano

## habitantes ----
habitantes_br <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                  sheet = "Habitantes",
                                  col_names = T,
                                  .name_repair = "unique") %>%
  tibble::tibble() %>%
  rename_with(~ paste0("Ano ",
                       sub("^(\\d{4})$", "\\1", .x)),
              matches("^\\d{4}$")) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with("Ano "),
                      names_to = "Ano",
                      values_to = "Value") %>%
  dplyr::mutate(Ano = str_remove_all(Ano, pattern = "Ano ")) %>%
  dplyr::left_join(y = BiocGenerics::unique(sigla_reg),
                   by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "Habitantes")

habitantes_br
# A tibble: 621 × 6
   `Unidade da Federação` Ano     Value Região                  Sigla Categoria 
   <chr>                  <chr>   <dbl> <chr>                   <chr> <chr>     
 1 Distrito Federal       2001  2097447 "Região\\nCentro-Oeste" DF    Habitantes
 2 Distrito Federal       2002  2145839 "Região\\nCentro-Oeste" DF    Habitantes
 3 Distrito Federal       2003  2189789 "Região\\nCentro-Oeste" DF    Habitantes
 4 Distrito Federal       2004  2282049 "Região\\nCentro-Oeste" DF    Habitantes
 5 Distrito Federal       2005  2333108 "Região\\nCentro-Oeste" DF    Habitantes
 6 Distrito Federal       2006  2383784 "Região\\nCentro-Oeste" DF    Habitantes
 7 Distrito Federal       2008  2557159 "Região\\nCentro-Oeste" DF    Habitantes
 8 Distrito Federal       2009  2606885 "Região\\nCentro-Oeste" DF    Habitantes
 9 Distrito Federal       2010  2570160 "Região\\nCentro-Oeste" DF    Habitantes
10 Distrito Federal       2011  2609998 "Região\\nCentro-Oeste" DF    Habitantes
# ℹ 611 more rows

Doses vacinais por estado e ano

## doses aplicadas ----
doses_sarampo <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                 sheet = "Doses") %>%
  rename_with(~ str_remove(.x, "\\.0$"), matches("^\\d{4}\\.0$")) %>%
  dplyr::mutate(
    dplyr::across(
      dplyr::matches("^\\d{4}$"),
      ~ as.numeric(stringr::str_replace_all(as.character(.), ",", "."))
    )
  ) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with(c("1","2")),
                      names_to = "Ano",
                      values_to = "Value")  %>%
  dplyr::left_join(y = BiocGenerics::unique(sigla_reg),
                   by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "num doses")

doses_sarampo
# A tibble: 783 × 6
   `Unidade da Federação` Ano     Value Região           Sigla Categoria
   <chr>                  <chr>   <dbl> <chr>            <chr> <chr>    
 1 Acre                   1994   247271 "Região\\nNorte" AC    num doses
 2 Acre                   1995   532068 "Região\\nNorte" AC    num doses
 3 Acre                   1996   381238 "Região\\nNorte" AC    num doses
 4 Acre                   1997   750997 "Região\\nNorte" AC    num doses
 5 Acre                   1998   613288 "Região\\nNorte" AC    num doses
 6 Acre                   1999  2095997 "Região\\nNorte" AC    num doses
 7 Acre                   2000   897103 "Região\\nNorte" AC    num doses
 8 Acre                   2001   803376 "Região\\nNorte" AC    num doses
 9 Acre                   2002   730728 "Região\\nNorte" AC    num doses
10 Acre                   2003   721201 "Região\\nNorte" AC    num doses
# ℹ 773 more rows

1ª Dose - Cobertura vacinal por estado e ano

## cobertura 1a dose ----
cov_1a_dose <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                    sheet = "cobertura 1a dose",
                                 col_names = T,
                                 .name_repair = "unique"
                                 ) %>%
  rename_with(~ str_remove(.x, "\\.0$"), matches("^\\d{4}\\.0$")) %>%
  mutate(
    across(
      matches("^\\d{4}$"),
      ~ as.numeric(str_replace_all(as.character(.), ",", "."))
    )
  ) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with(c("1","2")),
                      names_to = "Ano",
                      values_to = "Value") %>%
  dplyr::left_join(y = BiocGenerics::unique(sigla_reg),
                   by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "cov 1a dose")

cov_1a_dose
# A tibble: 621 × 6
   `Unidade da Federação` Ano   Value Região           Sigla Categoria  
   <chr>                  <chr> <dbl> <chr>            <chr> <chr>      
 1 Acre                   2003   99.4 "Região\\nNorte" AC    cov 1a dose
 2 Acre                   2004  123.  "Região\\nNorte" AC    cov 1a dose
 3 Acre                   2005   95.1 "Região\\nNorte" AC    cov 1a dose
 4 Acre                   2006   90.8 "Região\\nNorte" AC    cov 1a dose
 5 Acre                   2007  109.  "Região\\nNorte" AC    cov 1a dose
 6 Acre                   2008   94.2 "Região\\nNorte" AC    cov 1a dose
 7 Acre                   2009  103.  "Região\\nNorte" AC    cov 1a dose
 8 Acre                   2010   96.9 "Região\\nNorte" AC    cov 1a dose
 9 Acre                   2011  105.  "Região\\nNorte" AC    cov 1a dose
10 Acre                   2012   90.3 "Região\\nNorte" AC    cov 1a dose
# ℹ 611 more rows

2ª Dose - Cobertura vacinal por estado e ano

## cobertura 2a dose ----
cov_2a_dose <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                    sheet = "cobertura 2a dose",
                                 col_names = T,
                                 .name_repair = "unique"
                                 ) %>%
  rename_with(~ str_remove(.x, "\\.0$"), matches("^\\d{4}\\.0$")) %>%
  mutate(
    across(
      matches("^\\d{4}$"),
      ~ as.numeric(str_replace_all(as.character(.), ",", "."))
    )
  ) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with(c("1","2")),
                      names_to = "Ano",
                      values_to = "Value") %>%
  dplyr::left_join(y = BiocGenerics::unique(sigla_reg),
                   by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "cov 2a dose")

cov_2a_dose
# A tibble: 351 × 6
   `Unidade da Federação` Ano   Value Região           Sigla Categoria  
   <chr>                  <chr> <dbl> <chr>            <chr> <chr>      
 1 Acre                   2013   27.1 "Região\\nNorte" AC    cov 2a dose
 2 Acre                   2014   61.6 "Região\\nNorte" AC    cov 2a dose
 3 Acre                   2015   51.7 "Região\\nNorte" AC    cov 2a dose
 4 Acre                   2016   64.2 "Região\\nNorte" AC    cov 2a dose
 5 Acre                   2017   57   "Região\\nNorte" AC    cov 2a dose
 6 Acre                   2018   71.9 "Região\\nNorte" AC    cov 2a dose
 7 Acre                   2019   78.6 "Região\\nNorte" AC    cov 2a dose
 8 Acre                   2020   41.2 "Região\\nNorte" AC    cov 2a dose
 9 Acre                   2021   26.0 "Região\\nNorte" AC    cov 2a dose
10 Acre                   2022   37.3 "Região\\nNorte" AC    cov 2a dose
# ℹ 341 more rows

Óbitos por estado e ano

## óbitos ----
obitos_sarampo <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                    sheet = "Óbitos",
                                 col_names = T,
                                 .name_repair = "unique"
                                 ) %>%
  rename_with(~ paste0("", sub("^(\\d{4})$", "\\1", .x)), matches("^\\d{4}$")) %>%
  tibble::tibble() %>%
  dplyr::mutate(
    dplyr::across(
      dplyr::matches("^\\d{4}$"),
      ~ as.numeric(stringr::str_replace_all(as.character(.), ",", "."))
    )
  ) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with(c("1","2")),
                      names_to = "Ano",
                      values_to = "Value") %>%
  dplyr::mutate(Ano = str_remove_all(Ano, pattern = "Ano ")) %>%
  dplyr::left_join(y = sigla_reg,
            by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "Óbitos")

obitos_sarampo
# A tibble: 972 × 6
   `Unidade da Federação` Ano   Value Região           Sigla Categoria
   <chr>                  <chr> <dbl> <chr>            <chr> <chr>    
 1 Rondônia               1990      6 "Região\\nNorte" RO    Óbitos   
 2 Rondônia               1991      1 "Região\\nNorte" RO    Óbitos   
 3 Rondônia               1992      0 "Região\\nNorte" RO    Óbitos   
 4 Rondônia               1993      0 "Região\\nNorte" RO    Óbitos   
 5 Rondônia               1994      0 "Região\\nNorte" RO    Óbitos   
 6 Rondônia               1995      0 "Região\\nNorte" RO    Óbitos   
 7 Rondônia               1996      0 "Região\\nNorte" RO    Óbitos   
 8 Rondônia               1997      0 "Região\\nNorte" RO    Óbitos   
 9 Rondônia               1998      0 "Região\\nNorte" RO    Óbitos   
10 Rondônia               1999      0 "Região\\nNorte" RO    Óbitos   
# ℹ 962 more rows

casos por estado e ano

## casos ----
casos_sarampo <- readxl::read_xlsx(path = "arquivos/sarampo--todos_dados.xlsx",
                                    sheet = "Casos",
                                 col_names = T,
                                 .name_repair = "unique"
                                 ) %>%
  rename_with(~ paste0("", sub("^(\\d{4})$", "\\1", .x)), matches("^\\d{4}$")) %>%
  tibble::tibble() %>%
  dplyr::mutate(
    dplyr::across(
      dplyr::matches("^\\d{4}$"),
      ~ as.numeric(stringr::str_replace_all(as.character(.), ",", "."))
    )
  ) %>%
  tidyr::pivot_longer(cols = dplyr::starts_with(c("1","2")),
                      names_to = "Ano",
                      values_to = "Value") %>%
  dplyr::mutate(Ano = str_remove_all(Ano, pattern = "Ano ")) %>%
  dplyr::left_join(y = sigla_reg,
            by = "Unidade da Federação")  %>%
  dplyr::mutate("Categoria" = "casos")

casos_sarampo
# A tibble: 972 × 6
   `Unidade da Federação` Ano   Value Região           Sigla Categoria
   <chr>                  <chr> <dbl> <chr>            <chr> <chr>    
 1 Rondônia               1990    165 "Região\\nNorte" RO    casos    
 2 Rondônia               1991    211 "Região\\nNorte" RO    casos    
 3 Rondônia               1992     48 "Região\\nNorte" RO    casos    
 4 Rondônia               1993     71 "Região\\nNorte" RO    casos    
 5 Rondônia               1994     35 "Região\\nNorte" RO    casos    
 6 Rondônia               1995     23 "Região\\nNorte" RO    casos    
 7 Rondônia               1996      7 "Região\\nNorte" RO    casos    
 8 Rondônia               1997     17 "Região\\nNorte" RO    casos    
 9 Rondônia               1998     22 "Região\\nNorte" RO    casos    
10 Rondônia               1999      1 "Região\\nNorte" RO    casos    
# ℹ 962 more rows

Combinar tabelas

# juntar tabelas e renomear categorias ----
dados_sarampo <- bind_rows(cov_1a_dose,
                           cov_2a_dose,
                           doses_sarampo,
                           obitos_sarampo,
                           casos_sarampo,
                           habitantes_br) %>%
  dplyr::mutate(Ano = as.numeric(Ano)) %>% 
  dplyr::mutate(Região = stringr::str_replace_all(Região,
                                                  pattern = "\\\\n",
                                                  replacement ="\\\n")) 

dados_sarampo %>%
  dplyr::select(-c(Ano,Value,Categoria)) %>%
  BiocGenerics::unique() %>% 
  print(n=100)
# A tibble: 27 × 3
   `Unidade da Federação` Região                 Sigla
   <chr>                  <chr>                  <chr>
 1 Acre                   "Região\nNorte"        AC   
 2 Alagoas                "Região\nNordeste"     AL   
 3 Amapá                  "Região\nNorte"        AM   
 4 Amazonas               "Região\nNorte"        AP   
 5 Bahia                  "Região\nNordeste"     BA   
 6 Ceará                  "Região\nNordeste"     CE   
 7 Distrito Federal       "Região\nCentro-Oeste" DF   
 8 Espírito Santo         "Região\nSudeste"      ES   
 9 Goiás                  "Região\nCentro-Oeste" GO   
10 Maranhão               "Região\nNordeste"     MA   
11 Mato Grosso            "Região\nCentro-Oeste" MT   
12 Mato Grosso do Sul     "Região\nCentro-Oeste" MS   
13 Minas Gerais           "Região\nSudeste"      MG   
14 Pará                   "Região\nNorte"        PA   
15 Paraíba                "Região\nNordeste"     PB   
16 Paraná                 "Região\nSul"          PR   
17 Pernambuco             "Região\nNordeste"     PE   
18 Piauí                  "Região\nNordeste"     PI   
19 Rio de Janeiro         "Região\nSudeste"      RJ   
20 Rio Grande do Norte    "Região\nNordeste"     RN   
21 Rio Grande do Sul      "Região\nSul"          RS   
22 Rondônia               "Região\nNorte"        RO   
23 Roraima                "Região\nNorte"        RR   
24 Santa Catarina         "Região\nSul"          SC   
25 São Paulo              "Região\nSudeste"      SP   
26 Sergipe                "Região\nNordeste"     SE   
27 Tocantins              "Região\nNorte"        TO   
dados_sarampo %>%
  # dplyr::select(-c(Ano,Value,Categoria)) %>%
  # BiocGenerics::unique() %>%
  dplyr::filter(!is.na(Value)) %>% 
  dplyr::group_by(Categoria) %>% 
  dplyr::summarise( "Num observações" = length(Categoria),
                    "Ano de iníco" = min(Ano),
                    "Ano de fim" = max(Ano)) 
# A tibble: 6 × 4
  Categoria   `Num observações` `Ano de iníco` `Ano de fim`
  <chr>                   <int>          <dbl>        <dbl>
1 Habitantes                621           2001         2025
2 casos                     972           1990         2025
3 cov 1a dose               621           2003         2025
4 cov 2a dose               351           2013         2025
5 num doses                 783           1994         2022
6 Óbitos                    972           1990         2025

Visualizar cobertura temporal

plot_dados_panorama <- dados_sarampo %>% 
  dplyr::mutate(Categoria = dplyr::case_when(
    Categoria %in% c("cov 2a dose") ~ "Cobertura\nda2ª dose",
    Categoria %in% c("cov 1a dose") ~ "Cobertura\nda1ª dose",
    Categoria %in% c("num doses") ~ "Nº de\ndoses",
    Categoria %in% c("Óbitos") ~ "Nº de óbitos",
    Categoria %in% c("casos") ~ "Nº de casos",
    Categoria %in% c("Habitantes") ~ "Nº de habitantes")) %>%
  # dplyr::select(-c(Ano,Value,Categoria)) %>%
  # BiocGenerics::unique() %>%
  dplyr::filter(!is.na(Value)) %>% 
  dplyr::group_by(Categoria, `Unidade da Federação`) %>% 
  ggplot(aes(y = `Unidade da Federação`,
                x = Categoria,
                fill = Categoria)) +
  geom_tile(width = 0.75,
            height = 0.75) +
  facet_grid(cols = vars(Ano),
             rows = vars(`Região`),
             scales = "free_y",
             space = "free_y"
             # axes = "all_x"
             ) +
  scale_fill_manual(values = viridis::turbo(n=8)[2:7]) +
  # scale_x_continuous(breaks = seq(1990,2025,1)) +
    theme(strip.text.y = element_text(angle = 0),
          axis.text.y = element_text(size = 10),
          axis.text.x = element_blank(),
          axis.title.x = element_blank(),
          axis.ticks.x = element_blank()) +
  # coord_equal() +
  guides(fill = guide_legend(nrow = 1)) +
  theme(legend.position = "bottom")
  

plot_dados_panorama

ggsave(plot = plot_dados_panorama,
       filename = "results/plot_dados_panorama.png",
       device = "png",
       units = "cm",
       dpi = 600,
       height = 14,
       width = 52,
      )

Transformar dado par ao formato amplo (wide)

# tabela wide ----

dados_sarampo_wide <- dados_sarampo %>%
  tidyr::pivot_wider(id_cols = c("Sigla", "Unidade da Federação", "Ano", "Região"),
                     names_from = "Categoria",
                     values_from = "Value") %>%
  dplyr::mutate("Casos por Milhão" = casos/Habitantes*1000000,
                "Óbitos por Milhão" = `Óbitos`/Habitantes*1000000)



dados_sarampo_wide %>% write_csv(file = "arquivos/dados_sarampo_wide.csv",
                                 col_names = T)

Análises gráficas

Configurações

#Gráficos ----
## Configurações ----
#Função para visualizar decimais apenas para valores menores que 1 
label_condicional <- function(x) {
sapply(x, function(val) if (val < 1) formatC(val, format = "f", digits = 2) else formatC(val, format = "f", digits = 0))
}

Gráfico

Gráfico

Gráfico

Casos e óbitos após anos de vacinação

Casos após N anos de vacinação

tbl_lag_pearson_casos <- tibble::tibble()
tbl_lag_spearman_casos <- tibble::tibble()


for (LAG in 0:4) {
  

## cobertura vacinal 2 anos antes dos casos ----
dados_sarampo_wide_N_anos <- dados_sarampo_wide %>%
  tidyr::pivot_longer(cols =  c("cov 1a dose", "cov 2a dose", "num doses", "Óbitos", "casos", "Habitantes", "Casos por Milhão","Óbitos por Milhão"),
                      names_to = "Categoria",
                      values_to  = "Value") %>%
  dplyr::mutate(Ano = dplyr::case_when(Categoria %in% c("cov 1a dose", "cov 2a dose") ~ Ano - LAG,
                                       TRUE ~ Ano)) %>%
  tidyr::pivot_wider(id_cols = c("Sigla", "Unidade da Federação", "Ano", "Região"),
                     names_from = "Categoria",
                     values_from = "Value")


# correlação com o teste de spearman ----
message(paste0("Realizando o teste de Spearman para ", LAG, " anos"))

spearman_test <- cor.test(
  log10(dados_sarampo_wide_N_anos$`Casos por Milhão`[dados_sarampo_wide_N_anos$casos > 0]),
  dados_sarampo_wide_N_anos$`cov 1a dose`[dados_sarampo_wide_N_anos$casos > 0],
  method = "spearman"
)


spearman_reult <- tibble(
  "Categoria" = "Casos",
  "Teste" = "Spearman",
  "Vacinação N anos antes" = LAG,
  "Valor (S)" = spearman_test$statistic,
  "Significância (Valor p)" = spearman_test$p.value,
  "Correlação (rho)" = spearman_test$estimate,
  "Graus de liberdade" = spearman_test$parameter
)


tbl_lag_spearman_casos <- bind_rows(tbl_lag_spearman_casos,spearman_reult)

# correlação com o teste de pearson ----
message(paste0("Realizando o teste de Pearson para ", LAG, " anos"))

pearson_test <- cor.test(
  log10(dados_sarampo_wide_N_anos$`Casos por Milhão`[dados_sarampo_wide_N_anos$casos > 0]),
  dados_sarampo_wide_N_anos$`cov 1a dose`[dados_sarampo_wide_N_anos$casos > 0],
  method = "pearson"
)

pearson_reult <- tibble(
  "Categoria" = "Casos",
  "Teste" = "Pearson",
  "Vacinação N anos antes" = LAG,
  "Valor (t)" = pearson_test$statistic,
  "Significância (Valor p)" = pearson_test$p.value,
  "Correlação (cor)" = pearson_test$estimate,
  "Graus de liberdade" = pearson_test$parameter
)

tbl_lag_pearson_casos <- bind_rows(tbl_lag_pearson_casos,pearson_reult)


}


tbl_lag_spearman_casos
# A tibble: 5 × 6
  Categoria Teste    `Vacinação N anos antes` `Valor (S)` Significância (Valor…¹
  <chr>     <chr>                       <int>       <dbl>                  <dbl>
1 Casos     Spearman                        0     232458             0.0361     
2 Casos     Spearman                        1     251266             0.0000129  
3 Casos     Spearman                        2     242614             0.000000201
4 Casos     Spearman                        3     219382             0.000316   
5 Casos     Spearman                        4     155750.            0.385      
# ℹ abbreviated name: ¹​`Significância (Valor p)`
# ℹ 1 more variable: `Correlação (rho)` <dbl>
tbl_lag_pearson_casos
# A tibble: 5 × 7
  Categoria Teste   `Vacinação N anos antes` `Valor (t)` Significância (Valor …¹
  <chr>     <chr>                      <int>       <dbl>                   <dbl>
1 Casos     Pearson                        0       -1.81            0.0739      
2 Casos     Pearson                        1       -4.34            0.0000339   
3 Casos     Pearson                        2       -5.78            0.0000000915
4 Casos     Pearson                        3       -3.73            0.000321    
5 Casos     Pearson                        4       -1.35            0.181       
# ℹ abbreviated name: ¹​`Significância (Valor p)`
# ℹ 2 more variables: `Correlação (cor)` <dbl>, `Graus de liberdade` <int>

Óbitos após N anos de vacinação

tbl_lag_pearson_obitos <- tibble::tibble()
tbl_lag_spearman_obitos <- tibble::tibble()


for (LAG in 0:4) {
  

## cobertura vacinal 2 anos antes dos casos ----
dados_sarampo_wide_N_anos <- dados_sarampo_wide %>%
  tidyr::pivot_longer(cols =  c("cov 1a dose", "cov 2a dose", "num doses", "Óbitos", "casos", "Habitantes", "Casos por Milhão","Óbitos por Milhão"),
                      names_to = "Categoria",
                      values_to  = "Value") %>%
  dplyr::mutate(Ano = dplyr::case_when(Categoria %in% c("cov 1a dose", "cov 2a dose") ~ Ano - LAG,
                                       TRUE ~ Ano)) %>%
  tidyr::pivot_wider(id_cols = c("Sigla", "Unidade da Federação", "Ano", "Região"),
                     names_from = "Categoria",
                     values_from = "Value")


# correlação com o teste de spearman ----
message(paste0("Realizando o teste de Spearman para ", LAG, " anos"))

spearman_test <- cor.test(
  log10(dados_sarampo_wide_N_anos$`Óbitos por Milhão`[dados_sarampo_wide_N_anos$Óbitos > 0]),
  dados_sarampo_wide_N_anos$`cov 1a dose`[dados_sarampo_wide_N_anos$Óbitos > 0],
  method = "spearman"
)


spearman_reult <- tibble(
  "Categoria" = "Óbitos",
  "Teste" = "Spearman",
  "Vacinação N anos antes" = LAG,
  "Valor (S)" = spearman_test$statistic,
  "Graus de liberdade" = spearman_test$parameter,
  "Significância (Valor p)" = spearman_test$p.value,
  "Correlação (rho)" = spearman_test$estimate,
  "Graus de liberdade" = spearman_test$parameter
)


tbl_lag_spearman_obitos <- bind_rows(tbl_lag_spearman_obitos,spearman_reult)

# correlação com o teste de pearson ----
message(paste0("Realizando o teste de Pearson para ", LAG, " anos"))

pearson_test <- cor.test(
  log10(dados_sarampo_wide_N_anos$`Óbitos por Milhão`[dados_sarampo_wide_N_anos$Óbitos > 0]),
  dados_sarampo_wide_N_anos$`cov 1a dose`[dados_sarampo_wide_N_anos$Óbitos > 0],
  method = "pearson"
)

pearson_reult <- tibble(
  "Categoria" = "Óbitos",
  "Teste" = "Pearson",
  "Vacinação N anos antes" = LAG,
  "Valor (t)" = pearson_test$statistic,
  "Significância (Valor p)" = pearson_test$p.value,
  "Correlação (cor)" = pearson_test$estimate,
  "Graus de liberdade" = pearson_test$parameter
)

tbl_lag_pearson_obitos <- bind_rows(tbl_lag_pearson_obitos,pearson_reult)


}


tbl_lag_spearman_obitos
# A tibble: 5 × 6
  Categoria Teste    `Vacinação N anos antes` `Valor (S)` Significância (Valor…¹
  <chr>     <chr>                       <int>       <dbl>                  <dbl>
1 Óbitos    Spearman                        0         608                 0.240 
2 Óbitos    Spearman                        1         502                 0.727 
3 Óbitos    Spearman                        2         634                 0.165 
4 Óbitos    Spearman                        3         656                 0.116 
5 Óbitos    Spearman                        4         736                 0.0213
# ℹ abbreviated name: ¹​`Significância (Valor p)`
# ℹ 1 more variable: `Correlação (rho)` <dbl>
tbl_lag_pearson_obitos
# A tibble: 5 × 7
  Categoria Teste   `Vacinação N anos antes` `Valor (t)` Significância (Valor …¹
  <chr>     <chr>                      <int>       <dbl>                   <dbl>
1 Óbitos    Pearson                        0      -1.20                   0.252 
2 Óbitos    Pearson                        1      -0.943                  0.364 
3 Óbitos    Pearson                        2      -1.82                   0.0936
4 Óbitos    Pearson                        3      -1.86                   0.0875
5 Óbitos    Pearson                        4      -2.01                   0.0677
# ℹ abbreviated name: ¹​`Significância (Valor p)`
# ℹ 2 more variables: `Correlação (cor)` <dbl>, `Graus de liberdade` <int>

Gráfico

tibble::tibble(
  "Estatística" = c(
    tbl_lag_spearman_casos$Categoria,
    tbl_lag_pearson_casos$Categoria,
    tbl_lag_spearman_obitos$Categoria,
    tbl_lag_pearson_obitos$Categoria),
  "Anos antes" = c(
    tbl_lag_spearman_casos$`Vacinação N anos antes`,
    tbl_lag_pearson_casos$`Vacinação N anos antes`,
    tbl_lag_spearman_obitos$`Vacinação N anos antes`,
    tbl_lag_pearson_obitos$`Vacinação N anos antes`),
  "Teste" = c(
    tbl_lag_spearman_casos$Teste,
    tbl_lag_pearson_casos$Teste,
    tbl_lag_spearman_obitos$Teste,
    tbl_lag_pearson_obitos$Teste),
  "Correlação" = c(
    tbl_lag_spearman_casos$`Correlação (rho)`,
    tbl_lag_pearson_casos$`Correlação (cor)`,
    tbl_lag_spearman_obitos$`Correlação (rho)`,
    tbl_lag_pearson_obitos$`Correlação (cor)`),
  "Significância" = c(
  tbl_lag_spearman_casos$`Significância (Valor p)`,
  tbl_lag_pearson_casos$`Significância (Valor p)`,
  tbl_lag_spearman_obitos$`Significância (Valor p)`,
  tbl_lag_pearson_obitos$`Significância (Valor p)`)) %>% 
  ggplot2::ggplot(aes(x = `Anos antes`,
                      y = `Correlação`,
                      group = Teste,
                      fill = log10(`Significância`))) +
  geom_bar(stat = "identity",
           position = "dodge") +
  facet_grid(rows = vars(`Estatística`),
             cols = vars(Teste)) +
  scale_fill_gradientn(colors = rev(viridis::magma(n=100)[1:90]))

# 

Casos após 2 anos de vacinação

dose1_x_casos_por_milhao_plot <- dados_sarampo_wide %>%
  tidyr::pivot_longer(cols =  c("cov 1a dose", "cov 2a dose", "num doses", "Óbitos", "casos", "Habitantes", "Casos por Milhão","Óbitos por Milhão"),
                      names_to = "Categoria",
                      values_to  = "Value") %>%
  dplyr::mutate(Ano = dplyr::case_when(Categoria %in% c("cov 1a dose", "cov 2a dose") ~ Ano-2,
                                       TRUE ~ Ano)) %>%
  tidyr::pivot_wider(id_cols = c("Sigla", "Unidade da Federação", "Ano", "Região"),
                     names_from = "Categoria",
                     values_from = "Value") %>%
  # dplyr::filter(!`casos` %in% c(0)) %>%
  dplyr::filter(!is.na(Habitantes)) %>%
  ggplot(aes(x = `cov 1a dose` ,
             y = `Casos por Milhão`)) +
  geom_point(aes(col = `Unidade da Federação`,
                 shape = Região)) +
  geom_smooth(method = "lm")+
  stat_regline_equation(label.x=120, label.y=3.5)+
  stat_cor(label.x=120, label.y=3.75) +
  labs(
    title = "Correlação entre casos de Sarampo e cobertura vacinal",
    x = "Cobertura da 1ª dose vacinal",
    y = "Casos por Milhão de habitantes",
    subtitle = "Correlação realizada entre o número de casos de um dado ano e a cobertura vacinal de 2 anos anteriores"
  ) +
  scale_colour_manual(values = viridis::turbo(n=27))  +
  scale_y_continuous(trans = "log10",
                     breaks = c(0.1,0.25,0.5,0.75,1,2.5,5,10,25,50,100,250,500,1000,2500, 5000,10000),
                     labels = label_condicional) +
  theme_bw() +
  theme(
    # legend.position = "bottom",
        legend.location = "plot",
        
        legend.direction = "vertical", 
  legend.text = element_text(size = 6),
  legend.title = element_text(size = 8, face = "bold"))


ggsave(plot = dose1_x_casos_por_milhao_plot,
       filename = "results/plot_corr_1aDose_Casos2Anos.png",
       device = "png",
       units = "cm",
       dpi = 600,
       height = 16,
       width = 24,
      )

Casos e cobertura por estado e ano

tile_cov_casos_plot <- ggplot() +
    # geom_tile(data = dplyr::filter(dados_sarampo_wide,  `Casos por Milhão` != 0),
    geom_tile(data = dados_sarampo_wide %>% dplyr::mutate(`Casos por Milhão` = case_when(`Casos por Milhão` == 0 ~ NA,
                                                                                         TRUE ~ (`Casos por Milhão`))) %>% 
                filter(Ano >= 2000),
              aes(x = Ano,
                  y = `Unidade da Federação`,
                  fill = `Casos por Milhão`,
                  group = `Unidade da Federação`),
              width = 0.5,
              height = 0.5) +
    scale_fill_gradientn(colours = RColorBrewer::brewer.pal(name = "Reds", n = 9 )[3:9],na.value = "#ffffff") +
    geom_tile(data = dplyr::filter(dados_sarampo_wide,  Ano >= 2000),
    # geom_tile(data = dplyr::filter(dados_sarampo_wide,  `cov 1a dose` <= 90),
    # geom_tile(data = dados_sarampo_wide,
              aes(x = Ano,
                  y = `Unidade da Federação`,
                  col = `cov 1a dose`,
                  group = `Unidade da Federação`),
              alpha = 0.5,
              fill = NA,
              linewidth = .75,
              width = 0.75,
              height = 0.75) +
    # scale_colour_gradientn(colours = rev(viridis::turbo(n=10))[1:6],
    # scale_colour_gradientn(colours = c("darkred",rev(viridis::turbo(n=8))[1:6],"lightblue","darkblue"),
    scale_colour_gradientn(colours = c("darkred","red","orange","yellow","#00ff00","darkgreen","#003300"),
                           breaks = c(50,75,90,100,125,150),
                           values = scales::rescale(x = c(50,60,75,90,100,125,150),
                                                    to = c(0,1)),
                           na.value = "#dddddd",
                           name = "Cobertura\nda 1ª dose") +
    geom_point(data = dplyr::filter(dados_sarampo_wide,  `Óbitos por Milhão` > 0),
              aes(x = Ano,
                  y = `Unidade da Federação`,
                  size = `Óbitos por Milhão`,
                  group = `Unidade da Federação`),
              col = "#dd2222",
              alpha = 0.5) +
    facet_grid(rows = vars(`Região`),
               axes = "all_x",
               space = "free",
               scales = "free",
               drop = T) +
    theme_bw() +
    theme(strip.text.y = element_text(angle = 0),
          axis.text.x = element_text(size = 6)) +
    scale_x_continuous(breaks = seq(2000,2025,1),expand = c(0.01,0.01)) +
    geom_vline(xintercept = 2019.5,linetype = "dashed") +
  labs(
    title = "Casos e óbitos por Sarampo e cobertura vacinal da 1ª dose") 
  
  
  
  
  
  

ggsave(plot = tile_cov_casos_plot,
       filename = "results/tile_cov_casos_plot.png",
       device = "png",
       units = "cm",
       dpi = 600,
       height = 24,
       width = 32,
      )