## ============================================================
## RE-ANÁLISIS ESTADÍSTICO INDEPENDIENTE
## Panel de Estrés Oxidativo Salival (CIPNABIOT-UNACHI / SENACYT JC 2026)
## Datos crudos extraídos literalmente de PT1001_Registro_EstresOxidativo_v3.xlsx
## (hojas Prism_DPPH, Prism_PC, Prism_sAA, Controles)
## ============================================================

options(scipen = 999, digits = 6)

## ---------- 1. DPPH · % de inhibición (n potencial = 20) ----------
id   <- sprintf("P%02d", 1:20)
dpph_T1 <- c(90.666667,84.4,80,86.666667,NA,79.866667,84,NA,NA,84.266667,
             82.8,81.066667,82.933333,82.266667,79.333333,NA,86.4,85.733333,82.133333,83.866667)
dpph_T2 <- c(NA,NA,NA,NA,30.462725,8.354756,6.169666,15.424165,17.352185,0.385604,
             31.362468,-4.755784,6.940874,4.37018,-1.799486,17.737789,18.251928,-5.141388,15.167095,-1.156812)

## ---------- 2. PC-DNPH · % del pool (n potencial = 20) ----------
pc_T1 <- c(NA,89.138577,16.853933,NA,18.35206,47.191011,NA,NA,NA,61.423221,
           NA,51.310861,47.191011,58.426966,37.827715,95.505618,112.734082,39.700375,27.715356,31.835206)
pc_T2 <- c(13.605442,90.816327,66.666667,10.544218,NA,53.741497,68.367347,58.503401,28.911565,78.231293,
           NA,51.70068,64.965986,39.115646,39.115646,NA,66.326531,NA,85.034014,14.965986)

## ---------- 3. sAA · % de hidrólisis, valores BRUTOS (n potencial = 20) ----------
saa_T1 <- c(69.213483,74.719101,73.258427,75.955056,74.831461,76.179775,77.191011,NA,NA,75.617978,
            NA,72.247191,74.831461,77.078652,NA,78.089888,73.258427,78.314607,79.213483,74.719101)
saa_T2 <- c(66.815145,68.930958,67.817372,68.374165,71.046771,65.367483,66.146993,74.276169,70.935412,64.922049,
            69.487751,73.496659,60.13363,65.256125,NA,NA,70.155902,71.603563,71.158129,62.694878)

## ---------- Pool de referencia sAA (hoja Controles) ----------
## Blanco de almidón, Pool de saliva -> % hidrólisis del propio pool
pool_blanco_M1 <- 0.89;  pool_saliva_M1 <- 0.271
pool_blanco_M2 <- 0.898; pool_saliva_M2 <- 0.223
pool_pct_M1 <- (pool_blanco_M1 - pool_saliva_M1) / pool_blanco_M1 * 100
pool_pct_M2 <- (pool_blanco_M2 - pool_saliva_M2) / pool_blanco_M2 * 100
cat("=========================================================\n")
## =========================================================
cat("VERIFICACIÓN DEL POOL DE REFERENCIA (sAA), hoja Controles\n")
## VERIFICACIÓN DEL POOL DE REFERENCIA (sAA), hoja Controles
cat("=========================================================\n")
## =========================================================
cat(sprintf("Pool %% hidrólisis  Momento 1 (Pre-examen)   = %.4f %%\n", pool_pct_M1))
## Pool % hidrólisis  Momento 1 (Pre-examen)   = 69.5506 %
cat(sprintf("Pool %% hidrólisis  Momento 2 (Durante exam) = %.4f %%\n", pool_pct_M2))
## Pool % hidrólisis  Momento 2 (Durante exam) = 75.1670 %
cat(sprintf("Deriva del pool (M2 - M1)                    = %+.4f puntos porcentuales\n\n",
            pool_pct_M2 - pool_pct_M1))
