# EpiSimple - analysis scaffold
# Autor del proyecto: [completar]
# Este archivo NO decide el analisis. Ejecuta un plan previamente definido.
# Revise protocolo, diccionario y nombres reales de columnas antes de ejecutar.

# 0) Paquetes --------------------------------------------------------------
required <- c("tidyverse", "gtsummary", "broom")
missing <- required[!vapply(required, requireNamespace, logical(1), quietly = TRUE)]
if (length(missing)) install.packages(missing)
library(tidyverse)
library(gtsummary)
library(broom)

# 1) Importacion ------------------------------------------------------------
# Reemplace por la ruta o use file.choose().
dat <- readr::read_csv(file.choose(), show_col_types = FALSE)

# 2) Auditoria basica -------------------------------------------------------
glimpse(dat)
stopifnot(!anyDuplicated(names(dat)))

# Defina aqui variables ESSENCIALES segun el protocolo.
required_vars <- c("patient_id", "exposure", "primary_outcome")
absent <- setdiff(required_vars, names(dat))
if (length(absent)) stop("Faltan variables requeridas: ", paste(absent, collapse = ", "))

# 3) Reglas de calidad ------------------------------------------------------
# No convierta missing a cero por defecto.
# Revise duplicados de la unidad de analisis.
if (anyDuplicated(dat$patient_id)) {
  warning("patient_id no es unico. Verifique si la unidad de analisis requiere formato longitudinal.")
}

# Resumen de missing por variable
missing_summary <- dat %>%
  summarise(across(everything(), ~sum(is.na(.x)))) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "n_missing") %>%
  mutate(pct_missing = 100 * n_missing / nrow(dat))
print(missing_summary)

# 4) Descriptivos -----------------------------------------------------------
# PERSONALICE las variables segun el protocolo.
tbl1 <- dat %>%
  select(any_of(c("exposure", "primary_outcome"))) %>%
  tbl_summary(missing = "ifany")
print(tbl1)

# 5) Analisis primario ------------------------------------------------------
# NO active un modelo hasta definir:
# - estimando
# - outcome y escala
# - exposicion/intervencion
# - comparador
# - time zero / horizonte temporal
# - covariables prespecificadas y su justificacion
# - estrategia para missing
# - analisis de sensibilidad

# Ejemplo SOLO SI el outcome es binario y un modelo logistico responde su SAP:
# fit <- glm(primary_outcome ~ exposure + covariate1 + covariate2,
#            data = dat, family = binomial())
# broom::tidy(fit, exponentiate = TRUE, conf.int = TRUE)

# 6) Tablas y figuras -------------------------------------------------------
# Construyalas desde objetos derivados del analisis final; no transcriba cifras a mano.

# 7) Reproducibilidad -------------------------------------------------------
sessionInfo()
