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

Tabla comparativa por sexo (t-test)

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")
Tabla 1. Comparación de medias mediante t-test
Variable Mujer
N = 497
1
Hombre
N = 503
1
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

Visualización de distribuciones

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

Notas:

  1. Los puntos rojos representan las medias
  2. Las cajas muestran el rango intercuartílico
  3. Los bigotes se extienden hasta 1.5*IQR

Análisis de regresión

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