Utilizando o pacote microdatasus para realizar estudos epidemiológicos com dados do SUS
Pacote
De acordo com palavras dos autores, o pacote
microdatasus
se trata de um “algoritmo capaz de
realizar o download e o pré-processamento de microdados fornecidos pelo
Departamento de Informática do SUS (DATASUS) para diversos sistemas de
informações em saúde para a linguagem de programação estatística
R”1,
o artigo ainda lista as bases disponíveis de cada sistema de informação
do DATASUS e sua frequência de atualização:
Sim, é possível realizar o download manual destas bases de dados e
sua importação direta pelo R, veja um exemplo. Porém,
imagine que você deseja avaliar internações por infarto agudo do
miocárdio atendidas em hospitais de Minas Gerais durante um perído de 10
anos. Como a base do SIH é mensal você teria que realizar o download de
120 bases individuais e depois unificar todas elas. Aqui entra a
vantagem do pacote microdatasus
ao automatizar todo este
processo.
Instalação
Até a data da publicação deste tutorial o pacote não se encontrava nos repositórios oficiais do R, por isso, sua instalação precisa ser realizada pelo método recomendado pelo autor:
Produzi dois tutoriais que podem te ajudar, eles estão disponíveis no YouTube aqui e aqui.
Estudo Ecológico
Objetivo: Avaliar a tendência temporal da taxa de mortalidade por infarto agudo do miocárdio na população residente de Mato Grosso entre 2017 e 2021.
#-------- Pacotes
library(tidyverse)
library(microdatasus)
library(hrbrthemes)
#-------- Download
dados <- fetch_datasus(information_system = "SIM-DO", # Sigla conforme tabela acima
year_start = 2017, # Ano de início do estudo
year_end = 2021, # Ano final do estudo
uf = "MT", # Remover esta linha caso queira todo Brasil
vars = c("DTOBITO", "CODMUNRES", "CAUSABAS")) # Remover esta linha caso queira todas as variáveis
#-------- Processamento
dados <- dados |>
mutate(DTOBITO = dmy(DTOBITO), # Convertendo a variável para formato correto
ANO = year(DTOBITO), # Extraindo o ano do óbito
UF = str_sub(CODMUNRES, end = 2)) |> # Extraindo o código da UF
filter(UF == "51", # Filtrando pela UF de interesse
CAUSABAS == "I219") # CID-10 da causa do óbito
#-------- Estimativa populacional
# Fonte: https://sidra.ibge.gov.br/tabela/6579
pop <- read_delim("https://sidra.ibge.gov.br/geratabela?format=br.csv&name=tabela6579.csv&terr=N&rank=-&query=t/6579/n3/51/v/all/p/last%205/l/,,p%2Bv%2Bt",
skip = 2, delim = ";", n_max = 5, col_names = c("ANO", "VAR", "UF", "POP")) |> select(ANO, POP)
#-------- Cálculo da taxa
taxa <- dados |>
group_by(ANO) |> # Contabilizar por ano
summarise(OBITO = length(CAUSABAS)) |> # Quantificar o total de óbitos
left_join(pop, by = "ANO") |> # Reunir os dados da população
mutate(TAXA = round(OBITO / POP * 100000, digits = 0)) # Calcular a taxa a cada 100 habitantes com duas casas decimais
#-------- Gráfico de tendência temporal
ggplot(taxa, aes(y = TAXA, x = ANO)) +
geom_line(linewidth = 1) +
geom_point(size = 5) +
geom_text(aes(label = TAXA), vjust = -1.5) +
scale_y_continuous(limits = c(0,40)) +
labs(title = "Taxa de mortalidade por infarto agudo do miocárdio",
subtitle = "População residente de Mato Grosso",
y = "Óbitos a cada 100.000 pessoas",
x = "Ano do óbito") +
theme(panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
axis.title.x = element_text(size = 12),
axis.title.y = element_text(size = 12))
Conclusão: O risco de óbito por infarto agudo do miocárdio na população matogrossense encontra-se estabilizada entre os anos de 2017 e 2021.
Estudo Transversal
Objetivo: Avaliar o impacto da realização de angioplastia com implante de stent sobre o risco de óbito entre pacientes com idade entre 20 e 80 anos hospitalizados por angina instável em São Paulo entre janeiro e abril de 2023.
#-------- Pacotes
library(tidyverse)
library(microdatasus)
library(hrbrthemes)
#-------- Download
dados <- fetch_datasus(information_system = "SIH-RD", # Sigla conforme tabela acima
year_start = 2023, # Ano de início do estudo
year_end = 2023, # Ano final do estudo
month_start = 1, # Mês de início do estudo
month_end = 4, # Mês final do estudo
uf = "SP") # Remover esta linha caso queira todo Brasil
#-------- Processamento
dados <- dados |>
mutate(NASC = ymd(NASC), # Convertendo para formato date
DT_INTER = ymd(DT_INTER), # Convertendo para formato date
IDADE = round(as.numeric((DT_INTER - NASC) / 365.25), digits = 2), # Calculando idade
FAIXAET = case_when(IDADE >= 20 & IDADE < 40 ~ "20-39 anos", # Criando faixa etária
IDADE >= 40 & IDADE < 60 ~ "40-59 anos",
IDADE >= 60 & IDADE <= 80 ~ "60-80 anos"),
SEXO = case_when(SEXO == "1" ~ "Masculino", # Rotulando variável categórica
SEXO == "3" ~ "Feminino"),
UTI = case_when(MARCA_UTI == "00" ~ "Não", # Identificando uso de UTI
TRUE ~ "Sim"),
STENT = case_when(PROC_REA == "0406030030" ~ "Realizou", # Conforme tabela SIGTAP
TRUE ~ "Não realizou"),
STENT = fct_relevel(STENT, c("Não realizou", "Realizou")),
TEMPOINT = case_when(DIAS_PERM > median(DIAS_PERM) ~ str_glue("> {median(DIAS_PERM)} dias"), # Categorizando permanência pela mediana
TRUE ~ str_glue("<= {median(DIAS_PERM)} dias")),
MORTE = factor(MORTE, # Definindo desfecho como factor
levels = c(0, 1),
labels = c("Alta", "Óbito")),
CAR_INT = case_when(CAR_INT == "01" ~ "Eletivo", # Rotulando variável categórica
CAR_INT == "02" ~ "Urgência")) |>
filter(DIAG_PRINC == "I200") |> # Filtrando pela causa do óbito
select(FAIXAET, SEXO, UTI, STENT, TEMPOINT, MORTE, CAR_INT) |> # Selecionando as variáveis de interesse
drop_na(FAIXAET) # Excluindo pacientes fora da idade de interesse
#-------- Regressão logística
labelled::var_label(dados) <- list(FAIXAET = "Faixa etária", # Criando rótulos para os nomes das variáveis
SEXO = "Sexo",
UTI = "Utilizou UTI",
STENT = "Angioplastia",
TEMPOINT = "Tempo de internação",
MORTE = "Evolução",
CAR_INT = "Caráter da internação")
forestmodel::forest_model(glm(MORTE ~
FAIXAET +
SEXO +
UTI +
STENT +
TEMPOINT +
CAR_INT,
family = binomial(),
data = dados))
Conclusão: A realização do procedimento de angioplastia coronariana com implante de stent reduziu o risco de óbito em 78%, independentemente da faixa etária, sexo, utilização de UTI, tempo de internação e caráter da hospitalização.
Estudo Coorte
Objetivo: Estimar a probabilidade de sobrevida hospitalar de 30 dias em idosos internados por pneumonia em Mato Grosso em 2022.
#-------- Pacotes
library(tidyverse)
library(microdatasus)
library(survival)
library(ggsurvfit)
#-------- Download
dados <- fetch_datasus(information_system = "SIH-RD",
year_start = 2022,
year_end = 2022,
month_start = 1,
month_end = 12,
uf = "MT",
vars = c("NASC", "DT_INTER", "DIAS_PERM",
"DIAG_PRINC", "MORTE", "CAR_INT"))
#-------- Processamento
dados <- dados |>
mutate(NASC = ymd(NASC),
DT_INTER = ymd(DT_INTER),
IDADE = round(as.numeric((DT_INTER - NASC) / 365.25), digits = 2),
FAIXAET = case_when(IDADE >= 60 & IDADE < 80 ~ "60-79 anos",
IDADE >= 80 & IDADE < 100 ~ "80-99 anos"),
DIAS_PERM = replace(DIAS_PERM, DIAS_PERM == 0, 1), # Esta análise não aceita tempo zero
CAR_INT = case_when(CAR_INT == "01" ~ "Eletivo",
CAR_INT == "02" ~ "Urgência"),
GRUPO_CID = str_sub(DIAG_PRINC, end = 3)) |>
filter(GRUPO_CID == "J18",
IDADE >= 60,
DIAS_PERM <= 30)
#-------- Curva de Kaplan-Meier global
survfit(Surv(DIAS_PERM, MORTE) ~ 1, data = dados) |>
gtsummary::tbl_survfit(probs = 0.5,
label_header = "**Mediana (IC95%)**")
Characteristic | Mediana (IC95%) |
---|---|
Overall | 27 (23, —) |
survfit(Surv(DIAS_PERM, MORTE) ~ 1, data = dados) |>
ggsurvfit() +
add_confidence_interval() +
add_risktable() +
labs(y = "Probabilidade de sobrevida",
x = "Dias de permanência")
#-------- Curva de Kaplan-Meier por diagnóstico
survfit2(Surv(DIAS_PERM, MORTE) ~ FAIXAET, data = dados) |>
ggsurvfit() +
add_confidence_interval() +
add_pvalue("annotation", size = 4) +
labs(y = "Probabilidade de sobrevida",
x = "Dias de permanência",
title = "Probabilidade de sobrevida segundo utilização de UTI")
Conclusão: Metade dos idosos hospitalizados por pneumonia em Mato Grosso no ano de 2022 evoluíram para óbito com 27 dias de internação hospitalar. Idosos com idade entre 80 e 99 anos apresentaram probabilidade de sobrevida estatisticamente menor que idosos com idade entre 60 e 79 anos.
Saldanha RF, Bastos RR, Barcellos C. Microdatasus: pacote para download e pré-processamento de microdados do Departamento de Informática do SUS (DATASUS). Cad. Saúde Pública 2019;35(9) https://www.scielo.br/j/csp/a/gdJXqcrW5PPDHX8rwPDYL7F/?format=pdf&lang=pt↩︎