Curso

Este material foi elaborado para o curso extracurricular de Análise de Dados do DATASUS com R e RStudio realizado a cada semestre pelo curso de Medicina do UNIVAG e ministrado pelo Prof. Dr. Hugo Hoffmann, autor deste material.

Cooperando com os instrumentos oferecidos por este curso o aluno que se dedicar em compreender e replicar as análises aqui realizadas desenvolverá uma importante habilidade para o ambiente acadêmico, obterá maior independência para elaborar estudos epidemiológicos e aplicar o método científico para testar hipóteses utilizando o rigor estatístico exigido por periódicos científicos de alta qualidade.

Tenho recebido ótimos feedbacks das turmas que já passaram pelo curso, por isso, este material receberá constante ampliação e melhoria e, por isso, esta não é uma versão final. Aliás, a própria elaboração deste material foi uma sugestão que recebi dos meus alunos.

Foi criada uma pasta no Google Drive onde o aluno pode ter acesso à artigos científicos, bancos de dados utilizados durante o curso, vários ebooks, mapas conceituais, cheatsheets, scritps, tutoriais em vídeo e o cronograma, que você pode acessar neste link.


R + RStudio

Sendo totalmente gratuito, o R é uma linguagem de programação orientada a objetos voltada à manipulação, análise e visualização de dados, criado por Ross Ihaka e Robert Gentleman no departamento de Estatística da Universidade de Auckland, Nova Zelândia.

O RStudio é um software livre que oferece um ambiente de desenvolvimento integrado para o R, ou seja, ele depende do R para executar suas funções, porém, oferece um ambiente que facilita sua utilização, o que é especialmente válido para usuários iniciantes.

Você pode usar o RStudio de duas formas, uma versão desktop (instalada no seu PC) ou uma versão web (na nuvem do RStudio). Para a primeira opção você precisa instalar primeiro o R e depois o RStudio.

Dica: Diferente do Epi Info, Stata e SPSS, no R todos os comandos são digitados em linhas de um script, logo, pequenos detalhes fazem a diferença entre um código funcional e uma mensagem vermelha de erro.


Funções básicas

Calculadora

Pode você utilizar o R como calculadora:

1 + 1       # Soma
## [1] 2
2 * 3       # Multiplicação
## [1] 6
10 / 2      # Divisão
## [1] 5
5 ^ 2       # Exponenciação
## [1] 25

Atribuição

Você pode criar vetores para armazenar dados, para isso utilizamos o sinal de atribuição <-, cujo atalho é [ALT]+[-]. A letrinha c minúscula é utilizada para quando desejamos combinar valores dentro de um vetor. Entenda vetores como variáveis ou características dos pacientes, já os dataframes (ou banco de dados) é uma coleção de vetores.

Digamos que temos os dados de 3 variáveis (idade, sexo, evoluacao) para 5 pacientes coletados de um prontuário médico e desejamos inserir estes dados diretamente no RStudio para analisarmos posteriormente. Para isso, incluiríamos os seguintes vetores, os quais sexo e evolucao serão armazenados como texto [chr], por isso as aspas, e o vetor idade armazenado como número [num].

Dica: Evite o uso de espaços e caracteres especiais nos nomes dos vetores.

idade <- c(23, 45, 32, 57, 28)
sexo <- c("Feminino", "Feminino", "Masculino", "Masculino", "Feminino")
evolucao <- c("Cura", "Óbito", "Óbito", "Cura", "Cura")

Criando dataframe

Podemos reunir estes vetores e criar, a partir deles, um dataframe. Depois de executado o código abaixo, no RStudio clique sobre o nome dados e você visualizará em uma nova aba o seu banco de dados.

#-------- Criando o dataframe

dados <- data.frame(idade, sexo, evolucao)

#-------- Deletando os vetores

rm(idade, sexo, evolucao)
idade sexo evolucao
23 Feminino Cura
45 Feminino Óbito
32 Masculino Óbito
57 Masculino Cura
28 Feminino Cura

Explorando dataframe

A função str nos permite visualizar o nome das variáveis e o tipo do dado armazenado.

str(dados)
## 'data.frame':    5 obs. of  3 variables:
##  $ idade   : num  23 45 32 57 28
##  $ sexo    : chr  "Feminino" "Feminino" "Masculino" "Masculino" ...
##  $ evolucao: chr  "Cura" "Óbito" "Óbito" "Cura" ...

Essa informação será útil para realizarmos a estatística descritiva, pois cada tipo de variável deve ser analisada estatisticamente conforme sua natureza:

Variável Estatística Descritiva
Categórica Frequências (n, %)
Numérica Média ou Medianas

Tabela de frequência

Agora podemos realizar algumas análises básicas, primeiro, a frequência a evolução:

table(dados$evolucao)
## 
##  Cura Óbito 
##     3     2

Média

Ou a média da idade:

mean(dados$idade)
## [1] 37

Gráficos

Inclusive, podemos gerar um gráfico de barras:

