1. Introducción

En el campo de la química analítica y la metrología química, la cuantificación precisa de sustancias es esencial para garantizar la calidad y la confiabilidad de los resultados de las mediciones. Además, es crucial estimar la incertidumbre asociada a estas mediciones para proporcionar información completa sobre la confiabilidad de los datos.

En este proyecto, nos proponemos cuantificar una muestra desconocida utilizando una curva de calibración y estimar su incertidumbre. Para lograr este objetivo, utilizaremos varios métodos, que incluyen:

  • Mínimos Cuadrados Ordinarios (MCO): Utilizaremos este método para ajustar una línea de regresión a nuestros datos de calibración y obtener una relación funcional entre la concentración y la respuesta medida.

  • Mínimos Cuadrados Ponderados (MCP): Aplicaremos este enfoque para considerar la ponderación adecuada de los puntos de calibración, teniendo en cuenta la incertidumbre asociada a cada medición.

  • Bracketing: Dividiremos nuestros datos en intervalos y ajustaremos curvas de calibración separadas para cada intervalo, considerando la variabilidad dentro de cada rango.

  • Calibración por un Punto: Si tenemos un punto de calibración único, aplicaremos este enfoque para estimar la concentración desconocida.

Para esto utilizaremos los paquetes Propagate y chemCal en el entorno de R para llevar a cabo análisis rigurosos y obtener resultados confiables. A través de estos métodos, buscamos proporcionar una evaluación completa de la cuantificación y la incertidumbre en nuestras mediciones químicas.

ADVERTENCIA A SUCEPTIBILIDADES: para fines prácticos de este ejercicio, las incertidumbres asociadas a la dilución de los materiales de referencia se asumirán como cero y las del MRC como el 1%

Lo primero a realizar, será instalar y cargar los paquetes:

library(readxl)
library(propagate)
library(chemCal)
library(stargazer)
library(knitr)
library(ggplot2)

2. Descripción del set de datos

