## ============================================================
## 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){
  
  df1=data.frame(antes=x1,despues=x2)
  print(df1)
  df_limpio <- df1[complete.cases(df1), ]
  df_limpio$diff=df_limpio$despues-df_limpio$antes
  print(df_limpio)
  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)
  
  qqnorm(df_limpio$diff)
  qqline(df_limpio$diff)
  
  x1=df_limpio$antes
  x2=df_limpio$despues
  
  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)
##      antes   despues
## 1  90.6667        NA
## 2  84.4000        NA
## 3  80.0000        NA
## 4  86.6667        NA
## 5       NA 30.462725
## 6  79.8667  8.354756
## 7  84.0000  6.169666
## 8       NA 15.424165
## 9       NA 17.352185
## 10 84.2667  0.385604
## 11 82.8000 31.362468
## 12 81.0667 -4.755784
## 13 82.9333  6.940874
## 14 82.2667  4.370180
## 15 79.3333 -1.799486
## 16      NA 17.737789
## 17 86.4000 18.251928
## 18 85.7333 -5.141388
## 19 82.1333 15.167095
## 20 83.8667 -1.156812
##      antes   despues     diff
## 6  79.8667  8.354756 -71.5119
## 7  84.0000  6.169666 -77.8303
## 10 84.2667  0.385604 -83.8811
## 11 82.8000 31.362468 -51.4375
## 12 81.0667 -4.755784 -85.8225
## 13 82.9333  6.940874 -75.9925
## 14 82.2667  4.370180 -77.8965
## 15 79.3333 -1.799486 -81.1328
## 17 86.4000 18.251928 -68.1481
## 18 85.7333 -5.141388 -90.8747
## 19 82.1333 15.167095 -66.9662
## 20 83.8667 -1.156812 -85.0235

## ---------------------------------------------------------
## 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)
##      antes despues
## 1  69.2135 66.8151
## 2  74.7191 68.9310
## 3  73.2584 67.8174
## 4  75.9551 68.3742
## 5  74.8315 71.0468
## 6  76.1798 65.3675
## 7  77.1910 66.1470
## 8       NA 74.2762
## 9       NA 70.9354
## 10 75.6180 64.9220
## 11      NA 69.4878
## 12 72.2472 73.4967
## 13 74.8315 60.1336
## 14 77.0787 65.2561
## 15      NA      NA
## 16 78.0899      NA
## 17 73.2584 70.1559
## 18 78.3146 71.6036
## 19 79.2135 71.1581
## 20 74.7191 62.6949
##      antes despues      diff
## 1  69.2135 66.8151  -2.39834
## 2  74.7191 68.9310  -5.78814
## 3  73.2584 67.8174  -5.44105
## 4  75.9551 68.3742  -7.58089
## 5  74.8315 71.0468  -3.78469
## 6  76.1798 65.3675 -10.81229
## 7  77.1910 66.1470 -11.04402
## 10 75.6180 64.9220 -10.69593
## 12 72.2472 73.4967   1.24947
## 13 74.8315 60.1336 -14.69783
## 14 77.0787 65.2561 -11.82253
## 17 73.2584 70.1559  -3.10252
## 18 78.3146 71.6036  -6.71104
## 19 79.2135 71.1581  -8.05535
## 20 74.7191 62.6949 -12.02422

## ---------------------------------------------------------
## 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)
##       antes despues
## 1        NA 13.6054
## 2   89.1386 90.8163
## 3   16.8539 66.6667
## 4        NA 10.5442
## 5   18.3521      NA
## 6   47.1910 53.7415
## 7        NA 68.3673
## 8        NA 58.5034
## 9        NA 28.9116
## 10  61.4232 78.2313
## 11       NA      NA
## 12  51.3109 51.7007
## 13  47.1910 64.9660
## 14  58.4270 39.1156
## 15  37.8277 39.1156
## 16  95.5056      NA
## 17 112.7341 66.3265
## 18  39.7004      NA
## 19  27.7154 85.0340
## 20  31.8352 14.9660
##       antes despues       diff
## 2   89.1386 90.8163   1.677750
## 3   16.8539 66.6667  49.812734
## 6   47.1910 53.7415   6.550486
## 10  61.4232 78.2313  16.808072
## 12  51.3109 51.7007   0.389819
## 13  47.1910 64.9660  17.774975
## 14  58.4270 39.1156 -19.311320
## 15  37.8277 39.1156   1.287931
## 17 112.7341 66.3265 -46.407551
## 19  27.7154 85.0340  57.318658
## 20  31.8352 14.9660 -16.869220

## ---------------------------------------------------------
## 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)
##      antes despues
## 1  69.2135 61.1987
## 2  74.7191 63.3145
## 3  73.2584 62.2009
## 4  75.9551 62.7577
## 5  74.8315 65.4303
## 6  76.1798 59.7510
## 7  77.1910 60.5305
## 8       NA 68.6597
## 9       NA 65.3189
## 10 75.6180 59.3056
## 11      NA 63.8713
## 12 72.2472 67.8802
## 13 74.8315 54.5172
## 14 77.0787 59.6396
## 15      NA      NA
## 16 78.0899      NA
## 17 73.2584 64.5394
## 18 78.3146 65.9871
## 19 79.2135 65.5417
## 20 74.7191 57.0784
##      antes despues      diff
## 1  69.2135 61.1987  -8.01481
## 2  74.7191 63.3145 -11.40462
## 3  73.2584 62.2009 -11.05753
## 4  75.9551 62.7577 -13.19737
## 5  74.8315 65.4303  -9.40117
## 6  76.1798 59.7510 -16.42877
## 7  77.1910 60.5305 -16.66049
## 10 75.6180 59.3056 -16.31241
## 12 72.2472 67.8802  -4.36701
## 13 74.8315 54.5172 -20.31431
## 14 77.0787 59.6396 -17.43900
## 17 73.2584 64.5394  -8.71900
## 18 78.3146 65.9871 -12.32752
## 19 79.2135 65.5417 -13.67183
## 20 74.7191 57.0784 -17.64070

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