Olá, esta é mais uma de um conjunto de práticas em bioinformática desenvolvidas para o curso de Biomedicina da PUC-MG. Você pode encontrar as demais práticas aqui.
Hoje nós vamos trabalhar com dados obtidos do Sistema Único de Saúde, o SUS.
Introdução
Os dados do SUS
O SUS mantém e disponibiliza diversos sistemas de informação contendo dados relacionados à doenças, condições, causas de óbito, quadros hospitalares e características de indivíduos brasileiros. Estes dados são anonimizados, o que significa que não se é possível associá-los ao indivíduo fonte, desta maneira garantindo a privacidade do cidadão.
O DATASUS disponibiliza informações que podem servir para subsidiar análises objetivas da situação sanitária, tomadas de decisão baseadas em evidências e elaboração de programas e ações em saúde. Estes dados podem ser coletados manualmente, através da interface TABNET, ou diversas outras fontes. Recentemente foi desenvolvido o pacote de R microdatasus, que possibilita baixar os dados através de interface programática, facilitando enormemente o processo.
Existem diversos sistemas distintos, vamos conhecer os principais:
Principais Sistemas
SIM - Sistema de Informações sobre Mortalidade
- Objetivo: Registrar e monitorar os óbitos ocorridos no Brasil.
- Fonte de dados: Declarações de Óbito (DO).
- Informações coletadas:
- Causa básica da morte (CID-10),
- Idade,
- Sexo,
- Escolaridade,
- Local de ocorrência.
O SIM é usado para análises de mortalidade por causas específicas, como doenças crônicas, infecções e causas externas (acidentes, homicídios).
SINASC - Sistema de Informações sobre Nascidos Vivos
- Objetivo: Registrar todos os nascimentos vivos no país.
- Fonte de dados: Declarações de Nascido Vivo (DNV).
- Informações coletadas:
- Peso ao nascer,
- Idade gestacional,
- Tipo de parto,
- Escolaridade da mãe,
- Local do parto.
O SINASC é importante para estudar indicadores como prematuridade, baixo peso ao nascer e saúde materno-infantil.
Outros Sistemas Relevantes
- SIH-SUS (Sistema de Informações Hospitalares): registros de internações hospitalares no SUS.
- SIA-SUS (Sistema de Informações Ambulatoriais): registros de atendimentos ambulatoriais no SUS.
- SINAN (Sistema de Informação de Agravos de Notificação): monitora doenças de notificação obrigatória, como dengue, tuberculose e HIV.
- CNES (Cadastro Nacional de Estabelecimentos de Saúde): registra informações sobre hospitais, postos de saúde e outros estabelecimentos de saúde.
O uso integrado desses sistemas permite compreender a situação de saúde da população brasileira, monitorar tendências e embasar decisões em saúde pública.
Prática
Nesta prática iremos explorar um subconjunto de dados do sistema SIM-DO, mais especificamente analisando óbitos relacionados ao CID J159: “Pneumonia bacteriana, não especificada”. Aproveitaremos também para revisar alguns consceitos importantes sobre a linguagem R e seu funcionamento.
Preparação
Carregar pacotes
# para instalar o pacote, caso ainda não tenha (só se instala uma vez)
install.packages("ggplot2")
install.packages("dplyr")
# execute para carregar o pacote, caso já instalado
library("ggplot2")
library("dplyr")
DICA 1: toda vez que você for reiniciar um sessão é necessário carregar os pacotes. Eles são a primeira coisa de qualquer código.
DICA 2: Se ao carregar o pacote você tiver uma mensagem de erro como pacote não disponível, package not available, etc, praticamente qualquer pacore pode ser instalado com o comando intall.packages(“nome_do_pacote”).
DICA 3: Cada pacote só precisa ser instalado uma única vez.
Obtendo os dados
Para a prática
Para facilitar, iremos trabalhar com um subconjunto já organizado, que deve ser baixado aqui. Você irá fazer download do arquivo e em seguida iremos carregar esse arquivo para o R.
Vamos ver o arquivo no formato tabular clássico, nesta tabela.
Para as análises da desta aula prática, você pode pular a próxima sessão.
DICA 1: Para prosseguir na análise que vamos desenvolver, copie e cole os blocos de código num novo documento do tipo .R.
DICA 2: utilize a tecla tab para autocompletar e evitar erros!
#complete usando a tecla TAB até chegar ao arquivo que você baixou
dados_SUS <- read.csv(file = "",
sep = ","
) %>%
tibble::tibble()
Para outros projetos
Caso você tenha interesse em investigar outras questões sanitárias da população brasileira, você pode obter diferentes conjuntos de dados assim:
# executar apenas se estiver instalando em um computador windows ----
install.packages("read.dbc", repos = "https://packagemanager.posit.co/cran/2024-07-05")
#instalar pacotes necessários ----
install.packages("remotes")
remotes::install_github("rfsaldanha/microdatasus")
library(microdatasus)
# baixar dados ----
dados_brutos_SUS <- fetch_datasus(year_start = 2020,
year_end = 2023,
uf = "MG",
information_system = "SIM-DO")
dados_SUS <- process_sim(dados_brutos_SUS)
dados_SUS
Investigando os dados
Nossos dados estão no formato tabular, ou seja, organizados em linhas e colunas. As linhas são as observações de qualquer tabela. No nosso caso elas correspondem a indivíduos. Já as colunas são conjuntos definidos de informação. Cada coluna armazena um tipo de informação única, como a idade, Sexo, município de nascimento, entre outros. Assim, uma coluna que armazena a idade terá apenas valores numéricos positivos, já a de município de nascimento terá apenas nomes de cidade, e a coluna Sexo terá apenas as classes de valores masculino, feminino ou não informado. Desta maneira, idade é uma variável contínua e numérica. Por outro lado, Sexo é uma variável discreta e categórica. Vamos entender isso melhor.
# ver a tabela de dados
dados_SUS
# qual o tamanho da tabela
dim(dados_SUS)
# qual o nome das colunas
colnames(dados_SUS)
# quais os valores de uma coluna
dados_SUS$Idade_anos
dados_SUS$Sexo
# quantas observações temos de cada tipo?
dados_SUS$Idade_anos %>% table()
dados_SUS$Sexo %>% table()
# visualizar quantas observações temos de cada tipo
dados_SUS$Idade_anos %>% table() %>% plot()
dados_SUS$Sexo %>% table() %>% barplot()
#quais as 10 primeiras observações dessa tabela
dados_SUS[1:10,]
#quais asegunda coluna
dados_SUS[,2]
#qual a média de idades?
dados_SUS$Idade_anos %>% mean(na.rm = T)
Gráficos exploratórios
Gráfico escolaridade por Sexo
# grágico escolaridade por Sexo
dados_SUS %>%
mutate(Idade_anos = as.numeric(Idade_anos) ) %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(x = CID_significado,
group = Escolaridade,
col = Escolaridade,
fill = Escolaridade)) +
geom_bar(stat = "count",position = "dodge") +
facet_grid(cols = vars(Sexo))
#### Gráfico de Sexo e escolaridade
dados_SUS %>%
mutate(Idade_anos = as.numeric(Idade_anos) ) %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(x = CID_significado,
group = Sexo,
col = Sexo,
fill = Sexo)) +
geom_bar(stat = "count",position = "dodge") +
facet_grid(cols = vars(Escolaridade))
#### Gráfico aumento de mortes por grupo de escolaridade
dados_SUS %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(x = Ano_obito,
group = Sexo,
col = Sexo,
fill = Sexo)) +
geom_density(stat = "count",position = "stack") +
facet_grid(cols = vars(Escolaridade)) +
theme(axis.text.x = element_text(angle = 90))
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_count()`).
#### Gráfico aumento de mortes total
dados_SUS %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(x = Ano_obito,
group = Sexo,
col = Sexo,
fill = Sexo)) +
geom_density(stat = "count",position = "stack") +
theme(axis.text.x = element_text(angle = 90))
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_count()`).
#### Gráfico aumento de mortes por ano e estado civil
dados_SUS %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(x = Ano_obito,
group = Estado_civil,
col = Estado_civil,
fill = Estado_civil)) +
geom_density(stat = "count",position = "stack") +
theme(axis.text.x = element_text(angle = 90)) +
facet_grid(cols = vars(Sexo))
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_count()`).
#### Gráfico de média de idades por grupo de escolaridade
dados_SUS %>%
filter(Sexo %in% c("Masculino", "Feminino")) %>%
ggplot(aes(y = Idade_anos,
x = Sexo,
group = Sexo,
fill = Sexo)) +
geom_boxplot() +
# geom_jitter() +
theme(axis.text.x = element_text(angle = 90)) +
facet_grid(cols = vars(Escolaridade))
## Warning: Removed 237 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
E por hoje ficamos por aqui!
cat(’Voltar para a página inicial
’)