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