Uma tabela muito utilizada em epidemiologia é a comparação dos sintomas mais frequentes em relação aos grupos “Reagente” e “Não Reagente”

Carregando os pacotes necessários e lendo a base de dados com o pacote “rio”

# 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")

A base de dados tem a seguinte estrutura

## 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",…

As variáveis categóricas foram classificadas como caracter, mas para montar as tabelas preciso que elas sejam factor.

# 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…

Preparando as variáveis para elaborar a tabela

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()

Por padrão a ordem de apresentação das respostas das variáveis é ordem alfabética, porém quando a variável categórica ordinal, precisamos definir a ordem que se deseja.

# 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"
# 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 = 122
1
NÃO REAGENTE
N = 169
1
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