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