Introdução
Este script apresenta o processo de manipulação e análise de dados no R para a criação de uma Tabela de Características e Sintomas, uma ferramenta fundamental na Epidemiologia e na pesquisa em saúde.
O objetivo principal é comparar a frequência de sintomas específicos entre dois grupos distintos: “Reagente” e “Não Reagente”. Essa comparação nos permite identificar quais sintomas estão estatisticamente mais associados a cada um dos grupos, fornecendo insights importantes para a compreensão de um determinado quadro clínico ou condição.
Para alcançar este resultado, utilizamos um conjunto poderoso de pacotes do ecossistema R:
rio para a importação eficiente da base
de dados.
janitor para padronizar e limpar os
nomes das variáveis.
dplyr para a manipulação e
transformação dos dados, garantindo a preparação ideal das
variáveis.
gtsummary para a criação da tabela final, que é rica em
detalhes, formatada de forma profissional e inclui testes estatísticos
de comparação (p-valores), essenciais para a interpretação dos
resultados.
A seguir, detalharemos cada etapa, desde o carregamento dos dados até a customização da tabela para uma apresentação clara e padronizada.
# Pacotes necessários -----------------------------------------------------
library(rio) # Importa a base de dados
library(janitor) # Padroniza os nomes das variáveis
##
## Anexando pacote: 'janitor'
## Os seguintes objetos são mascarados por 'package:stats':
##
## chisq.test, fisher.test
library(gtsummary) # Cria tabelas
library(dplyr) # Manipula de dados
##
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
##
## filter, lag
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, setequal, union
# Ler artigo com rio:import
sintomas <- import("Sintomas.csv")
## Estrutura da base de dados
glimpse(sintomas)
## Rows: 291
## Columns: 16
## $ Protocolo <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, …
## $ Febre <chr> "VERDADEIRO", "VERDADEIRO", "FALSO", "FALSO", "FALSO", …
## $ Dordecabeca <chr> "VERDADEIRO", "VERDADEIRO", "VERDADEIRO", "VERDADEIRO",…
## $ Coriza <chr> "VERDADEIRO", "FALSO", "FALSO", "VERDADEIRO", "FALSO", …
## $ Tosse <chr> "VERDADEIRO", "VERDADEIRO", "FALSO", "VERDADEIRO", "FAL…
## $ Dordegarganta <chr> "VERDADEIRO", "FALSO", "VERDADEIRO", "FALSO", "FALSO", …
## $ Dornocorpo <chr> "VERDADEIRO", "VERDADEIRO", "VERDADEIRO", "VERDADEIRO",…
## $ Dorabdominal <chr> "VERDADEIRO", "FALSO", "FALSO", "FALSO", "FALSO", "FALS…
## $ Diarreia <chr> "VERDADEIRO", "VERDADEIRO", "VERDADEIRO", "VERDADEIRO",…
## $ Nausea <chr> "VERDADEIRO", "FALSO", "FALSO", "FALSO", "FALSO", "FALS…
## $ Vomito <chr> "VERDADEIRO", "FALSO", "VERDADEIRO", "FALSO", "FALSO", …
## $ Perdadeolfato <chr> "FALSO", "FALSO", "FALSO", "FALSO", "FALSO", "FALSO", "…
## $ Perdadepaladar <chr> "FALSO", "FALSO", "VERDADEIRO", "FALSO", "FALSO", "FALS…
## $ Faltadear <chr> "FALSO", "FALSO", "FALSO", "FALSO", "FALSO", "FALSO", "…
## $ Fadiga <chr> "VERDADEIRO", "FALSO", "FALSO", "FALSO", "FALSO", "FALS…
## $ Resultado <chr> "NÃO REAGENTE", "REAGENTE", "NÃO REAGENTE", "REAGENTE",…
# Transforma para factor todas as variaveis caracter
sintomas <- sintomas %>%
mutate (across(where(is.character), (as.factor)))
# Usando o glimpse novamente
glimpse(sintomas)
## Rows: 291
## Columns: 16
## $ Protocolo <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, …
## $ Febre <fct> VERDADEIRO, VERDADEIRO, FALSO, FALSO, FALSO, VERDADEIRO…
## $ Dordecabeca <fct> VERDADEIRO, VERDADEIRO, VERDADEIRO, VERDADEIRO, FALSO, …
## $ Coriza <fct> VERDADEIRO, FALSO, FALSO, VERDADEIRO, FALSO, FALSO, VER…
## $ Tosse <fct> VERDADEIRO, VERDADEIRO, FALSO, VERDADEIRO, FALSO, FALSO…
## $ Dordegarganta <fct> VERDADEIRO, FALSO, VERDADEIRO, FALSO, FALSO, FALSO, FAL…
## $ Dornocorpo <fct> VERDADEIRO, VERDADEIRO, VERDADEIRO, VERDADEIRO, FALSO, …
## $ Dorabdominal <fct> VERDADEIRO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, F…
## $ Diarreia <fct> VERDADEIRO, VERDADEIRO, VERDADEIRO, VERDADEIRO, FALSO, …
## $ Nausea <fct> VERDADEIRO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, F…
## $ Vomito <fct> VERDADEIRO, FALSO, VERDADEIRO, FALSO, FALSO, FALSO, VER…
## $ Perdadeolfato <fct> FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO,…
## $ Perdadepaladar <fct> FALSO, FALSO, VERDADEIRO, FALSO, FALSO, FALSO, FALSO, F…
## $ Faltadear <fct> FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO,…
## $ Fadiga <fct> VERDADEIRO, FALSO, FALSO, FALSO, FALSO, FALSO, FALSO, F…
## $ Resultado <fct> NÃO REAGENTE, REAGENTE, NÃO REAGENTE, REAGENTE, NÃO REA…
Para padronização dos nomes das variaveis utilizamos o pacote janitor.
## Padroniza os nomes das variaveis
# Pacote Janitor
sintomas <- clean_names(sintomas)
### Coloca os percentuais com uma casa decimal
list(
"tbl_summary-fn:percent_fun" = function(x)
sprintf(x * 100, fmt = '%#.1f')
) %>%
set_gtsummary_theme()
# Verificando a ordem da variável resultado
levels(sintomas$resultado) # sem ordem estabelecida
## [1] "NÃO REAGENTE" "REAGENTE"
# Estabelecendo ordem das variáveis ---------------------------------------
## Variavel RESULTADO
ordem_resultado <- c("REAGENTE", "NÃO REAGENTE")
sintomas$resultado <- factor(sintomas$resultado, levels = ordem_resultado,
ordered = TRUE)
# Nova ordem estabelecida
levels(sintomas$resultado) # com ordem estabelecida
## [1] "REAGENTE" "NÃO REAGENTE"
Após as modificações a tabela final será:
# Tabela Sintomas ---------------------------------------------------------
tabela1 <- sintomas %>%
select (febre:resultado) %>%
tbl_summary (
by = resultado,
statistic = list(all_categorical() ~ "{n} ({p}%)"),
digits = all_continuous() ~ 2,
type = list(febre:fadiga ~ "dichotomous"),
value = list(febre:fadiga ~"VERDADEIRO")
) %>%
modify_header(label ~ "**Sintomas**") %>%
bold_labels() %>% italicize_levels() %>%
add_overall(col_label = "Total", last = F) %>%
add_p(
pvalue_fun = function(x)
style_pvalue(x, digits = 3)
)
tabela1
| Sintomas | Total1 | REAGENTE N = 1221 |
NÃO REAGENTE N = 1691 |
p-value2 |
|---|---|---|---|---|
| febre | 72 (24.7%) | 26 (21.3%) | 46 (27.2%) | 0.249 |
| dordecabeca | 138 (47.4%) | 51 (41.8%) | 87 (51.5%) | 0.103 |
| coriza | 85 (29.2%) | 35 (28.7%) | 50 (29.6%) | 0.868 |
| tosse | 92 (31.6%) | 34 (27.9%) | 58 (34.3%) | 0.243 |
| dordegarganta | 76 (26.1%) | 29 (23.8%) | 47 (27.8%) | 0.439 |
| dornocorpo | 93 (32.0%) | 37 (30.3%) | 56 (33.1%) | 0.612 |
| dorabdominal | 52 (17.9%) | 20 (16.4%) | 32 (18.9%) | 0.577 |
| diarreia | 38 (13.1%) | 16 (13.1%) | 22 (13.0%) | 0.981 |
| nausea | 34 (11.7%) | 9 (7.4%) | 25 (14.8%) | 0.052 |
| vomito | 30 (10.3%) | 10 (8.2%) | 20 (11.8%) | 0.314 |
| perdadeolfato | 28 (9.6%) | 8 (6.6%) | 20 (11.8%) | 0.132 |
| perdadepaladar | 27 (9.3%) | 7 (5.7%) | 20 (11.8%) | 0.077 |
| faltadear | 24 (8.2%) | 12 (9.8%) | 12 (7.1%) | 0.403 |
| fadiga | 45 (15.5%) | 16 (13.1%) | 29 (17.2%) | 0.346 |
| 1 n (%) | ||||
| 2 Pearson’s Chi-squared test | ||||