O pacote gtsummary é uma ferramenta projetada para facilitar a criação de tabelas sumarizadas, especialmente úteis em artigos científicos. Ele é frequentemente utilizado em análises estatísticas e relatórios de pesquisa, permitindo que os usuários apresentem resultados de forma clara e organizada.
Aplicações na Elaboração de Tabelas:
• Tabelas Descritivas: Permite criar tabelas que resumem características demográficas ou clínicas de uma população de estudo, apresentando medidas como média, mediana, desvio padrão, entre outras.
• Tabelas de Comparação: Facilita a comparação entre grupos, mostrando diferenças estatísticas e medidas de efeito, como odds ratios ou hazard ratios.
• Relatórios de Resultados: Ideal para compilar resultados de análises estatísticas em um formato que pode ser diretamente incluído em manuscritos.
** Lembrando ** Antes de iniciar as análises devemos
Definir a pasta de trabalho
Instalar e carregar os pacotes necessários
Ler a base de dados
Transformar para factor todas as variaveis caracter
Padronizar os nomes das variaveis do banco de dados
Padronizar o número de casas decimais dos valores percentuais
# Pacotes necessários -----------------------------------------------------
library(rio) #
library(janitor) # Limpeza dos nomes das variáveis
library(gtsummary) # Para criar tabelas
library(dplyr) # Para manipulação de dados
# Ler Base de dados -----------------------------------------------------------
dados <- import("base_geral.csv")
# Transforma para factor todas as variaveis caracter
dados <- dados %>%
mutate (across(where(is.character), (as.factor)))
# Organização da base de dados --------------------------------------------
## Padroniza os nomes das variaveis - janitor
dados <- clean_names(dados)
### Padronizar o numero de casas dos valores percentuais
list(
"tbl_summary-fn:percent_fun" = function(x)
sprintf(x * 100, fmt = '%#.1f')
) %>%
set_gtsummary_theme()
Colocar em ordem as respostas das variáveis categóricas ordinais
No gtsummary as tabelas, por padrão, as respostas das variáveis se apresentam em ordem alfabéticas, mas se houver variáveis categóricas ordinais, deve-se estabelecer a ordem correta.
# Estabelecendo ordem das variáveis categóricas ordinais - Renda ---------------------------------------
## Variavel renda
ordem_renda <- c("Menos de 1 sal", "1 a 3 sal", "4 a 6 sal", "Nao sabe")
dados$renda <- factor(dados$renda, levels = ordem_renda,
ordered = TRUE)
## Variavel class_imc
ordem_class_imc <- c("Desnutricao", "Eutrofia", "Sobrepeso", "Obesidade")
dados$class_imc <- factor(dados$class_imc, levels = ordem_class_imc,
ordered = TRUE)
Na foi realizada a definição de ordem da variavel escolaridade, pois a ordem alfabética coincidiu com a ordem desejada.
Tabelas de frequência simples
As tabelas de frequencia simples resumem características demográficas ou clínicas de uma população de estudo, apresentando medidas como média, mediana, desvio padrão, entre outras.
tab_descritiva <- dados %>%
select (sexo: class_imc) %>%
tbl_summary (
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} ({p}%)"
),
digits = all_continuous() ~ 1, missing = "no"
) %>%
modify_header(label ~ "**Características**")
tab_descritiva
Características | N = 771 |
---|---|
sexo | |
F | 45 (60.0%) |
M | 30 (40.0%) |
idade | 32.3 (20.4) |
escolaridade | |
Alfabetizado | 24 (31.2%) |
Fundamental | 31 (40.3%) |
Medio | 15 (19.5%) |
Superior | 7 (9.1%) |
renda | |
Menos de 1 sal | 10 (13.0%) |
1 a 3 sal | 63 (81.8%) |
4 a 6 sal | 3 (3.9%) |
Nao sabe | 1 (1.3%) |
imc | 23.3 (6.0) |
class_imc | |
Desnutricao | 4 (5.2%) |
Eutrofia | 41 (53.2%) |
Sobrepeso | 27 (35.1%) |
Obesidade | 5 (6.5%) |
1 n (%); Mean (SD) |
Tabela de frequencia cruzada
As tabelas de frequencia cruzada compara os grupos (masculino e feminino) em relação as outras variáveis. E calcula automaticamente o teste estatístico adequado.
## Tabela cruzada by Sexo
tab_cruzada <- dados %>%
select (sexo: class_imc) %>%
tbl_summary (
by = sexo,
statistic = list(all_categorical() ~ "{n} ({p}%)"),
digits = all_continuous() ~ 2,
) %>%
modify_header(label ~ "**Características**") %>%
bold_labels() %>% italicize_levels() %>%
add_overall(col_label = "Total", last = F) %>%
add_p(
pvalue_fun = function(x)
style_pvalue(x, digits = 3)
)
## 2 missing rows in the "sexo" column have been removed.
## The following warnings were returned during `add_p()`:
## ! For variable `idade` (`sexo`) and "estimate", "statistic", "p.value",
## "conf.low", and "conf.high" statistics: não é possível computar o valor de p
## exato com o de desempate
## ! For variable `idade` (`sexo`) and "estimate", "statistic", "p.value",
## "conf.low", and "conf.high" statistics: impossível computar os intervalos de
## confiança exatos com empate
tab_cruzada
Características | Total1 | F N = 451 |
M N = 301 |
p-value2 |
---|---|---|---|---|
idade | 31.00 (14.00, 44.00) | 35.00 (21.00, 44.00) | 26.50 (6.00, 39.00) | 0.027 |
escolaridade | 0.008 | |||
Alfabetizado | 23 (30.7%) | 8 (17.8%) | 15 (50.0%) | |
Fundamental | 31 (41.3%) | 19 (42.2%) | 12 (40.0%) | |
Medio | 14 (18.7%) | 12 (26.7%) | 2 (6.7%) | |
Superior | 7 (9.3%) | 6 (13.3%) | 1 (3.3%) | |
renda | 0.487 | |||
Menos de 1 sal | 10 (13.3%) | 6 (13.3%) | 4 (13.3%) | |
1 a 3 sal | 62 (82.7%) | 36 (80.0%) | 26 (86.7%) | |
4 a 6 sal | 3 (4.0%) | 3 (6.7%) | 0 (0.0%) | |
Nao sabe | 0 (0.0%) | 0 (0.0%) | 0 (0.0%) | |
imc | 24.52 (19.62, 27.48) | 25.08 (21.47, 27.46) | 22.31 (16.32, 27.48) | 0.159 |
class_imc | 0.208 | |||
Desnutricao | 3 (4.0%) | 3 (6.7%) | 0 (0.0%) | |
Eutrofia | 40 (53.3%) | 20 (44.4%) | 20 (66.7%) | |
Sobrepeso | 27 (36.0%) | 19 (42.2%) | 8 (26.7%) | |
Obesidade | 5 (6.7%) | 3 (6.7%) | 2 (6.7%) | |
1 Median (Q1, Q3); n (%) | ||||
2 Wilcoxon rank sum test; Fisher’s exact test; Wilcoxon rank sum exact test |