if(!require(pacman)) install.packages('pacman')
library(pacman)
pacman::p_load(tidyverse, prettydoc, gtsummary, Amelia, naniar, gt, scales, RColorBrewer, geobr, sf, ggthemes, lubridate)# 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"))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)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%.
sum(duplicated(sinan_raw))## [1] 0
Não há observações duplicadas na base original.
# 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 |
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 (%) | ||||
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.
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,
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")