## Deriva del pool (M2 - M1)                    = +5.6165 puntos porcentuales
## ---------- función auxiliar: análisis pareado completo ----------
analizar <- function(nombre, x1, x2, corregir_por = NULL){
  x1x=x1[!is.na(x1)]
  x2x=x2[!is.na(x2)]
  
  xx=c(x1x,x2x)
  
  xmin=min(xx)
  xmax=max(xx)
  plot(density(x1x, na.rm = TRUE),main = nombre,col="blue", xlab = "Valor", ylab ="Densidad",xlim=c(xmin,xmax))
  lines(density(x2x, na.rm = TRUE),lty=2,col="orange")
  legend("topright", legend = c("Pre-examen", "Durante examen"),col = c("blue", "orange"), pch = 1)
  n1=length(x1x)
  n2=length(x2x)
  trat=c(rep("Antes",n1),rep("despues",n2))
  df=data.frame(momento=trat,v=xx)
  boxplot(v ~ momento,data=df)
  
  ok <- complete.cases(x1, x2)
  a <- x1[ok]; b <- x2[ok]
  d <- b - a
  n <- length(d)

  sw <- shapiro.test(d)
  tt <- t.test(a, b, paired = TRUE)
  wt <- suppressWarnings(wilcox.test(a, b, paired = TRUE, exact = (n < 50)))

  dz <- mean(d) / sd(d)                      # Cohen's dz (medidas repetidas)
  ci_dz <- dz + c(-1,1) * qt(0.975, n-1) * sqrt(1/n + dz^2/(2*n))  # aprox. Hedges/Cohen dz CI

  cat("---------------------------------------------------------\n")
  cat(sprintf("%s  (n pares completos = %d)\n", nombre, n))
  cat("---------------------------------------------------------\n")
  cat(sprintf("T1: media = %.2f | DE = %.2f | mediana = %.2f | RIC = %.2f-%.2f\n",
              mean(a), sd(a), median(a), quantile(a,.25), quantile(a,.75)))
  cat(sprintf("T2: media = %.2f | DE = %.2f | mediana = %.2f | RIC = %.2f-%.2f\n",
              mean(b), sd(b), median(b), quantile(b,.25), quantile(b,.75)))
  cat(sprintf("Diferencia (T2-T1): media = %.2f | DE = %.2f\n", mean(d), sd(d)))
  cat(sprintf("Shapiro-Wilk sobre Δ:  W = %.3f | p = %.4f  -> %s\n",
              sw$statistic, sw$p.value, ifelse(sw$p.value > .05, "NORMAL", "NO NORMAL")))
  cat(sprintf("t pareada:              t(%d) = %.3f | p = %.4f\n", tt$parameter, tt$statistic, tt$p.value))
  cat(sprintf("Wilcoxon pareado:       V = %.1f | p = %.4f\n", wt$statistic, wt$p.value))
  cat(sprintf("Cohen dz = %.3f  (IC95%% aprox. %.3f a %.3f)\n", dz, ci_dz[1], ci_dz[2]))
  invisible(list(n=n, media1=mean(a), de1=sd(a), media2=mean(b), de2=sd(b),
                  sw_p=sw$p.value, t_p=tt$p.value, w_p=wt$p.value, dz=dz))
}
r_dpph <- analizar("DPPH · % de inhibición", dpph_T1, dpph_T2)

## ---------------------------------------------------------
## DPPH · % de inhibición  (n pares completos = 12)
## ---------------------------------------------------------
## T1: media = 82.89 | DE = 2.14 | mediana = 82.87 | RIC = 81.87-84.07
## T2: media = 6.51 | DE = 10.73 | mediana = 5.27 | RIC = -1.32-10.06
## Diferencia (T2-T1): media = -76.38 | DE = 10.70
## Shapiro-Wilk sobre Δ:  W = 0.932 | p = 0.4004  -> NORMAL
## t pareada:              t(11) = 24.725 | p = 0.0000
## Wilcoxon pareado:       V = 78.0 | p = 0.0005
## Cohen dz = -7.137  (IC95% aprox. -10.406 a -3.868)
r_saa  <- analizar("sAA · % hidrólisis (BRUTO, sin corregir por pool)", saa_T1, saa_T2)

## ---------------------------------------------------------
## sAA · % hidrólisis (BRUTO, sin corregir por pool)  (n pares completos = 15)
## ---------------------------------------------------------
## T1: media = 75.11 | DE = 2.50 | mediana = 74.83 | RIC = 73.99-76.63
## T2: media = 67.59 | DE = 3.63 | mediana = 67.82 | RIC = 65.31-70.60
## Diferencia (T2-T1): media = -7.51 | DE = 4.38
## Shapiro-Wilk sobre Δ:  W = 0.971 | p = 0.8790  -> NORMAL
## t pareada:              t(14) = 6.645 | p = 0.0000
## Wilcoxon pareado:       V = 119.0 | p = 0.0001
## Cohen dz = -1.716  (IC95% aprox. -2.586 a -0.845)
r_pc   <- analizar("PC-DNPH · % del pool", pc_T1, pc_T2)