barplot(table(dados$evolucao),
        col = "steelblue",
        xlab = "Evolução do paciente",
        ylab = "Frequência",
        main = "Distribuição dos casos segundo evolução do paciente")

Ou um boxplot:

boxplot(dados$idade,              # Variável numérica
        col = "steelblue")        # Cor do gráfico

Tão importante quanto saber analisar os dados é conseguir extrair deles informação, ou seja, realizar sua interpretação. O gráfico acima é um dos mais utilizados em pesquisas médicas e representa diferentes informações em sua anatomia. A linha preta mais forte situada dentro da caixa representa a mediana, que você pode confirmar executando median(dados$idade). A linha inferior (abaixo da caixa) representa o menor valor da idade, confirme o valor executando min(dados$idade) e a linha superior (acima da caixa) representa o maior valor da idade, verifique isso com max(dados$idade). Há mais informações neste gráfico, mas por enquanto temos o suficiente para um conhecimento introdutório.


Pacotes

Até agora já realizamos estatística descritiva de de uma variável categórica e uma numérica, plotamos um gráfico de barras e um boxplot, porém, fizemos tudo isso com funções nativas (pré-instaladas) do R. Mas o que faz dele uma linguagem tão versátil é a enorme comunidade de usuários que cria novas funções e disponibiliza isso para toda comunidade utilizar. As funções são compartilhadas em pacotes, ou seja, um pacote é uma coleção de funções criadas por alguém que decidiu compartilhar seu conhecimento e ajudar outros usuários do R. Legal isso né?

Instalando

Os pacotes são instalados apenas uma vez no seu PC e você pode consultá-los na aba Packages no canto direito inferior do RStudio, ao lado da aba Plots, onde visualizamos nosso gráfico agora pouco.

Você pode instalar pacotes executando o comando install.packages("nomedopacote") ou clicando no notão Install presente na aba Packages e digitando ali o nome do pacote a ser instalado. Para o nosso curso precisamos instalar os seguintes pacotes:

install.packages("tidyverse")       # Coleção de funções importantes
install.packages("readxl")          # Importa dados de planilhas do Excel
install.packages("read.dbc")        # Importa dados do DATASUS
install.packages("DescTools")       # Análise estatística descritiva e inferencial
install.packages("ggstatsplot")     # Gráficos estatísticos para artigos científicos
install.packages("gtsummary")       # Tabela de análises para o artigo cientifico
install.packages("hrbrthemes")      # Possui temas belíssimos para gráficos

Não se preocupe com as letrinhas subindo no console, o R vai se conectar na internet para baixar os pacotes e fazer a instalação. Caso ainda tenha dúvida, assista este tutorial.

Carregando

Uma vez instalado, precisamos carregar os pacotes sempre que quisermos utilizar suas funções e fazemos isso usando a função library().

library(tidyverse)
library(readxl)
library(read.dbc)
library(DescTools)
library(ggstatsplot)
library(gtsummary)
library(hrbrthemes)


Importando dados

Diretório de Trabalho

É uma boa prática, especialmente para iniciantes em R, definir uma pasta no seu computador como o local onde colocaremos todos os bancos de dados que desejamos realizar a importação para o R. Recomendo que você crie uma pasta chamada R no C: do seu computador, depois execute este código:

setwd("C:/R")

Dica: Tenho um tutorial que pode te ajudar, se ainda estiver com dúvida: assista.

Excel

Para este exemplo, acesse este link do Portal Dados Abertos e baixe a planilha Agosto de 2018 clicando em Acessar o recurso. Esta planilha possui servidores do poder executivo federal que aderiram a um programa de desligamento voluntário. Salve esta planilha com o nome “Desligamento.xlsx” no seu diretório de trabalho e então execute o código abaixo:

dados <- read_xlsx("Desligamento.xlsx")

Há duas formas de importar dados no R, a primeira é colocando apenas o nome do arquivo quando temos definido um diretório de trabalho (que foi o que fizemos antes) e a segunda, quando não temos um diretório definido, é informando o caminho completo ao arquivo, que seria C:/R/Desligamento.xslx.

Dica: O nome dados é você quem escolhe e poderia ser outro, o ideal é que seja curto porque economiza tempo. Ninguém vai querer colocar algo desse tipo meus_dados_do_TCC_da_faculdade. Você saberá que deu tudo certo quando o nome do dataframe aparecer na aba Environment no canto direito superior do RStudio. Inclusive, você pode clicar sobre o nome dados para visualizar seu dataframe.

CSV

Este é o arquivo chamado de Comma-separated values ou valores separados por vírgulas, sendo um padrão muito utilizado para disponbilização de dados abertos. Para este exemplo, utilizaremos dados de casos humanos de febre amarela entre 1994 e 2001 disponibilizados no Portal de Dados Abertos, que você fará download ao clicar em Acessar o recurso, agora salve o arquivo com o nome “febre_amarela.csv” no seu diretório de trabalho e então execute o código abaixo:

dados <- read.csv2("febre_amarela.csv", fileEncoding = "Latin1")

Dica: O caminho no Windows usa essa barra \ que você deve substituir por esta barra /.

