SINAN: 2003

Grupo 07

2023-07-26


Carrega as bibliotecas

if(!require(pacman)) install.packages('pacman')
library(pacman)

pacman::p_load(tidyverse, prettydoc, gtsummary, Amelia, naniar, gt, scales, RColorBrewer, geobr, sf, ggthemes, lubridate)

Carrega os dados

# sinan_raw <- read_csv('../data/myturn_sinan.csv', col_select = c(-"...1"))
sinan_raw <- read_csv('../data/sinan_chagas_2003.csv')
populacao <- read_csv('../data/populacao.csv')
municipios <- read_csv('../data/municipios.csv', col_select = c("Codigo", "Nome", "Uf"))

Limpeza e organização

Para fazer a recodificação dos valores de algumas variáveis, vamos adaptar uma função do pacote {microdatasus}.

recode_sinan_chagas <- function(data){
  # Colunas
  variables_names <- names(data)

  # DT_NOTIFIC
  if ("DT_NOTIFIC" %in% variables_names) {
    data$DT_NOTIFIC <- as.Date(data$DT_NOTIFIC)
  }
  
  # CS_SEXO
  if ("CS_SEXO" %in% variables_names) {
    data$CS_SEXO[data$CS_SEXO == "M"] <- "Masculino"
    data$CS_SEXO[data$CS_SEXO == "F"] <- "Feminino"
    data$CS_SEXO[data$CS_SEXO == "I"] <- "Ignorado"
  }
  
  # CS_RACA
  if ("CS_RACA" %in% variables_names) {
    data$CS_RACA[data$CS_RACA == "1"] <- "Branca"
    data$CS_RACA[data$CS_RACA == "2"] <- "Preta"
    data$CS_RACA[data$CS_RACA == "3"] <- "Amarela"
    data$CS_RACA[data$CS_RACA == "4"] <- "Parda"
    data$CS_RACA[data$CS_RACA == "5"] <- "Ind\u00edgena"
    data$CS_RACA[data$CS_RACA == "9"] <- "Ignorado"
  }
  
  # CS_ESCOLAR
  if ("CS_ESCOLAR" %in% variables_names) {
    data$CS_ESCOLAR[data$CS_ESCOLAR == "0"] <- "Ignorado"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "1"] <- "1a a 4a s\u00e9rie incompleta do EF"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "2"] <- "4a s\u00e9rie completa do EF"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "3"] <- "5a \u00e0 8a s\u00e9rie incompleta do EF"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "4"] <- "Ensino fundamental completo"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "5"] <- "Ensino m\u00e9dio incompleto"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "6"] <- "Ensino m\u00e9dio completo"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "7"] <- "Educa\u00e7\u00e3o superior incompleta"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "8"] <- "Educa\u00e7\u00e3o superior completa"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "9"] <- "Ignorado"
    data$CS_ESCOLAR[data$CS_ESCOLAR == "10"] <- "N\u00e3o se aplica"
  }
  
  # CONFIRMAD
  if ("CONFIRMAD" %in% variables_names) {
    data$CONFIRMAD[data$CONFIRMAD == "1"] <- "Confirmado"
    data$CONFIRMAD[data$CONFIRMAD == "2"] <- "Descartado"
    data$CONFIRMAD[data$CONFIRMAD == "9"] <- "Inconclusivo"
  }

  # Return
  return(data)
}

Seleciona variáveis de interesse.

sinan <- sinan_raw %>% 
  select(DT_NOTIFIC, SG_UF, ID_MN_RESI, CS_SEXO, CS_RACA, CS_ESCOLAR,
         CONFIRMAD)
sinan <- recode_sinan_chagas(sinan)

Faz a junção dos dataframes.

muni_pop <- left_join(municipios, populacao, by=c('Codigo'='MUNIC_RES')) %>% 
  select(-"ANO", -"Uf")

sinan <- left_join(sinan, muni_pop, by = c('ID_MN_RESI'='Codigo'))

Renomeia as variáveis.

sinan <- sinan %>% 
  rename(data = DT_NOTIFIC,
         uf = SG_UF,
         cod_municipio = ID_MN_RESI,
         sexo = CS_SEXO,
         raca = CS_RACA,
         escolaridade = CS_ESCOLAR,
         classificacao = CONFIRMAD,
         municipio = Nome,
         populacao = POPULACAO)

Reordena os níveis de “Escolaridade”, variável categórica ordinal.

# Ordena os níveis
sinan$escolaridade <- factor(sinan$escolaridade,
                             levels = c("1a a 4a série incompleta do EF", "4a série completa do EF",
                                        "5a à 8a série incompleta do EF", "Ensino fundamental completo",
                                        "Ensino médio incompleto", "Ensino médio completo"),
                             ordered = TRUE)

Qualidade

Dados ausentes

sinan %>%  
  miss_var_summary() %>% 
  gt()
variable n_miss pct_miss
classificacao 737 32.5673884
escolaridade 589 26.0273973
raca 297 13.1241715
uf 3 0.1325674
cod_municipio 3 0.1325674
municipio 3 0.1325674
populacao 3 0.1325674
data 0 0.0000000
sexo 0 0.0000000

A variável com mais valores ausentes é “Classificação”, com cerca de 33%.

Dados duplicados

sum(duplicated(sinan_raw))
## [1] 0

Não há observações duplicadas na base original.

Exploração dos dados