## ---------------------------------------------------------
## PC-DNPH · % del pool  (n pares completos = 11)
## ---------------------------------------------------------
## T1: media = 52.88 | DE = 27.69 | mediana = 47.19 | RIC = 34.83-59.93
## T2: media = 59.15 | DE = 22.40 | mediana = 64.97 | RIC = 45.41-72.45
## Diferencia (T2-T1): media = 6.28 | DE = 29.65
## Shapiro-Wilk sobre Δ:  W = 0.954 | p = 0.6891  -> NORMAL
## t pareada:              t(10) = -0.702 | p = 0.4987
## Wilcoxon pareado:       V = 23.0 | p = 0.4131
## Cohen dz = 0.212  (IC95% aprox. -0.468 a 0.891)
## ---------- Corrección aditiva de sAA por deriva del pool ----------
## corregido_T2 = bruto_T2 - (pool_T2 - pool_T1)
deriva <- pool_pct_M2 - pool_pct_M1
saa_T2_corr <- saa_T2 - deriva
cat("\n=========================================================\n")
## 
## =========================================================
cat(sprintf("Corrección aditiva aplicada a sAA T2: T2_corr = T2_bruto - (%.2f)\n", deriva))
## Corrección aditiva aplicada a sAA T2: T2_corr = T2_bruto - (5.62)
cat("=========================================================\n")
## =========================================================
r_saa_corr <- analizar("sAA · % hidrólisis (CORREGIDA por deriva real del pool)", saa_T1, saa_T2_corr)

## ---------------------------------------------------------
## sAA · % hidrólisis (CORREGIDA por deriva real del pool)  (n pares completos = 15)
## ---------------------------------------------------------
## T1: media = 75.11 | DE = 2.50 | mediana = 74.83 | RIC = 73.99-76.63
## T2: media = 61.98 | DE = 3.63 | mediana = 62.20 | RIC = 59.70-64.98
## Diferencia (T2-T1): media = -13.13 | DE = 4.38
## Shapiro-Wilk sobre Δ:  W = 0.971 | p = 0.8790  -> NORMAL
## t pareada:              t(14) = 11.612 | p = 0.0000
## Wilcoxon pareado:       V = 120.0 | p = 0.0001
## Cohen dz = -2.998  (IC95% aprox. -4.296 a -1.700)
## ---------- Corrección de Holm sobre los 3 contrastes primarios ----------
p_wilcoxon <- c(DPPH = r_dpph$w_p, sAA_bruta = r_saa$w_p, PC = r_pc$w_p)
holm <- p.adjust(p_wilcoxon, method = "holm")
cat("\n=========================================================\n")
## 
## =========================================================
cat("CORRECCIÓN DE HOLM-BONFERRONI (familia de 3 contrastes primarios)\n")
## CORRECCIÓN DE HOLM-BONFERRONI (familia de 3 contrastes primarios)
cat("=========================================================\n")
## =========================================================
print(data.frame(p_crudo = round(p_wilcoxon,4), p_Holm = round(holm,4)))
##           p_crudo p_Holm
## DPPH       0.0005 0.0010
## sAA_bruta  0.0001 0.0004
## PC         0.4131 0.4131
## ---------- Tabla resumen final ----------
cat("\n=========================================================\n")
## 
## =========================================================
cat("TABLA RESUMEN FINAL (para contrastar con el informe SENACYT)\n")
## TABLA RESUMEN FINAL (para contrastar con el informe SENACYT)
cat("=========================================================\n")
## =========================================================
resumen <- data.frame(
  Biomarcador = c("DPPH (%inhib.)", "sAA bruta (%hidról.)", "sAA corregida (pool real)", "PC-DNPH (%pool)"),
  n           = c(r_dpph$n, r_saa$n, r_saa_corr$n, r_pc$n),
  T1_media_DE = sprintf("%.2f ± %.2f", c(r_dpph$media1,r_saa$media1,r_saa_corr$media1,r_pc$media1),
                                        c(r_dpph$de1,r_saa$de1,r_saa_corr$de1,r_pc$de1)),
  T2_media_DE = sprintf("%.2f ± %.2f", c(r_dpph$media2,r_saa$media2,r_saa_corr$media2,r_pc$media2),
                                        c(r_dpph$de2,r_saa$de2,r_saa_corr$de2,r_pc$de2)),
  Shapiro_p   = round(c(r_dpph$sw_p, r_saa$sw_p, r_saa_corr$sw_p, r_pc$sw_p), 4),
  Wilcoxon_p  = round(c(r_dpph$w_p, r_saa$w_p, r_saa_corr$w_p, r_pc$w_p), 4),
  Cohen_dz    = round(c(r_dpph$dz, r_saa$dz, r_saa_corr$dz, r_pc$dz), 2)
)
print(resumen, row.names = FALSE)
##                Biomarcador  n   T1_media_DE   T2_media_DE Shapiro_p Wilcoxon_p
##             DPPH (%inhib.) 12  82.89 ± 2.14  6.51 ± 10.73    0.4004     0.0005
##       sAA bruta (%hidról.) 15  75.11 ± 2.50  67.59 ± 3.63    0.8790     0.0001
##  sAA corregida (pool real) 15  75.11 ± 2.50  61.98 ± 3.63    0.8790     0.0001
##            PC-DNPH (%pool) 11 52.88 ± 27.69 59.15 ± 22.40    0.6891     0.4131
##  Cohen_dz
##     -7.14
##     -1.72
##     -3.00
##      0.21