1. Caracterização da amostra
1.1 Idade
idade_resumo <- dados_abp |>
summarise(
n = n(),
media = mean(idade, na.rm = TRUE),
dp = sd(idade, na.rm = TRUE),
mediana = median(idade, na.rm = TRUE),
q1 = quantile(idade, 0.25, na.rm = TRUE),
q3 = quantile(idade, 0.75, na.rm = TRUE),
min = min(idade, na.rm = TRUE),
max = max(idade, na.rm = TRUE)
)
kable(idade_resumo, digits = 2,
caption = "Resumo descritivo da idade (anos)")
Resumo descritivo da idade (anos)
| 287 |
54.3 |
14.79 |
56 |
43.5 |
65 |
18 |
94 |
1.2 Sexo
tab_sexo <- table(dados_abp$genero)
prop_sexo <- prop.table(tab_sexo)
kable(cbind(
Sexo = names(tab_sexo),
N = as.vector(tab_sexo),
Proporcao = round(100 * as.vector(prop_sexo), 1)
),
col.names = c("Sexo", "N", "%"),
caption = "Distribuição de sexo na amostra")
Distribuição de sexo na amostra
| Feminino |
150 |
52.3 |
| Masculino |
137 |
47.7 |
1.3 Desfechos hospitalares
tab_desfecho <- table(dados_abp$desfecho)
prop_desfecho <- prop.table(tab_desfecho)
kable(cbind(
Desfecho = names(tab_desfecho),
N = as.vector(tab_desfecho),
Proporcao = round(100 * as.vector(prop_desfecho), 1)
),
col.names = c("Desfecho", "N", "%"),
caption = "Distribuição dos desfechos hospitalares")
Distribuição dos desfechos hospitalares
| Alta |
274 |
95.5 |
| Óbito |
11 |
3.8 |
| Transferência Externa |
2 |
0.7 |
1.4 Risco gastrointestinal (qualquer)
tab_gi <- table(dados_abp$gi_risco_qualquer_fac)
prop_gi <- prop.table(tab_gi)
kable(cbind(
Risco_GI = names(tab_gi),
N = as.vector(tab_gi),
Proporcao = round(100 * as.vector(prop_gi), 1)
),
col.names = c("Risco GI", "N", "%"),
caption = "Distribuição de risco gastrointestinal (qualquer)")
Distribuição de risco gastrointestinal (qualquer)
| Sem risco GI |
111 |
38.7 |
| Com risco GI |
176 |
61.3 |
1.5 Grupo cirúrgico
tab_grupo <- table(dados_abp$grupo_cx)
prop_grupo <- prop.table(tab_grupo)
kable(cbind(
Grupo_Cx = names(tab_grupo),
N = as.vector(tab_grupo),
Proporcao = round(100 * as.vector(prop_grupo), 1)
),
col.names = c("Grupo cirúrgico", "N", "%"),
caption = "Distribuição dos grupos cirúrgicos")
Distribuição dos grupos cirúrgicos
| Clínico / Sem Intervenção |
75 |
26.1 |
| Colorretal / Prócto |
2 |
0.7 |
| Hepatobiliar / Transplante |
30 |
10.5 |
| Parede Abdominal / Hérnias |
7 |
2.4 |
| Procedimentos Intervencionistas (Não Cirúrgicos) |
65 |
22.6 |
| Trato Gastrointestinal Alto |
108 |
37.6 |
1.6 Tempos de internação, UTI e enfermaria
tempos_resumo <- dados_abp |>
summarise(
mediana_dias_internacao = median(dias_internacao, na.rm = TRUE),
q1_dias_internacao = quantile(dias_internacao, 0.25, na.rm = TRUE),
q3_dias_internacao = quantile(dias_internacao, 0.75, na.rm = TRUE),
mediana_dias_uti = median(dias_uti, na.rm = TRUE),
q1_dias_uti = quantile(dias_uti, 0.25, na.rm = TRUE),
q3_dias_uti = quantile(dias_uti, 0.75, na.rm = TRUE),
mediana_dias_enfermaria = median(dias_enfermaria, na.rm = TRUE),
q1_dias_enfermaria = quantile(dias_enfermaria, 0.25, na.rm = TRUE),
q3_dias_enfermaria = quantile(dias_enfermaria, 0.75, na.rm = TRUE)
)
kable(tempos_resumo, digits = 2,
caption = "Resumo dos tempos de internação, UTI e enfermaria (medianas e quartis)")
Resumo dos tempos de internação, UTI e enfermaria (medianas e
quartis)
| 6 |
4 |
12 |
0 |
0 |
0 |
4 |
3 |
9 |
1.7 Antecedentes pessoais agrupados
Os antecedentes pessoais foram reagrupados em grandes categorias
clínicas (hipertensão arterial sistêmica, diabetes mellitus,
dislipidemia, doenças cardiovasculares, pulmonares, renais, hepáticas,
transtornos psiquiátricos, tabagismo, etilismo, obesidade, cirurgias
prévias e ausência de antecedentes). A tabela abaixo apresenta o número
e a proporção de pacientes em cada categoria.
Antecedentes pessoais agrupados por categoria clínica
|
Categoria
|
N
|
%
|
|
Cirurgias prévias
|
176
|
61.3
|
|
Hipertensão arterial sistêmica (HAS)
|
115
|
40.1
|
|
Tabagismo (atual ou prévio)
|
75
|
26.1
|
|
Etilismo (atual ou prévio)
|
57
|
19.9
|
|
Diabetes mellitus (DM)
|
56
|
19.5
|
|
Dislipidemia
|
29
|
10.1
|
|
Doenças cardiovasculares
|
26
|
9.1
|
|
Sem antecedentes relatados
|
26
|
9.1
|
|
Obesidade
|
25
|
8.7
|
|
Transtornos psiquiátricos
|
21
|
7.3
|
|
Doenças pulmonares
|
12
|
4.2
|
|
Doença renal
|
12
|
4.2
|
|
Doença hepática
|
11
|
3.8
|
1.8 Diagnóstico de entrada (HD) – categorias agrupadas
library(dplyr)
library(stringr)
library(knitr)
# Garantir recodificação (se já fez antes, não tem problema repetir)
dados_abp <- dados_abp |>
mutate(
hd_figado = ifelse(str_detect(hd, regex("fígado|figado|hepatic|cirrose|hepatite", ignore_case = TRUE)), 1, 0),
hd_biliar = ifelse(str_detect(hd, regex("colecist|colelit|coledoc|colang", ignore_case = TRUE)), 1, 0),
hd_pancreas = ifelse(str_detect(hd, regex("pancrea", ignore_case = TRUE)), 1, 0),
hd_neoplasia = ifelse(str_detect(hd, regex("neo|carcin|tumor|adenocarc", ignore_case = TRUE)), 1, 0),
hd_posop = ifelse(str_detect(hd, regex("PO \\(|POT \\(|gastrect|esofagect|fundop|laparot|duodenopancreatect|colectom|herniorrafia|gastroplastia", ignore_case = TRUE)), 1, 0),
hd_hernia = ifelse(str_detect(hd, regex("hern", ignore_case = TRUE)), 1, 0),
hd_esofago_refluxo = ifelse(str_detect(hd, regex("acal|reflux|Nissen|megaesof|esofag", ignore_case = TRUE)), 1, 0)
)
# Resumo em formato "comprido" (1 linha por categoria)
hd_sintetico <- tibble::tibble(
`Categoria clínica` = c(
"Fígado",
"Biliar",
"Pâncreas",
"Neoplasias",
"Pós-operatório",
"Hérnias",
"Esôfago / Refluxo / Acalásia"
),
N = c(
sum(dados_abp$hd_figado, na.rm = TRUE),
sum(dados_abp$hd_biliar, na.rm = TRUE),
sum(dados_abp$hd_pancreas, na.rm = TRUE),
sum(dados_abp$hd_neoplasia, na.rm = TRUE),
sum(dados_abp$hd_posop, na.rm = TRUE),
sum(dados_abp$hd_hernia, na.rm = TRUE),
sum(dados_abp$hd_esofago_refluxo, na.rm = TRUE)
)
)
kable(
hd_sintetico,
caption = "Diagnóstico de entrada (HD) agrupado por categorias clínicas",
align = c("l", "c")
)
Diagnóstico de entrada (HD) agrupado por categorias
clínicas
| Fígado |
79 |
| Biliar |
93 |
| Pâncreas |
20 |
| Neoplasias |
85 |
| Pós-operatório |
177 |
| Hérnias |
9 |
| Esôfago / Refluxo / Acalásia |
30 |
2.2 Tempo de internação (H1)
internacao_por_abp <- dados_abp |>
group_by(abp_fac) |>
summarise(
n = n(),
mediana = median(dias_internacao, na.rm = TRUE),
q1 = quantile(dias_internacao, 0.25, na.rm = TRUE),
q3 = quantile(dias_internacao, 0.75, na.rm = TRUE)
)
kable(internacao_por_abp, digits = 2,
caption = "Tempo de internação por grupo de ABP (mediana e IIQ)")
Tempo de internação por grupo de ABP (mediana e IIQ)
| Sem ABP |
253 |
5 |
4 |
11.00 |
| Com ABP |
34 |
13 |
7 |
31.25 |
teste_internacao <- wilcox.test(dias_internacao ~ abp, data = dados_abp)
teste_internacao
##
## Wilcoxon rank sum test with continuity correction
##
## data: dias_internacao by abp
## W = 2284.5, p-value = 8.227e-06
## alternative hypothesis: true location shift is not equal to 0
2.3 Dias de UTI e enfermaria
uti_por_abp <- dados_abp |>
group_by(abp_fac) |>
summarise(
mediana_uti = median(dias_uti, na.rm = TRUE),
q1_uti = quantile(dias_uti, 0.25, na.rm = TRUE),
q3_uti = quantile(dias_uti, 0.75, na.rm = TRUE),
mediana_enf = median(dias_enfermaria, na.rm = TRUE),
q1_enf = quantile(dias_enfermaria, 0.25, na.rm = TRUE),
q3_enf = quantile(dias_enfermaria, 0.75, na.rm = TRUE)
)
kable(uti_por_abp, digits = 2,
caption = "Dias de UTI e enfermaria por grupo de ABP (mediana e IIQ)")
Dias de UTI e enfermaria por grupo de ABP (mediana e
IIQ)
| Sem ABP |
0 |
0 |
0.00 |
4 |
2 |
9.00 |
| Com ABP |
2 |
0 |
9.25 |
7 |
4 |
13.75 |
teste_uti <- wilcox.test(dias_uti ~ abp, data = dados_abp)
teste_enf <- wilcox.test(dias_enfermaria ~ abp, data = dados_abp)
teste_uti
##
## Wilcoxon rank sum test with continuity correction
##
## data: dias_uti by abp
## W = 2535, p-value = 2.876e-07
## alternative hypothesis: true location shift is not equal to 0
teste_enf
##
## Wilcoxon rank sum test with continuity correction
##
## data: dias_enfermaria by abp
## W = 3025, p-value = 0.004719
## alternative hypothesis: true location shift is not equal to 0
2.4 Mortalidade e ABP
tab_morte <- table(dados_abp$abp_fac, dados_abp$obito_fac)
kable(tab_morte, caption = "Tabela cruzada: ABP x óbito")
Tabela cruzada: ABP x óbito
| Sem ABP |
248 |
5 |
| Com ABP |
28 |
6 |
chisq_morte <- chisq.test(tab_morte, correct = TRUE)
chisq_morte
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_morte
## X-squared = 15.944, df = 1, p-value = 6.525e-05
or_morte <- oddsratio(tab_morte)
or_morte
## $data
##
## Sem óbito Óbito Total
## Sem ABP 248 5 253
## Com ABP 28 6 34
## Total 276 11 287
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Sem ABP 1.00000 NA NA
## Com ABP 10.40836 2.876604 39.44726
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Sem ABP NA NA NA
## Com ABP 0.0005815753 0.0005394042 7.870005e-06
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
3. Associação entre ABP e risco gastrointestinal (H2)
tab_gi_abp <- table(dados_abp$abp_fac, dados_abp$gi_risco_qualquer_fac)
kable(tab_gi_abp, caption = "Tabela cruzada: ABP x risco gastrointestinal (qualquer)")
Tabela cruzada: ABP x risco gastrointestinal
(qualquer)
| Sem ABP |
105 |
148 |
| Com ABP |
6 |
28 |
chisq_gi <- chisq.test(tab_gi_abp, correct = TRUE)
chisq_gi
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tab_gi_abp
## X-squared = 6.2206, df = 1, p-value = 0.01263
or_gi <- oddsratio(tab_gi_abp)
or_gi
## $data
##
## Sem risco GI Com risco GI Total
## Sem ABP 105 148 253
## Com ABP 6 28 34
## Total 111 176 287
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Sem ABP 1.000000 NA NA
## Com ABP 3.236004 1.370868 9.023813
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Sem ABP NA NA NA
## Com ABP 0.006101355 0.008056401 0.007326186
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"