Los cálculos que se utilizan se basan en los documentos siguientes:
## Warning: package 'DT' was built under R version 4.5.2
# 1. Cargar los datos obtenidos en el muestreo (clorpirifos en lechuga µg/kg)
datos_A1 <- data.frame(
Lote = rep(1:10, each = 4),
Muestra = rep(rep(c("W1", "W2"), each = 2), 10),
Valor = c(
8.98, 8.41, 7.09, 9.13, # Porcion 1 de la W en rojo (WR1), Porción 2 de la W en rojo (WR2) y lo mismo para la W en negro (WN1 y WN2)
8.10, 8.95, 6.32, 6.41, # WR1,WR2,WN1 y WN2
8.51, 8.46, 9.11, 9.94, # WR1,WR2,WN1 y WN2
9.11, 9.33, 7.72, 7.41, # WR1,WR2,WN1 y WN2
8.05, 8.35, 6.42, 6.75, # WR1,WR2,WN1 y WN2
8.29, 7.91, 9.44, 9.96, # WR1,WR2,WN1 y WN2
8.24, 8.32, 10.33, 10.31, # WR1,WR2,WN1 y WN2
8.35, 8.36, 9.06, 9.43, # WR1,WR2,WN1 y WN2
9.51, 9.53, 9.52, 9.56, # WR1,WR2,WN1 y WN2
8.40, 8.69, 8.11, 8.43 # WR1,WR2,WN1 y WN2
)
)
promedio<-mean(datos_A1$Valor)
# 2. Análisis de Varianza (ANOVA)
# En este diseño jerárquico, 'Muestra' está anidada en 'Lote'
# para separar varianza entre lotes, entre muestras y analítica.
modelo_a1 <- aov(Valor ~ Lote + Error(Lote/Muestra), data = datos_A1)
# Resumen del modelo para ver las fuentes de variabilidad
summary(modelo_a1)##
## Error: Lote
## Df Sum Sq Mean Sq
## Lote 1 3.86 3.86
##
## Error: Lote:Muestra
## Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 1 0.3709 0.3709
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 37 36.46 0.9855
# 3. Cálculo de componentes de varianza (Incertidumbre)
# La guía recomienda usar ANOVA para separar s_sampling y s_analytical.
# Aquí usamos la función lme para obtener los componentes directamente.
library(nlme)
library(htmltools)
modelo_mixto <- lme(Valor ~ 1, random = ~1|Lote/Muestra, data = datos_A1)
var_comp <- as.numeric(VarCorr(modelo_mixto))## Warning: NAs introducidos por coerción
# Extracción de desviaciones estándar (s)
s_entre_lotes <- as.numeric(var_comp[2]) # Variabilidad entre los lotes
s_muestreo <- as.numeric(var_comp[4]) # Varianza entre muestras (intralote)
s_analitica <- as.numeric(var_comp[5]) # Varianza intramuestra (error analítico)
incert_analisis<-14
rsd_muestreo<-round(100*s_muestreo/promedio, 1)
incert_combinada<-2*sqrt((incert_analisis)^2+(rsd_muestreo)^2)
# 4. Resultados
cat("Resultados del Diseño anidado:\n")## Resultados del Diseño anidado:
## ------------------------------------
## Desviación estándar de Muestreo (s_muestreo): 0.86 µg/kg
## RSD de Muestreo (s_muestreo): 10.1 %
## Desviación estándar porciones (s_analitica): 0.17 µg/kg
## RSD de porciones (s_analitica): 2 %
## ------------------------------------
## Incertidumbre del análisis (calculado segun capitulo 10): 14 %
## Incertidumbre global (muestreo + analisis): 34.5 %
if (incert_combinada > 50) {
# Este bloque genera el mensaje en rojo si se visualiza en HTML
HTML(paste0('<p style="color:red; font-weight:bold; border:2px solid red; padding:10px;">',
'⚠️ AVISO: La incertidumbre (', round(incert_combinada, 1),
'%) supera el umbral del 50%. Se recomienda revisar el protocolo de muestreo.',
'</p>'))
} else {
HTML(paste0('<p style="color:green; font-weight:bold;">',
'✅ Incertidumbre dentro de los límites aceptables (',
round(incert_combinada, 1), '%).',
'</p>'))
}✅ Incertidumbre dentro de los límites aceptables (34.5%).