Me gustaria que usases programación en R, el estilo de programación del tidyverse y librerías de maquetación de resultados en formato académico. Quiero crear un informe Rmd donde abras la base de datos en formato SPSS llamada saludPublica1000.sav y quiero ver una tabla donde se comparan mediante t-test las variables numéricas edad, imc y hdl por sexo.
También me gustaría ver boxplot para mostrar las gráficas equivalentes con un diseño profesional.
Me gustaría añadir una tabla de tipo académico donde se haga un análisis de regresión de hdl en función de sexo, edad e imc.
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
library(tidyverse)
library(haven)
library(gtsummary)
library(patchwork)
library(broom)
datos <- read_sav("saludPublica1000.sav") %>%
select(sexo, edad, imc, hdl) %>%
mutate(sexo = as_factor(sexo))
tbl_summary(
datos,
by = sexo,
include = c(edad, imc, hdl),
statistic = list(all_continuous() ~ "{mean} ({sd})"),
digits = list(all_continuous() ~ 3)
) %>%
add_p(
test = list(all_continuous() ~ "t.test"),
pvalue_fun = ~ style_pvalue(.x, digits = 3)
) %>%
modify_header(label = "**Variable**") %>%
modify_caption("**Tabla 1.** Comparación de medias mediante t-test")
Variable | Mujer N = 4971 |
Hombre N = 5031 |
p-value2 |
---|---|---|---|
Edad | 49.761 (14.470) | 50.400 (15.238) | 0.497 |
Indice de masa corporal | 25.623 (3.191) | 26.250 (3.539) | 0.003 |
Colesterol HDL | 43.601 (8.789) | 44.437 (8.718) | 0.131 |
1 Mean (SD) | |||
2 Welch Two Sample t-test |
# Función para crear boxplots estandarizados
crear_boxplot <- function(variable) {
ggplot(datos, aes(x = sexo, y = {{variable}})) +
geom_boxplot(fill = "#4682B4", alpha = 0.8, outlier.shape = NA) +
geom_jitter(width = 0.1, alpha = 0.5, size = 1.5) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4, color = "red") +
labs(x = "Sexo", y = "Valor") +
theme_minimal() +
theme(
panel.grid.major = element_line(color = "grey90"),
panel.background = element_rect(fill = "white"),
axis.title = element_text(face = "bold"),
plot.title = element_text(size = 12, hjust = 0.5)
)
}
# Crear y combinar gráficos
(crear_boxplot(edad) + labs(title = "Edad")) |
(crear_boxplot(imc) + labs(title = "Índice de Masa Corporal")) |
(crear_boxplot(hdl) + labs(title = "HDL"))
modelo <- lm(hdl ~ sexo + edad + imc, data = datos)
tbl_regression(modelo, exponentiate = FALSE) %>%
modify_header(label = "**Variable**") %>%
modify_caption("**Tabla 2.** Análisis de regresión de HDL en función de sexo, edad e IMC")
Variable | Beta | 95% CI1 | p-value |
---|---|---|---|
Sexo | |||
Mujer | — | — | |
Hombre | 1.4 | 0.46, 2.4 | 0.004 |
Edad | -0.12 | -0.16, -0.09 | <0.001 |
Indice de masa corporal | -0.83 | -0.99, -0.68 | <0.001 |
1 CI = Confidence Interval |