URL

Se a planilha (Excel ou CSV) estiver disponível em um link público, podemos importar diretamente no R sem nem ter que fazer o download dos dados para o computador. Para este exemplo, iremos baixar os dados de casos, hospitalizações e óbitos diários por COVID-19 em residentes de Nova Iorque (EUA) que estão disponíveis para acesso público no repositório de dados da cidade NYC OpenData.

dados <- read.csv("https://data.cityofnewyork.us/api/views/rc75-m7u3/rows.csv")

Dica: O mais observadores terão percebido que no exemplo anterior utilizamos a função read.csv2 e agora utilizamos a função read.csv. Sim, há o momento certo de utilizarmos cada uma delas. A primeira função serve para importar dados em CSV em formato brasileiro e a segunda para planilhas CSV em formato estrangeiro. Isso é necessário porque o separador de decimal no formato brasileiro é vírgula, mas no estrangeiro é ponto.

DBC (DATASUS)

Microdados do DATASUS são armazenados em formato Database Files Compressed, é um formato que necessitaria de aplicativos específicos para seres visualizados, como o aplicativo oficial de análise do DATASUS chamado TabWin. No R podemos fazer de duas formas:

  1. Baixando o arquivo no desktop e depois realizando a importação:

Para este exemplo acessaremos o site https://datasus.saude.gov.br, depois clicarmos em “Acesso à informação”, rolar a tela mais para baixo e clicar em “Serviços”, depois clicar em “Transferência / Download de Arquivos” e então em “Transferência de Arquivos”. Caso não consiga encontrar, clique aqui e faça as seguintes seleções:

Seção Opção que você deve selecionar
Fonte SIHSUS - Sistema de Informações Hospitalares do SUS
Modalidade Dados
Tipo de Arquivo RD - AIH Reduzida
Ano 2023
Mês Janeiro
UF MT

Com essa configuração faremos o download de internações hospitalares atendidas pelo SUS e ocorridas em todo estado de Mato Grosso em janeiro de 2023. Para isso, clique em Enviar, depois em “Download” e, por fim, no link “arquivo.zip” para fazer o download. Salve-o no seu diretório de trabalho, descompacte o banco de dados RDMT2301.dbc e execute o código abaixo no R:

dados <- read.dbc("RDMT2301.dbc")

Dica: Você pode realizar múltiplas seleções ao segurar a tecla CTRL do teclado e clicar sobre outros anos, meses ou unidades da federação.

  1. Realizando a importação direta pelo R:

Para realizar uma importação direta precisamos seguir alguns passos a mais do que temos feito até então, veja como fazer. Iremos baixar o mesmo banco de dados do exemplo anterior.

#-------- Etapa 1 - Criar um arquivo temporário

temp <- tempfile()

#-------- Etapa 2 - Download do arquivo direto do servidor do DATASUS

download.file("ftp://ftp.datasus.gov.br/dissemin/publicos/SIHSUS/200801_/Dados/RDMT2301.dbc", temp, mode = "wb")

#-------- Etapa 3 - Importar o banco de dados

dados <- read.dbc(temp)

#-------- Etapa 4 - Remover o arquivo temporário

rm(temp)

Descobrimos que houveram um total de 16641 internações hospitalares atendidas pela rede SUS no estado de Mato Grosso em janeiro de 2023. E se quiséssemos baixar dados de fevereiro de 2015 para o Paraná? Perceba que o nome do arquivo identifica o tipo de informação RD (AIH’s Aprovadas), depois MT a unidade da federação, então 23 do ano e 01 do mês. Logo, para baixar estes dados manteríamos todo o link da “Etapa 2” substituindo apenas a parte RDMT2301 por RDPR1501.


Transformação dos Dados

Explorando as variáveis

De posse dos dados do nosso estudo, vamos conhecer as variáveis que este banco de dados possui utilizando a função glimpse que lista o nome das variáveis, apresenta o tipo que elas foram armazenadas e nos dá algunas exemplos de seu preenchimento:

