Los cálculos utilizados se han realizado en base a la siguiente
documentación:
- SANTE/11312/2021 https://www.eurl-pesticides.eu/docs/public/tmplt_article.asp?CntID=727
- EURACHEM QUAM https://www.eurachem.org/index.php/publications/guides/quam
-Artículo científico https://www.mdpi.com/2077-0472/14/7/1014
-
Análisis y diseño de experimentos https://books.instituto-idema.org/sites/default/files/Analisis%20y%20dise%C3%B1o%20de%20experimentos%20-%20Guti%C3%A9rrez%20%26%20de%20la%20Vara%20-%202ed.pdf
Aspectos a considerar:
Se puede importar la información obtenida a través de un software mediante diferentes paquetes de R Los bucles tipo for o while permiten recorrer la información de forma fácil y no tener que hacer una función como la realizada en este ejemplo para tres plaguicidas, si no que una funcion con solo un plaguicida con un bucle seria suficiente.
#Funcion para calcular la recuperacion media de tres plaguicidas (se puede extrapolar a muchos mas mediante un bucle)
calculos_basicos <- function(rec1, rec2, rec3) {
# Calcular la media de cada vector
media_rec1 <- mean(rec1)
media_rec2 <- mean(rec2)
media_rec3 <- mean(rec3)
# Calcular la sd y RSD de cada vector
sd_rec1 <- sd(rec1)
sd_rec2 <- sd(rec2)
sd_rec3 <- sd(rec3)
rsd_rec1 <- 100*(sd_rec1/media_rec1)
rsd_rec2 <- 100*(sd_rec2/media_rec2)
rsd_rec3 <- 100*(sd_rec3/media_rec3)
# Calcular datos para la componente de la incertidumbre del sesgo
sesgo1=100-rec1
sesgo2=100-rec2
sesgo3=100-rec3
sesgo_medio1=mean(sesgo1)
sesgo_medio2=mean(sesgo2)
sesgo_medio3=mean(sesgo3)
sesgo_sd1=sd(sesgo1)
sesgo_sd2=sd(sesgo2)
sesgo_sd3=sd(sesgo3)
incert_preparac=3.34
incert_rec1=2*sqrt(rsd_rec1^2+sesgo_medio1^2+sesgo_sd1^2+incert_preparac^2)
incert_rec2=2*sqrt(rsd_rec2^2+sesgo_medio2^2+sesgo_sd2^2+incert_preparac^2)
incert_rec3=2*sqrt(rsd_rec3^2+sesgo_medio3^2+sesgo_sd3^2+incert_preparac^2)
# Crear un nuevo vector (array) con las medias
medias_recovery <- c(media_rec1, media_rec2, media_rec3)
# Crear un nuevo vector (array) con la RSD
rsds_recovery <- c(round(rsd_rec1,1), round(rsd_rec2,1), round(rsd_rec3,1))
# Crear un nuevo vector (array) con la incertidumbre
incert_recovery <- c(round(incert_rec1,1), round(incert_rec2,1), round(incert_rec3,1))
# Asignar nombres a los elementos del vector para una mejor identificación
names(medias_recovery) <- c("PLAG1", "PLAG2", "PLAG3")
# Devolver una lista que contiene ambos vectores
return(list(
Medias = medias_recovery,
RSDs = rsds_recovery,
INCERT=incert_recovery
))
}# Calculos asociados a los resultados basicos de la validacion
#
#Esta informacion puede importarse directamente del software del equipo,
PLAGUICIDA=c('Endosulfan-alfa','Endosulfan-beta','Endosulfan-sulfato')
TR=c(22.659,25.207,26.794)
DETECCION=c('241->206 y 241->170','241->206 y 195.0->159','272->217 y 272.0->237')
recovery_alfa=c(103, 96, 95, 104, 101)
recovery_beta=c(112, 92, 91, 101, 108)
recovery_sulfato=c(88, 98, 93, 102, 100)
#Fin de la información que puede importarse del software del equipo
valores=calculos_basicos(recovery_alfa,recovery_beta,recovery_sulfato)
DBMIG=data.frame(PLAGUICIDA, TR, DETECCION, valores$Medias,valores$RSDs,valores$INCERT)
DT::datatable(DBMIG)## Warning: package 'readxl' was built under R version 4.5.2
ruta_excel <- "C:\\Users\\Usuario\\Documents\\R\\factorial.xlsx"
datos <- read_excel(ruta_excel, sheet = 1)
datos_factorial <- read_excel(ruta_excel, sheet = 1)
print(datos_factorial)## # A tibble: 16 × 3
## ACN QUECHERS REC
## <dbl> <dbl> <dbl>
## 1 -1 -1 85
## 2 1 -1 99
## 3 -1 1 109
## 4 1 1 111
## 5 -1 -1 99
## 6 1 -1 77
## 7 -1 1 82
## 8 1 1 76
## 9 -1 -1 103
## 10 1 -1 101
## 11 -1 1 88
## 12 1 1 93
## 13 -1 -1 79
## 14 1 -1 88
## 15 -1 1 86
## 16 1 1 103
modelo_factorial <- aov(REC ~ ACN * QUECHERS,
data = datos_factorial)
# Mostrar la tabla ANOVA
tabla_anova <- summary(modelo_factorial)
print(tabla_anova)## Df Sum Sq Mean Sq F value Pr(>F)
## ACN 1 18.1 18.06 0.115 0.740
## QUECHERS 1 18.1 18.06 0.115 0.740
## ACN:QUECHERS 1 22.6 22.56 0.144 0.711
## Residuals 12 1877.2 156.44
library(ggplot2)
# Crear el gráfico de interacción
ggplot(datos_factorial, aes(x = ACN, y = REC, group = QUECHERS, color = QUECHERS)) +
stat_summary(fun = mean, geom = "point", size = 4) + # Puntos para la media
stat_summary(fun = mean, geom = "line", linewidth = 1) + # Líneas uniendo las medias
labs(
title = "Gráfico de Interacción (2^2)",
x = "Acetonitrilo usado",
y = "% REC",
color = "QUECHERS"
) +
theme_minimal()# Convertir el resultado de summary() en un data frame
df_anova <- data.frame(tabla_anova[[1]])
sc_total <- sum(df_anova$Sum.Sq)
print(paste("Suma de Cuadrados Total (SC_T):", sc_total))## [1] "Suma de Cuadrados Total (SC_T): 1935.9375"
# También puedes calcular la varianza total:
gl_total <- sum(df_anova$Df) # Esto será N-1, donde N es el número total de observaciones
varianza_total <- sc_total / gl_total
print(paste("Varianza Total (MC_T):", varianza_total))## [1] "Varianza Total (MC_T): 129.0625"