BIBLIOGRAFIA

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.

FUNCIONES CREADAS

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

DATOS Y CÁLCULOS DE LA VALIDACIÓN

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

DATOS Y CÁLCULOS DE LA ROBUSTEZ

library(readxl)
## 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"