glimpse(dados)
## Rows: 16,641
## Columns: 113
## $ UF_ZI      <fct> 510000, 510000, 510000, 510000, 510000, 510000, 510000, 510…
## $ ANO_CMPT   <fct> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023,…
## $ MES_CMPT   <fct> 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01,…
## $ ESPEC      <fct> 02, 02, 02, 03, 03, 03, 03, 03, 03, 03, 03, 03, 03, 03, 03,…
## $ CGC_HOSP   <fct> 32944118000164, 32944118000164, 32944118000164, 32944118000…
## $ N_AIH      <fct> 5123100971648, 5123100971714, 5123100971725, 5122103685017,…
## $ IDENT      <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ CEP        <fct> 78545000, 78552220, 78540000, 78556334, 35550000, 78559609,…
## $ MUNIC_RES  <fct> 510724, 510790, 510305, 510790, 313350, 510790, 510790, 510…
## $ NASC       <fct> 20010919, 19910804, 19930408, 19650917, 19720630, 20010412,…
## $ SEXO       <fct> 3, 3, 3, 3, 1, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 1, 1, 1, 1, 1,…
## $ UTI_MES_IN <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_MES_AN <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_MES_AL <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_MES_TO <int> 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ MARCA_UTI  <fct> 00, 00, 00, 75, 00, 00, 00, 00, 00, 00, 75, 00, 00, 00, 00,…
## $ UTI_INT_IN <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_INT_AN <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_INT_AL <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ UTI_INT_TO <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ DIAR_ACOM  <int> 3, 2, 3, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,…
## $ QT_DIARIAS <int> 3, 2, 3, 3, 1, 3, 2, 2, 4, 3, 5, 1, 2, 2, 1, 2, 31, 8, 4, 6…
## $ PROC_SOLIC <fct> 0411010034, 0411010034, 0411010034, 0303030038, 0305020056,…
## $ PROC_REA   <fct> 0411010034, 0411010034, 0411010034, 0303030038, 0305020056,…
## $ VAL_SH     <dbl> 419.68, 417.68, 513.96, 3441.95, 380.93, 193.71, 969.79, 96…
## $ VAL_SP     <dbl> 276.43, 276.43, 276.43, 590.01, 68.72, 23.99, 146.21, 146.2…
## $ VAL_SADT   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_RN     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_ACOMP  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_ORTP   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_SANGUE <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_SADTSR <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_TRANSP <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_OBSANG <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_PED1AC <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_TOT    <dbl> 696.11, 694.11, 790.39, 4031.96, 449.65, 217.70, 1116.00, 1…
## $ VAL_UTI    <dbl> 0, 0, 0, 3600, 0, 0, 0, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0,…
## $ US_TOT     <dbl> 133.86, 133.48, 151.99, 775.37, 86.47, 41.86, 214.61, 214.6…
## $ DT_INTER   <fct> 20230115, 20230117, 20230117, 20221228, 20230107, 20230123,…
## $ DT_SAIDA   <fct> 20230118, 20230119, 20230120, 20230105, 20230108, 20230126,…
## $ DIAG_PRINC <fct> O619, O820, O159, E108, N180, O998, C188, C168, C188, O200,…
## $ DIAG_SECUN <fct> 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,…
## $ COBRANCA   <fct> 61, 61, 62, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,…
## $ NATUREZA   <fct> 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,…
## $ NAT_JUR    <fct> 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069,…
## $ GESTAO     <fct> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,…
## $ RUBRICA    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ IND_VDRL   <fct> 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ MUNIC_MOV  <fct> 510790, 510790, 510790, 510790, 510790, 510790, 510790, 510…
## $ COD_IDADE  <fct> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,…
## $ IDADE      <int> 21, 31, 29, 57, 50, 21, 72, 64, 54, 41, 27, 25, 28, 73, 38,…
## $ DIAS_PERM  <int> 3, 2, 3, 8, 1, 3, 2, 2, 4, 3, 6, 1, 2, 2, 1, 2, 30, 8, 4, 6…
## $ MORTE      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ NACIONAL   <fct> 010, 010, 010, 010, 010, 010, 010, 010, 010, 010, 010, 010,…
## $ NUM_PROC   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ CAR_INT    <fct> 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02, 02,…
## $ TOT_PT_SP  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CPF_AUT    <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ HOMONIMO   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ NUM_FILHOS <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ INSTRU     <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ CID_NOTIF  <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ CONTRACEP1 <fct> 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,…
## $ CONTRACEP2 <fct> 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,…
## $ GESTRISCO  <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ INSC_PN    <fct> 000000000000, 000000000000, 000000000000, 000000000000, 000…
## $ SEQ_AIH5   <fct> 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,…
## $ CBOR       <fct> 000000, 000000, 000000, 000000, 000000, 000000, 000000, 000…
## $ CNAER      <fct> 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,…
## $ VINCPREV   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ GESTOR_COD <fct> 00011, 00011, 00011, 00007, 00007, 00007, 00007, 00007, 000…
## $ GESTOR_TP  <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,…
## $ GESTOR_CPF <fct> 000093983018068, 000093983018068, 000093983018068, 00009398…
## $ GESTOR_DT  <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ CNES       <fct> 2795671, 2795671, 2795671, 2795671, 2795671, 2795671, 27956…
## $ CNPJ_MANT  <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ INFEHOSP   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ CID_ASSO   <fct> 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,…
## $ CID_MORTE  <fct> 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,…
## $ COMPLEX    <fct> 02, 02, 02, 02, 02, 02, 03, 03, 03, 02, 02, 02, 02, 03, 02,…
## $ FINANC     <fct> 06, 06, 06, 06, 06, 06, 06, 06, 06, 06, 06, 06, 06, 06, 06,…
## $ FAEC_TP    <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ REGCT      <fct> 7102, 7102, 7102, 7102, 7102, 7102, 7104, 7104, 7104, 7102,…
## $ RACA_COR   <fct> 03, 03, 01, 03, 03, 03, 03, 03, 01, 01, 03, 03, 01, 02, 03,…
## $ ETNIA      <fct> 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,…
## $ SEQUENCIA  <int> 3830, 3831, 3832, 3942, 3943, 3944, 3946, 3947, 3948, 4054,…
## $ REMESSA    <fct> HE51000001N202301.DTS, HE51000001N202301.DTS, HE51000001N20…
## $ AUD_JUST   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ SIS_JUST   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ VAL_SH_FED <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_SP_FED <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_SH_GES <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_SP_GES <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ VAL_UCI    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ MARCA_UCI  <fct> 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,…
## $ DIAGSEC1   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC2   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC3   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC4   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC5   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC6   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC7   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC8   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ DIAGSEC9   <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ TPDISEC1   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,…
## $ TPDISEC2   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC3   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC4   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC5   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC6   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC7   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC8   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ TPDISEC9   <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