# Primeiras 6 linhas da base de dados
sinan %>%
  head() %>% 
  gt()
data uf cod_municipio sexo raca escolaridade classificacao municipio populacao
2003-06-20 AL 2708105 Masculino Amarela NA NA Santana do Mundaú 10637
2003-06-04 AL 2708402 Feminino Preta 4a série completa do EF Descartado São José da Tapera 32462
2003-12-01 AL 2708600 Masculino Branca 5a à 8a série incompleta do EF Confirmado São Miguel dos Campos 62328
2003-04-15 AL 2709301 Masculino Parda NA Confirmado União dos Palmares 65963
2003-05-12 AL 2709301 Masculino Parda NA Descartado União dos Palmares 65963
2003-05-08 AL 2709301 Feminino NA NA Descartado União dos Palmares 65963

Raça e sexo

sinan %>% 
  tbl_summary(include = c(raca, sexo), 
              by = classificacao,
              sort = all_categorical() ~ "frequency") %>% 
  add_n() %>% 
  modify_header(label = "**Variável**") %>% 
  bold_labels()
Variável N Confirmado, N = 3521 Descartado, N = 9161 Inconclusivo, N = 2581
raca 1,400
    Parda 165 (49%) 366 (45%) 126 (51%)
    Branca 119 (35%) 323 (39%) 72 (29%)
    Preta 42 (13%) 87 (11%) 11 (4.5%)
    Ignorado 2 (0.6%) 22 (2.7%) 33 (13%)
    Indígena 2 (0.6%) 14 (1.7%) 1 (0.4%)
    Amarela 6 (1.8%) 6 (0.7%) 3 (1.2%)
    Unknown 16 98 12
sexo 1,526
    Feminino 188 (53%) 452 (49%) 132 (51%)
    Masculino 164 (47%) 463 (51%) 126 (49%)
    Ignorado 0 (0%) 1 (0.1%) 0 (0%)
1 n (%)

Escolaridade

plot_escol <- sinan %>% 
  filter(!is.na(escolaridade) & escolaridade != "Ignorado") %>%
  count(escolaridade) %>%
  mutate(pct = n / sum(n),
         pct_label = paste0(round(pct*100), "%"))


ggplot(plot_escol, 
       aes(x = escolaridade,
           y = pct)) + 
  geom_col(fill = "indianred3", 
           color = "black") +
  geom_text(aes(label = pct_label), 
            hjust = -0.25) +
  scale_y_continuous(labels = percent) +
  labs(x = "", 
       y = "", 
       title  = "Grau de instrução dos pacientes") +
  coord_flip() +
  theme_classic()

97% das notificações foram de pacientes com apenas o ensino fundamental completo.

Distribuição espacial

estados <- read_state(showProgress = FALSE)
ext_oranges <- colorRampPalette(brewer.pal(9, "Oranges"), interpolate = "spline")

plot_state <- sinan %>% 
  group_by(uf) %>% 
  summarise(n=n()) %>% 
  left_join(estados, by = c("uf"="abbrev_state"))

ggplot() +
  geom_sf(data = plot_state, 
          aes(fill = factor(n),
              geometry = geom), 
          color = NA,
          size = .15) +
  labs(title = "Número de casos reportados por Estado",
       subtitle = "Ano: 2003",
       caption = "Fonte: Elaboração própria",
       size = 8) +
  guides(fill = guide_legend(title = "",
                             reverse = TRUE)) +
  scale_fill_manual(values = ext_oranges(26)) +
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        rect = element_blank())

regioes <- read_region(showProgress = FALSE)

plot_region <- left_join(sinan, estados, by=c("uf"="abbrev_state")) %>% 
  select(data, uf, code_state, name_state, code_region, name_region, populacao) %>% 
  group_by(name_region) %>%
  summarise(n=n()) %>% 
  filter(!is.na(name_region)) %>% 
  left_join(regioes, by="name_region")

ggplot() +
  geom_sf(data = plot_region, 
          aes(fill = factor(n),
              geometry = geom), 
          color = NA,
          size = .15) +
  labs(title = "Número de casos reportados por Região",
       subtitle = "Ano: 2003",
       caption = "Fonte: Elaboração própria",
       size = 8) +
  guides(fill = guide_legend(title = "",
                             reverse = TRUE)) +
  scale_fill_brewer(palette = "Oranges") +
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        rect = element_blank())

A maioria das notifificações em 2003 foram da região Nordeste, com forte concentração nos estados de Pernambuco e da Bahia,

É possível afirmar que a doença de chagas é característica de cidades menos populosas?

sinan %>% 
  mutate(cidade_pequena = populacao < 50000) %>% 
  summarise(frac_cidade_pequena = mean(cidade_pequena, na.rm = TRUE))
## # A tibble: 1 × 1
##   frac_cidade_pequena
##                 <dbl>
## 1               0.665

Em 2003, aproximadamente 67% dos casos foram registrados em residentes de municípios com até 50 mil habitantes,

Evolução temporal

plot_mes <- sinan %>% 
  mutate(month = month(data, label = TRUE)) %>% 
  group_by(month) %>% 
  summarise(n=n()) %>% 
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))

  
ggplot(plot_mes, 
       aes(x = month,
           y = n)) + 
  geom_col(fill = "indianred3", 
           color = "black") +
  labs(x = "", 
       y = "", 
       title  = "Evolução mensal de casos no ano de 2003")