Para este ejemplo, emplearemos una curva de calibración que se encuentra compuesta con 6 puntos o niveles de calibración ( Nivel), expresados en mg/kg, los cuales fueron medidos por triplicado en el intrumento de medición (Respuesta(UA). Por otro lado, se midió el canditado a MRC (cMR) mediante tres réplicas independientes.

Para la importación de los datos desde excel se debe emplear el siguiente código:

# Importar los datos
 
Datos <- read_excel("~/Desktop/EjemplosCaract.xlsx",na = "") 

# Mostrar la tabla

kable(Datos, 
      caption = "Tabla 1. Datos obtenidos durante Caracterización", 
      format = "markdown", 
      align = "c",
      table.attr ='style="width:auto;"',
      escape = FALSE)  # Para permitir HTML en los encabezados
Tabla 1. Datos obtenidos durante Caracterización
Nivel Respuesta(UA)
10 2286.18
10 2391.48
10 2316.60
20 4899.96
20 4572.36
20 4843.80
30 7012.98
30 7090.20
30 7090.20
40 8929.44
40 8892.00
40 9182.16
50 11430.90
50 11653.20
50 11676.60
60 14152.32
60 13590.72
60 14166.36

Por otro lado, las réplicas de las muestras presentaron los siguientes valores:

Réplica Respuesta (UA)
1 7654.4559
2 7904.232882
3 7872.003594

3.Mínimos Cuadrados Ordinarios (MCO)

Lo primero que realizamos es la creación del modelo de regresión lineal para Nivel vs. Respuesta (UA)

# Modelo de regresión lineal

modelo_regresion <- lm(Datos$`Respuesta(UA)`~ Datos$Nivel, data = Datos)

# Resumen del modelo
resumen_modelo <- summary(modelo_regresion)

# Resumen del modelo con stargazer
stargazer(modelo_regresion, title = "Resumen del Modelo de Regresión Lineal", type = "text")
## 
## Resumen del Modelo de Regresión Lineal
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                           `Respuesta(UA)`      
## -----------------------------------------------
## Nivel                       230.209***         
##                               (2.852)          
##                                                
## Constant                      63.648           
##                              (111.066)         
##                                                
## -----------------------------------------------
## Observations                    18             
## R2                             0.998           
## Adjusted R2                    0.997           
## Residual Std. Error      206.640 (df = 16)     
## F Statistic          6,515.900*** (df = 1; 16) 
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Podemos revisar la gráfica correspondiente, mediante el siguiente código:

# Gráfica con ggplot2
grafica <- ggplot(Datos, aes(x = Nivel, y = `Respuesta(UA)`)) +
  geom_point(size=0.5) +  # Para mostrar los datos como puntos
  geom_smooth(method = "lm", se = TRUE, col = "blue", size=0.5) +  # Para agregar la línea de regresión y los intervalos de confianza
  labs(title = "Curva de calibración mediante modelo MCO",
       x = "Concentracion ( mg/kg)",
       y = "Respuesta (UA)")

print(grafica)

Posteriormente, vamos a estimar el promedio de las respuestas obtenidas en la caracterización del Material de Referencia. Una vez obtenidas este promedio, vamos a estimar la concentración y su respectiva incertidumbre, empleando el modelo de regresión lineal (MCO).

# Estimación del promedio de las muestras ( en respuesta)

  RespuestascMR <- c(7654.4559, 7904.232882, 7872.003594)
  promedio_respuestas <- mean(RespuestascMR)

# Crear un objeto con el modelo de regresión lineal

  ResultadosMCO <- inverse.predict(modelo_regresion, newdata = promedio_respuestas)


# Estimación del valor de concentración utilizando Mínimos Cuadrados Ordinarios (MCO)
  ConceMCO <- ResultadosMCO$Prediction
  uConcMCO <- ResultadosMCO$`Standard Error`
  urelMCO <- uConcMCO/ConceMCO*100

# Imprimir el valor de concentración estimada y su incertidumbre

  cat("Valor de Concentración Estimada:", sprintf("%.4f", ConceMCO), "\n","Incertidumbre de Concentración:", sprintf("%.4f", uConcMCO), "\n","Incertidumbre relativa % (MCO):", sprintf("%.2f", urelMCO), "\n")
## Valor de Concentración Estimada: 33.6502 
##  Incertidumbre de Concentración: 0.9224 
##  Incertidumbre relativa % (MCO): 2.74

Ahora, podemos observar la gráfica en la cual se muestra la interpolación respectiva:

4. Mínimos Cuadrados Ponderados (MCP)

En esta sección, utilizaremos el método de Mínimos Cuadrados Ponderados (MCP) para ajustar un modelo de regresión lineal teniendo en cuenta la desviación estándar de la respuesta en cada nivel de concentración como pesos.

# Crear un vector de pesos basado en la desviación estándar de la respuesta

pesos <- 1 / (Datos$`Respuesta(UA)` / sd(Datos$`Respuesta(UA)`))

# Modelo de regresión lineal ponderado (MCP)
modelo_regresion_ponderado <- lm(Datos$`Respuesta(UA)` ~ Datos$Nivel, data = Datos, weights = pesos)

# Resumen del modelo ponderado
resumen_modelo_ponderado <- summary(modelo_regresion_ponderado)

# Resumen del modelo ponderado con stargazer
stargazer(modelo_regresion_ponderado, title = "Resumen del Modelo de Regresión Lineal Ponderado (MCP)", type = "text")
## 
## Resumen del Modelo de Regresión Lineal Ponderado (MCP)
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                           `Respuesta(UA)`      
## -----------------------------------------------
## Nivel                       230.132***         
##                               (2.454)          
##                                                
## Constant                      61.971           
##                              (72.099)          
##                                                
## -----------------------------------------------
## Observations                    18             
## R2                             0.998           
## Adjusted R2                    0.998           
## Residual Std. Error      141.053 (df = 16)     
## F Statistic          8,791.766*** (df = 1; 16) 
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

A continuación, podemos visualizar la curva de calibración ponderada:

Continuando con la estimación de la concentración y su incertidumbre utilizando MCP:

## Valor de Concentración Estimada (MCP): 33.6687 mg/kg
##  Incertidumbre de Concentración (MCP): 0.7544 mg/kg
##  Incertidumbre relativa (MCP): 2.24

Grafica de la curva de calibración con regresión ponderada:

Finalmente comparemos los valores obtenidos por cada una de las regresiones:

Minímos cuadrados ordinarios:

## Valor de Concentración Estimada (MCO): 33.6502 mg/kg
##  Incertidumbre de Concentración (MCO): 0.9224 mg/kg
##  Incertidumbre relativa (MCO): 2.74

Minímos cuadrados ponderados:

## Valor de Concentración Estimada (MCP): 33.6687 mg/kg
##  Incertidumbre de Concentración (MCP): 0.7544 mg/kg
##  Incertidumbre relativa (MCP): 2.24 %

6. Estimación incertidumbre por caracterización (MCO +MCP)

Para realizar la estimación incertidumbre por caracterización, debemos considerar la incertidumbre asociada al MRC, con el cual se realiza la caracterización. Esta incertidumbre corresponde a 0.0337 mg/kg ( Incertidumbre estándar, aproximadamente el 1%).

Estas incertidumbres consideran el valor interpolado ( el cual cambia dependiendo del tipo de regresión empleada).

Por su parte, la incertidumbre de caracterización, denotada como \(u_{\text{caracterización}_n}\), se calcula utilizando la siguiente fórmula:

\[ u_{\text{caracterización}_n} = \sqrt{u_n^2 + u_{\text{MRC}}^2} \]

Donde: - \(n\) corresponde al tipo de regresión, ya sea MCO o MCP. - \(u_n\) es la incertidumbre asociada a \(n\). - \(u_{\text{MRC}}\) es la incertidumbre asociada al MRC.

Esta fórmula nos permite cuantificar la incertidumbre de caracterización para cada tipo de regresión, teniendo en cuenta las incertidumbres respectivas.

A continuación, se presentan los resultados encontrados:

uMRC<-0.0337
                      ucarMCO=sqrt(uConcMCO^2+uMRC^2)
                      
                      ucarMCP=sqrt(uConcMCP^2+uMRC^2)

# Imprimir los resultados con etiquetas y unidades en mg/kg
    cat(" Valor de u de caracterización MCO:", round(ucarMCO, 4), "mg/kg\n",
        "Valor de u de caracterización MCP:", round(ucarMCP, 4), "mg/kg\n")
##  Valor de u de caracterización MCO: 0.923 mg/kg
##  Valor de u de caracterización MCP: 0.7552 mg/kg

7. Estimación empleando Bracketing

En esta sección, utilizaremos el método de Bracketing para estimar la concentración y su incertidumbre. Para esto, consideraremos las concentraciones conocidas de nivel 1 (30 mg/kg) y nivel 2 (40 mg/kg).

Para calcular la concentración del candidato (\(c_{cMR}\)) utilizando el enfoque de calibración por bracketing, podemos utilizar la siguiente fórmula:

\[ C_{cMR} = \frac{{(C_2 \cdot (R_{c_{MR}} - R_{C1}) + C_1 \cdot (R_{C2} - R_{c_{MR}}))}}{{(R_{C2} - R_{C1})}} \]

Donde: - \(C_1\) y \(C_2\) son las concentraciones conocidas correspondientes a los puntos de calibración. - \(R_{C1}\) y \(R_{C2}\) son las respuestas obtenidas del instrumento para los puntos de calibración. - \(R_{c_{MR}}\) es la respuesta del instrumento para la muestra cuya concentración deseamos calcular.

Esta fórmula nos permite estimar la concentración desconocida \(c_{c_{MR}}\) a partir de las mediciones realizadas y las concentraciones conocidas en los puntos de calibración.

Mediante el paquete propagate podemos estimar la concentración y la incertidumbre:

# Cargar el paquete propagate si no está cargado
library(propagate)

# Definir las variables y sus incertidumbres
    C1 <- c(30, 0.31)  # Concentración y su incertidumbre
    C2 <- c(40, 0.40)  # Concentración y su incertidumbre
    RC1 <- c(7064.46,44.58)  # Respuesta y su incertidumbre
    RC2 <- c(9001.2, 157.83)  # Respuesta y su incertidumbre
    RcMR <- c(7811.23, 78.44)  # Respuesta y su incertidumbre

# Crear objetos de incertidumbre y el dataframe

    DF <- cbind(C1, C2, RC1, RC2, RcMR)

# Definir la expresión del modelo
    modelo <- expression((C2*(RcMR - RC1)+C1*(RC2 - RcMR))/ (RC2 - RC1))

# Realizar la propagación de incertidumbre
incertidumbre_CcMR <- propagate(expr = modelo, data = DF, type = "stat", do.sim = FALSE, verbose = TRUE, nsim = 1000000)

# Extraer e imprimir los resultados
ConceBrac<-incertidumbre_CcMR$prop["Mean.1"]
ucarBrac<-incertidumbre_CcMR$prop["sd.1"]
cat(" Concentración mediante bracketing:",incertidumbre_CcMR$prop["Mean.1"], "mg/kg\n", "Desviación Estándar:", incertidumbre_CcMR$prop["sd.1"], "mg/kg\n")
##  Concentración mediante bracketing: 33.85581 mg/kg
##  Desviación Estándar: 0.5855218 mg/kg

8. Estimación empleando un punto

Para la calibración por un punto, se selecciona el nivel de calibración de 30 mg/kg, el cual presenta una incertidumbre de aproximadamente 0.0337 mg/kg. Por lo tanto, la concentración del Candidato a Material de Referencia (cMR) viene dada por:

\[C_{cMR} = R_{cMR} \cdot \frac{C_{MRC}}{R_{N3}}\]

Donde: - \(R_{cMR}\) corresponde a la respuesta instrumental del candidato. - \(C_{MRC}\) a la concentración del Material de Referencia Certificado (MRC). - \(R_{N3}\) a la respuesta instrumental del nivel correspondiente a 30 mg/kg.

La incertidumbre de caracterización mediante un nivel de calibración viene dada por:

\[u_{carN3} = C_{cMR} \cdot \sqrt{\left(\frac{u_{MRC}}{C_{MRC}}\right)^2 + \left(\frac{u_{RC1}}{R_{C1}}\right)^2 + \left(\frac{u_{RcMR}}{R_{cMR}}\right)^2}\]

A continuación, se presentan los valores obtenidos.

# Concentraciones conocidas y sus respectivas incertidumbres
    CMRC <- 30
    RN3 <- 7064.46
    uRC1 <- 44.582987786823
    RcMR<- promedio_respuestas # Corresponden al promerio de las respuestas
    uRcMR <- 78.44115519 #. Acá se asumieron 3 mediciones independientes 

    # Cálculo de la concentración del cMR
    CcMR <- RcMR * (CMRC / RN3)

    # Cálculo de la incertidumbre de caracterización mediante un nivel de calibración
    ucarN3 <- CcMR * sqrt((uMRC / CMRC)^2 + (uRC1 / RN3)^2 + (uRcMR / RcMR)^2)

    # Imprimir los resultados
    cat(" Concentración del cMR:", CcMR, "mg/kg\n","Incertidumbre de caracterización mediante un nivel de calibración:", ucarN3, "mg/kg\n")
##  Concentración del cMR: 33.167 mg/kg
##  Incertidumbre de caracterización mediante un nivel de calibración: 0.3951729 mg/kg

COMPARACIÓN FINAL

En la Siguiente Tabla se presentan los resultados finales para los tres métodos:

Método Concentración (mg/kg) Incertidumbre (mg/kg)
Unidades mg/kg mg/kg
MCO 33.650 0.923
MCP 33.669 0.755
Bracketing 33.856 0.586
Un nivel 33.167 0.395