Nosso estudo avaliará indivíduos com idade maior ou igual a 20 anos, do sexo masculino, hospitalizados por infarto agudo do miocárdio em Mato Grosso durante o mês de janeiro de 2023 e incluirá as seguintes variáveis:

Variáveis Descrição
MES_CMPT Mês da internação
CAR_INT Caráter da internação
DIAS_PERM Tempo de internação (dias)
VAL_TOT Valor da internação (R$)
MORTE Evolução

Para isso precisaremos realizar transformações neste banco de dados para que tenhamos o recorte de nosso interesse.

Filtro

A função filter é útil para inserirmos os critérios de inclusão de nosso estudo. Observe que após a execução do código abaixo o tamanho de amostra será reduzido para n=93, que foram as internações que respeitaram o critérios que estabelecemos.

dados <- dados |> 
  filter(COD_IDADE == "4",         # Idade em anos completos
         IDADE >= 20,              # Idade de 20 anos ou mais
         SEXO == "1",              # Sexo masculino
         DIAG_PRINC == "I219")     # CID-10 de infarto agudo do miocárdio      

Dica: Usamos agora o sinal pipe ao final da primeira linha, que pode ocorrer também neste outro formato: %>%. Ele pode ser inserido apertando simultaneamente no teclado as teclas CTRL+SHIFT+M e serve para informar ao código que ele continuará executando a próxima linha (debaixo recuada).

Seleção

Entretanto, nosso banco de dados ainda continua com 113 variáveis, mas queremos apenas aquelas que estão na tabela acima e para isso executaremos o seguinte código:

dados <- dados |> 
  select(MES_CMPT, CAR_INT, DIAS_PERM, VAL_TOT, MORTE)

Modificação

Agora nosso banco de dados está quase pronto para análise, só precisamos rotular as categorias das variáveis não numéricas para que saibamos o que significa cada categoria da variável. Neste momento, é muito útil consultarmos um Dicionário de Dados. No caso do SIH, podemos consultar este.

Assim descobrimos que para a variável MORTE “0” significa “Alta” e “1” significa “Óbito” por exemplo. Agora precisamos escrever um código que faça essa transformação. Usaremos a função mutate e dentro dela iremos modificar todas as variáveis que precisarmos:

dados <- dados |> 
  mutate(CAR_INT = case_when(CAR_INT == "01" ~ "Eletivo",
                             CAR_INT == "02" ~ "Urgência"),
         MORTE = case_when(MORTE == 0 ~ "Alta",
                           MORTE == 1 ~ "Óbito"))

Dica: Um único sinal de igual no R significa atribuição, da mesma forma que o sinal já visto anteriormente <-, mas dois sinais de igual são usados para igualdade, usado em condicionais como fizemos antes com a função filter e agora com a função case_when.

Outro detalhe que você deve ficar atento é ao tipo da variável, observe que a variável MORTE está armazenada como número, diferentemente da variável CAR_INT que está como factor. Exatamente por isso é que precisamos colocar o número entre aspas (texto) em CAR_INT, mas sem aspas (número) em MORTE.

Dica: Observe que ao final de cada função inserimos o sinal de pipe para que a função da linha abaixo seja executada na sequência. Sequência, aliás, é a palavra chave aqui, porque ela altera sim o funcionamento das coisas. Por exemplo, se você não selecionasse a variável MORTE em select seria retornado um erro porque a função mutate não encontraria nenhuma variável com este nome para modificar.

Renomear variáveis

Também é possível alterar o nome das variáveis para um que melhore nossa compreensão do tipo de informação que ele armazena. Se queremos, entre outras coisas, renomear a variável MORTE para EVOLUCAO, então faríamos assim:

dados <- dados |> 
  rename("EVOLUCAO" = "MORTE",
         "MES" = "MES_CMPT",
         "TEMPO" = "DIAS_PERM",
         "VALOR" = "VAL_TOT",
         "CARATER" = "CAR_INT")

Vejamos o resultado:

glimpse(dados)
## Rows: 93
## Columns: 5
## $ MES      <fct> 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 01, 0…
## $ CARATER  <chr> "Urgência", "Urgência", "Urgência", "Urgência", "Urgência", "…
## $ TEMPO    <int> 12, 0, 2, 3, 30, 5, 2, 9, 1, 17, 1, 6, 7, 1, 4, 2, 3, 7, 1, 7…
## $ VALOR    <dbl> 4885.56, 1194.47, 589.12, 1883.32, 906.07, 588.12, 588.12, 32…
## $ EVOLUCAO <chr> "Alta", "Óbito", "Alta", "Alta", "Alta", "Alta", "Alta", "Alt…

Encadeando funções

Podemos usar o pipe (|> ou %>%) para encadear tudo que fizemos nos passos anteriores em apenas um bloco de código. Ficaria assim:

dados <- dados |> 
  filter(COD_IDADE == "4",         
         IDADE >= 20,              
         SEXO == "1",              
         DIAG_PRINC == "I219") |> 
  select(MES_CMPT, CAR_INT, DIAS_PERM, VAL_TOT, MORTE) |> 
  mutate(CAR_INT = case_when(CAR_INT == "01" ~ "Eletivo",
                             CAR_INT == "02" ~ "Urgência"),
         MORTE = case_when(MORTE == 0 ~ "Alta",
                           MORTE == 1 ~ "Óbito")) |> 
  rename("EVOLUCAO" = "MORTE",
         "MES" = "MES_CMPT",
         "TEMPO" = "DIAS_PERM",
         "VALOR" = "VAL_TOT",
         "CARATER" = "CAR_INT")


Análise estatística

Tabela com DescTools

Temos nosso banco de dados organizado e pronto para iniciarmos a produção dos resultados da nossa pesquisa. Vamos utilizar a função Desc do pacote DescTools para gerarmos uma tabela com a frequência dos óbitos:

Desc(dados$EVOLUCAO)
## ------------------------------------------------------------------------------ 
## dados$EVOLUCAO (character - dichotomous)
## 
##   length      n    NAs unique
##       93     93      0      2
##          100.0%   0.0%       
## 
##        freq   perc  lci.95  uci.95'
## Alta     88  94.6%   88.0%   97.7%
## Óbito     5   5.4%    2.3%   12.0%
## 
## ' 95%-CI (Wilson)

A função produziu um resultado no console e também um gráfico. Diferentemente da função básica table que utilizamos anteriormente, temos numa mesma saída várias informações muito úteis:

  • length = Quantas linhas possui a variável no banco de dados
  • n = Em quantas linhas no banco de dados esta variável está preenchida
  • NA = Em quantas linhas no banco de dados esta variável não possui preenchimento
  • unique = Quantas categorias essa variável possui de resposta
  • freq = Frequência absoluta por categoria (n)
  • perc = Frequência relativa por categoria (%)

Descobrimos que a letalidade hospitalar por infarto agudo do miocárdio foi igual a 5,4% entre homens com idade de 20 anos ou mais em Mato Grosso em janeiro de 2023.

Uma coisa boa desta função é você pode utilizá-la para qualquer tipo de variável que a própria função faz a estatística adequada para diferentes tipos de variáveis. Vejamos o output para uma variável numérica:

Desc(dados$TEMPO)
## ------------------------------------------------------------------------------ 
## dados$TEMPO (integer)
## 
##   length       n    NAs  unique    0s   mean  meanCI'
##       93      93      0      22     4   6.19    4.79
##           100.0%   0.0%          4.3%           7.59
##                                                     
##      .05     .10    .25  median   .75    .90     .95
##     1.00    1.00   2.00    4.00  7.00  17.80   23.40
##                                                     
##    range      sd  vcoef     mad   IQR   skew    kurt
##    30.00    6.80   1.10    2.97  5.00   1.86    2.76
##                                                     
## lowest : 0 (4), 1 (13), 2 (14), 3 (15), 4 (7)
## highest: 23, 24 (2), 27, 28, 30
## 
## heap(?): remarkable frequency (16.1%) for the mode(s) (= 3)
## 
## ' 95%-CI (classic)

Agora temos outras informações igualmente úteis:

  • mean = Média (uma medida pontual)
  • meanCI = Intervalo de confiança a 95% da média
  • median = Mediana (outra medida pontual)
  • sd = Desvio padrão (uma medida de dispersão)
  • IQR = Intervalo interquartil (outra medida de dispersão)

Como você redigiria este resultado no seu artigo? Algo mais ou menos assim: O tempo médio de internação hospitalar por infarto agudo do miocárdio foi igual a 6,19 dias (IC95%=4,79-7,59) entre indivíduos do sexo masculino, com idade de 20 anos ou mais atendidos em Mato Grosso em janeiro de 2023.

Dica: No gráfico gerado para a variável numérica você observará um boxplot deitado, a interpretação dele é a mesma daquele outro que geramos anteriormente.

Tabela com gtsummary

Agora iremos utilizar a função tbl_summary para gerar nossa tabela descritiva de perfil epidemiológico:

dados |> 
  tbl_summary(missing_text = "Não informado",      
              label = list(MES ~ "Mês da internação",
                           CARATER ~ "Caráter da internação",
                           TEMPO ~ "Tempo de internação (dias)",
                           VALOR ~ "Custo da internação (R$)",
                           EVOLUCAO ~ "Evolução"), 
              digits = list(all_categorical() ~ c(0, 2))) |> 
  bold_labels()
Characteristic N = 931
Mês da internação
    01 93 (100.00%)
Caráter da internação
    Eletivo 2 (2.15%)
    Urgência 91 (97.85%)
Tempo de internação (dias) 4 (2, 7)
Custo da internação (R$) 2,570 (613, 5,996)
Evolução
    Alta 88 (94.62%)
    Óbito 5 (5.38%)
1 n (%); Median (IQR)

O argumento missing_text serve para nos informar quantos indivíduos não tiveram informações preenchidas para cada variável, em nosso exemplo, não houveram dados ausentes, label serve para descrevermos melhor o nome da variável e digits nos permite definir a quantidade de casas decimais.

Dica: Você pode adicionar algumas linhas de código para o R gerar essa tabela diretamente dentro de um arquivo do Word, veja o exemplo abaixo:

dados |> 
  tbl_summary(missing_text = "Não informado",      
              label = list(MES ~ "Mês da internação",
                           CARATER ~ "Caráter da internação",
                           TEMPO ~ "Tempo de internação (dias)",
                           VALOR ~ "Custo da internação (R$)",
                           EVOLUCAO ~ "Evolução"), 
              digits = list(all_categorical() ~ c(0, 2))) |> 
  bold_labels() |>  
  as_flex_table() |>
  flextable::save_as_docx(path = "Tabela1.docx")

Gráficos com ggplot2

Vamos agora gerar um gráfico de colunas para internações segundo evolução do paciente:

dados |>
  group_by(EVOLUCAO) |>                      # Agrupa o total de casos
  summarise(total = n()) |>                  # Conta o total de linhas
  ggplot(aes(y = total, x = EVOLUCAO)) +     # Define a estética do gráfico
  geom_col() +                               # Executa um gráfico de coluna
  theme_ipsum_ps() +                         # Insere um tema
  labs(title = "Internações segundo evolução do paciente",
       subtitle = "Infarto agudo do miocárdio entre homens de 20 anos ou mais",
       y = "Total de internações",
       x = "Evolução",
       caption = "Fonte: SIH-DATASUS, Mato Grosso, Janeiro/2023")

E se quisermos estratificar o gráfico acima pelo caráter da internação?

dados |>
  group_by(EVOLUCAO, CARATER) |>             
  summarise(total = n()) |>                  
  ggplot(aes(y = total, x = EVOLUCAO, fill = CARATER)) +     
  geom_col(position = "dodge") +                               
  theme_ipsum_ps() +                         
  labs(title = "Internações segundo evolução do paciente",
       subtitle = "Infarto agudo do miocárdio entre homens de 20 anos ou mais",
       y = "Total de internações",
       x = "Evolução",
       caption = "Fonte: SIH-DATASUS, Mato Grosso, Janeiro/2023",
       fill = "Caráter da internação")

Adicionamos uma segunda variável dentro da função group_by e depois a colocamos dentro da estética do gráfico com o argumento fill. Dentro da função geom_col adicionamos o argumento “dodge” para dizer que queremos uma coluna ao lado da outra. Assim, descobrimos que todos os pacientes que evoluíram a óbito foram internados em caráter de urgência.

Muitos outros gráficos você pode gerar com o ggplot e você pode conhecer os comandos neste link.

Pacote ggstatsplot

E se pudéssemos com algumas poucas linhas de código gerar um gráfico ao mesmo tempo que gerar a análise estatística deste gráfico e plotar tudo isso junto? É o que o pacote ggstatsplot faz por nós. Pacientes que evoluíram de óbito permaneceram por tempo de internação maior que pacientes que evoluíram de alta? Vejamos:

dados |> 
  ggbetweenstats(y = TEMPO,
                 x = EVOLUCAO,
                 bf.message = FALSE,
                 ylab = "Tempo médio de internação (dias)",
                 xlab = "Evolução do paciente")

O que os dados disseram? Que entre homens de 20 anos ou mais hospitalizados por infarto agudo do miocárdio em Mato Grosso em janeiro de 2023 os pacientes que evoluíram a óbito apresentaram tempo médio de internação estatisticamente menor que os pacientes que evoluíram de alta.

Outra pergunta: O tempo de internação aumenta o custo da internação?

dados |> 
  ggscatterstats(y = VALOR, 
                 x = TEMPO,
                 bf.message = FALSE,
                 ylab = "Custo da internação (R$)",
                 xlab = "Tempo de internação (dias)")

Sim, houve uma correlação positiva, moderada e estatisticamente significativa entre tempo e custo da internação, ou seja, quanto maior o tempo, maior foi o custo da internação.

Pacote microdatasus

