Em muitas análises de dados é comum lidarmos com variáveis categóricas que possuem grande variedade de respostas. No entanto, nem sempre precisamos visualizar todas elas. Em determinados casos, pode ser mais útil destacar apenas as categorias mais frequentes, facilitando a interpretação e o foco nos principais resultados.
No exemplo a seguir, vamos utilizar o R em conjunto com o pacote forcats, que oferece funções específicas para manipulação de variáveis fator. O objetivo é elaborar uma planilha que apresente apenas as 6 respostas mais frequentes em uma variável categórica, reorganizando os dados de forma prática e clara para posterior análise.
## Elaborar tabela com as 10 mais frequentes respostas
# Preparando a pasta de trabalho ------------------------------------------
# Identifica o diretorio de trabalho
getwd()
## [1] "C:/Users/bergd/OneDrive/Documentos/Script_R"
# Define o diretorio de trabalho do projeto
setwd("~/Script_R")
# Pacotes necessários -----------------------------------------------------
library(rio)
library(janitor) # Limpeza dos nomes das variáveis
##
## Anexando pacote: 'janitor'
## Os seguintes objetos são mascarados por 'package:stats':
##
## chisq.test, fisher.test
library(gtsummary) # Para criar tabelas
library(dplyr) # Para manipulação 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
library(forcats)
# Ler base de dados -------------------------------------------------------
top10 <- import("Tab_mais_freq.csv")
# Tabela original com todos os municipios ---------------------------------
tab_original <- top10 %>%
select (municipio, desfecho) %>%
tbl_summary (
by = desfecho,
sort = list(municipio = "frequency"), # ordena por freq
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)
)
tab_original
Características | Total1 | MELHORADA N = 1901 |
ÓBITO N = 161 |
p-value2 |
---|---|---|---|---|
municipio | 0.295 | |||
BELÉM | 64 (31%) | 62 (33%) | 2 (13%) | |
ANANINDEUA | 26 (13%) | 24 (13%) | 2 (13%) | |
CASTANHAL | 9 (4.4%) | 7 (3.7%) | 2 (13%) | |
MOJÚ | 8 (3.9%) | 5 (2.6%) | 3 (19%) | |
BENEVIDES | 7 (3.4%) | 6 (3.2%) | 1 (6.3%) | |
ICOARACI | 6 (2.9%) | 5 (2.6%) | 1 (6.3%) | |
PARAGOMINAS | 6 (2.9%) | 5 (2.6%) | 1 (6.3%) | |
BARCARENA | 5 (2.4%) | 5 (2.6%) | 0 (0%) | |
BRAGANÇA | 5 (2.4%) | 5 (2.6%) | 0 (0%) | |
MUANÁ | 5 (2.4%) | 5 (2.6%) | 0 (0%) | |
CAPANEMA | 4 (1.9%) | 3 (1.6%) | 1 (6.3%) | |
MARITUBA | 4 (1.9%) | 4 (2.1%) | 0 (0%) | |
ABAETETUBA | 3 (1.5%) | 3 (1.6%) | 0 (0%) | |
OEIRAS | 3 (1.5%) | 3 (1.6%) | 0 (0%) | |
SÃO MIGUEL | 3 (1.5%) | 3 (1.6%) | 0 (0%) | |
BAGRE | 2 (1.0%) | 0 (0%) | 2 (13%) | |
BREVES | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
CONCÓRDIA DO PARÁ | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
IGARAPÉ MIRIM | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
INHANGAPI | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
MARACANÃ | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
MEDICILÂNDIA | 2 (1.0%) | 1 (0.5%) | 1 (6.3%) | |
MOCAJUBA | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
NOVO REPARTIMENTO | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
TOMÉ AÇÚ | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
ULIANÓPOLIS | 2 (1.0%) | 2 (1.1%) | 0 (0%) | |
ACARÁ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
ANAPÚ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
AUGUSTO CORREA | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
AURORA DO PARÁ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
CAMETÁ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
CURRALINHO | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
CURUÇÁ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
IGARAPÉ AÇÚ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
IPIXUNA | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
LIMOEIRO DO AJURU | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
MÃE DO RIO | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
OURÉM | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
OURILÂNDIA | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
PAU D'ARCO | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
PEIXE BOI | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
PONTA DE PEDRAS | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
PORTEL | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
PORTO DE MOZ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SANTA IZABEL | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SANTA LUZIA DO PARÁ | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SANTA MARIA DAS BARREIRAS | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SANTO ANTONIO | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SÃO DOMINGOS DO CAPIM | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
SOURE | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
TERRA ALTA | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
TRACAUATEUA | 1 (0.5%) | 1 (0.5%) | 0 (0%) | |
1 n (%) | ||||
2 Fisher’s exact test |
# Classificar uma nova variável "municipio1" para manter apenas as top 6
# Usamos 'fct_lump_n()' do pacote 'forcats'
# para agrupar as menos frequentes em "Outros"
dados_processados <- top10 %>%
mutate(
# Primeiro, agrupe as menos frequentes em "Outros"
municipio1 = fct_lump_n(municipio, n = 6,
other_level = "Outros",
ties.method = "last"),
# Segundo, reordene os níveis do fator por frequência descendente
# A função fct_infreq() ordena os níveis de um fator pela sua frequência,
# da mais comum para a menos comum.
municipio1 = fct_infreq(municipio1),
# Defina que a resposta outros ficara por ultimo
municipio1 = fct_relevel(municipio1, "Outros", after = Inf)
)
# 3. Criar a tabela de frequência com gtsummary
# Agora usamos a nova variável 'sua_variavel_top10'
tab_top10 <- dados_processados %>%
select (municipio1, desfecho) %>%
tbl_summary (
by = desfecho,
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)
)
tab_top10
Características | Total1 | MELHORADA N = 1901 |
ÓBITO N = 161 |
p-value2 |
---|---|---|---|---|
municipio1 | 0.013 | |||
BELÉM | 64 (31%) | 62 (33%) | 2 (13%) | |
ANANINDEUA | 26 (13%) | 24 (13%) | 2 (13%) | |
CASTANHAL | 9 (4.4%) | 7 (3.7%) | 2 (13%) | |
MOJÚ | 8 (3.9%) | 5 (2.6%) | 3 (19%) | |
BENEVIDES | 7 (3.4%) | 6 (3.2%) | 1 (6.3%) | |
PARAGOMINAS | 6 (2.9%) | 5 (2.6%) | 1 (6.3%) | |
Outros | 86 (42%) | 81 (43%) | 5 (31%) | |
1 n (%) | ||||
2 Fisher’s exact test |