Se ao invés de trabalharmos apenas com o mês de janeiro de 2023, quisermos trabalhar com dados de todos os meses disponíveis deste ano podemos realizar o procedimento anterior de download dos dados manualmente um a um ou utilizar o pacote microdatasus para automatizar tudo isso. Infelizmente, ele não se encontra no repositório oficial de pacotes do R, então temos que seguir alguns passos diferentes para realizar sua instalação:

install.packages("remotes")
remotes::install_github("rfsaldanha/microdatasus")

Agora, utilizaremos o pacote para baixar dados do DATASUS, processar estes dados, aplicar filtros por critérios de inclusão e, por fim, selecionar as variáveis de interesse para o estudo.

#--------- Carregando

library(microdatasus)

#--------- Download

dados <- fetch_datasus(information_system = "SIH-RD",
                       year_start = 2023,
                       month_start = 1,
                       year_end = 2023,
                       month_end = 12,
                       uf = "MT",
                       vars = c("MES_CMPT", "CAR_INT", "DIAS_PERM", 
                                "VAL_TOT", "MORTE", "IDADE", 
                                "COD_IDADE", "DIAG_PRINC", "SEXO"))

#--------- Processamento

dados <- dados |> 
  filter(COD_IDADE == "4",         
         IDADE >= 20,              
         SEXO == "1",              
         DIAG_PRINC == "I219") |> 
  select(MES_CMPT, CAR_INT, DIAS_PERM, VAL_TOT, MORTE) |> 
  mutate(CAR_INT = case_when(CAR_INT == "01" ~ "Eletivo",
                             CAR_INT == "02" ~ "Urgência"),
         MORTE = case_when(MORTE == 0 ~ "Alta",
                           MORTE == 1 ~ "Óbito")) |> 
  rename("EVOLUCAO" = "MORTE",
         "MES" = "MES_CMPT",
         "TEMPO" = "DIAS_PERM",
         "VALOR" = "VAL_TOT",
         "CARATER" = "CAR_INT")

Teremos então o seguinte dataframe e, com os critérios utilizados, localizamos a ocorrência de 800 internações por infarto agudo do miocárdio entre janeiro e setembro de 2023 em indivíduos do sexo masculino com idade de 20 anos ou mais atendidos pela rede SUS em Mato Grosso.

MES CARATER TEMPO VALOR EVOLUCAO
530 01 Urgência 12 4885.56 Alta
938 01 Urgência 0 1194.47 Óbito
1239 01 Urgência 2 589.12 Alta
1294 01 Urgência 3 1883.32 Alta
1703…5 01 Urgência 30 906.07 Alta
1888 01 Urgência 5 588.12 Alta
3522 01 Urgência 2 588.12 Alta
3821 01 Urgência 9 3240.75 Alta
4006 01 Urgência 1 1788.12 Óbito
4007 01 Urgência 17 668.36 Alta

Podemos agora, com um poder estatístico um pouco melhor, avaliar a proporção da letalidade hospitalar:

dados |> 
  ggbarstats(y = MES,
             x = EVOLUCAO,
             bf.message = FALSE,
             ylab = "Proporção",
             xlab = "Mês de internação",
             legend.title = "Evolução",
             title = "Letalidade mensal por infarto agudo do miocárdio",
             package = "wesanderson",
             palette = "Darjeeling1")

Não houve diferença estatisticamente significativa entre os meses de janeiro e setembro de 2023 na letalidade do infarto agudo do miocárdio entre homens de 20 anos ou mais atendidos pela rede SUS em Mato Grosso.

Desafio

Chegou a hora de você colocar em prática e consolidar as habilidades adquiridas com este curso. Abra um novo script no seu RStudio, salve-o com o nome Desafio Aceito, copie o código abaixo nele e execute:

Você fez o download de dados de declarações de óbitos do Sistema de Informação Sobre Mortalidade (SIM) do DATASUS. Agora vem a missão (que você já aceitou, até escreveu no script rs):

1. Filtrar a causa básica (CAUSABAS) pelo CID-10 de morte instantânea (R960). 2. Selecionar as variáveis da tabela abaixo.

Variáveis Descrição
DTOBITO Data do óbito
DTNASC Data de nascimento
SEXO Sexo
ESTCIV Estado civil
LOCOCOR Local de ocorrência

3. Rotular os dados das variáveis SEXO, ESTCIV e LOCOCOR utilizando case_when.

SEXO Rótulo
1 Masculino
2 Feminino
ESTCIV Rótulo
1 Solteiro
2 Casado
3 Viúvo
4 Divorciado
5 União consensual
9 Não informado
LOCOCOR Rótulo
1 Hospital
2 Outro estab. de saúde
3 Domicílio
4 Via pública
5 Outros
9 Não informado

4. Elaborar uma tabela com o pacote gtsummary com estas três variáveis.

5. Elaborar um gráfico com o pacote ggstatsplot da sua escolha.

Perguntas a serem respondidas com os dados:

  1. Quantos óbitos ocorreram por morte instantânea em Mato Grosso em 2022?
  2. Homens morreram mais por morte instantânea que mulheres em Mato Grosso em 2022?
  3. Em qual local as pessoas morreram mais por morte instantânea em Mato Grosso em 2022?