Cuantificación de Silicio mediante colorimetría y digestión alcalina en microondas

Químico Andrés Felipe Beltrán rodríguez

3 de marzo de 2021

Resumen

En este documento se presenta el reporte reproducible de la evaluación estadística del proceso de adaptación de una metodología de cuantificación de silicio en extractos de fertilizantes.

La extracción es asistida por microondas en medio alcalino y las mediciones se realizan mediante espectrofotometría.

Resultados

Primera aproximación

###Construcción de la curva

Para los niveles de la curva de calibración se llevaron a cabo mediciones de absorbancia en \(\lambda_{max} = 660\; nm\). Cada medición se realizó por triplicado con tres volúmenes de celda diferentes provenientes de la misma solución de calibración.

C.curva <- c(0, 1,2,5,10,20,50,75,100) # Las concentraciones preparadas
Abs.curva <- c(0.000,0.013,0.026,0.075, mean(0.179,0.123,0.140), 0.269, mean(0.623,0.628,0.625),mean(1.107,1.112,1.105),mean(1.215,1.213,1.219)) # Las absorbancias leídas, los valores que no son el resultado de un promedio tuvieron 3 réplicas iguales

curva <- data.frame(Si.mg.L=C.curva, Absorbancia.u.a.=Abs.curva)
print(curva)
##   Si.mg.L Absorbancia.u.a.
## 1       0            0.000
## 2       1            0.013
## 3       2            0.026
## 4       5            0.075
## 5      10            0.179
## 6      20            0.269
## 7      50            0.623
## 8      75            1.107
## 9     100            1.215

A partir de los resultados experimentales, es posible crear un modelo de regresión lineal simple mediante la el uso de la función lm() :

modelo <- lm( Absorbancia.u.a. ~ Si.mg.L , data = curva) # Se crea el modelo lineal mediante OLS (Ordinary Least Squares Regression)

Una vez creado el modelo, podemos revisar la distribución de los residuales y los parámetros de regresión mediante el uso de la función summary():

summary(modelo)
## 
## Call:
## lm(formula = Absorbancia.u.a. ~ Si.mg.L, data = curva)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.083154 -0.014577 -0.014249 -0.002292  0.129740 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.0145770  0.0268986   0.542    0.605    
## Si.mg.L     0.0128358  0.0005908  21.725  1.1e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06188 on 7 degrees of freedom
## Multiple R-squared:  0.9854, Adjusted R-squared:  0.9833 
## F-statistic:   472 on 1 and 7 DF,  p-value: 1.104e-07

En la pantalla anterior se muestran los parámetros del modelo de regresión entre la absorbancia y la concentración de las muestras.

También es posible graficar la línea de regresión junto con los datos experimentales:

library(ggplot2)
g <- ggplot(curva, aes(Si.mg.L, Absorbancia.u.a.))
g + geom_point() + geom_smooth(method ="lm")
## `geom_smooth()` using formula 'y ~ x'

Análisis de residuales para confirmar supuesto de homocedasticidad

El primer elemento es un resumen de la distribución de los residuales, los cuales para cumplir el supuesto de homocedasticidad deben tener varianza constante y promedio cero. Al imprimir el objeto modelo, la distribución de los residuales se presenta como cuartiles, siendo el segundo cuartil la mediana, un estimador robusto del valor central de una ditribución. Es posible ver los cuartiles de una manera más gráfica mediante un gráfico boxplot:

residuales <- modelo$residuals
boxplot(residuales)
abline(h = median(residuales), col = "red", lty = 2)

median(residuales)
## [1] -0.01424855

En el gráfico boxplot, se crea una caja cuyo límite inferior es el primer cuartil, es decir que dentro de esta distribución de resultados experimentales el 25% de los datos son menores al valor que corresponde al primer cuartil (-0.014577). Bajo la misma lógica se pueden evaluar los valores para la mediana (-0.014249) y el tercer cuartil (-0.002292).

La distancia entre el tercer y el primer cuartil, es llamada el rango inter-cuartil (QIR)

\[\begin{align} IQR \; = \; Q_3 - Q_1 \end{align}\]

Los bigotes son dibujados de la forma:

el bigote inferior va desde el valor de la distribución mínimo que esté entre el primer cuartil menos 1.5 veces el rago inter-cuartil \(Q_1 - 1.5IQR\) y el primer cuartil \(Q_1\).

el bigote superior va desde el valor de la distribución máximo que esté entre el tercer cuartil \(Q_3\) y el tercer cuartil mas 1.5 veces el rago inter-cuartil \(Q_3 + 1.5IQR\).

En el boxplot que corresponde a la distribución de el primer modelo de regresión, el rango intercuartil es tan pequeño que no hay valores dentro de los rangos establecidos para generar los bigotes. Esto indica que la distribución es estrecha y puede presentar curtosis, o peso en los extremos. Esto puede deberse a valores atípicos, los cuales son detectados al estar por fuera de los bigotes del boxplot.

Podemos generar un boxplot para una distribución normal para comparar cómo debería verse la distribución si fuese normal:

set.seed(2)# para que los calculos de valores aleatorios sean reproducibles cada vez que se corra el código de este informe
dist <- rnorm(9, mean=0 , sd= sd(residuales)) # 
boxplot(dist)

En el gráfico boxplot para una muestra aleatoria de una distribución normal con la misma desviación presentada por los residuales experimentales es posible observar como se dibujan los bigotes.

Para confirmar la presencia de curtosis, pueden utilizarse herramientas gráficas, como los gráficos de densidad, y numéricas como el cálculo de momentos centrales para curtosis y oblicuidad.

library(ggplot2)

g <- qplot(residuales) 
g + geom_density(alpha = 0.4,)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

library(moments)
kurtosis(residuales)
## [1] 4.18668

Los resultados del cálculo para el momento central de curtosis toman valores entre 0 e \(\infty\). un valor mayor a 3 indica una distribución “punteaguda” (Henderson, 2005) o leptocurtica en la cual no se presentan hombros. El calculo del momento central de curtosis nos permite rechazar la hipótesis de que la dispersión de la distribución se debe a la presencia de hombros en la misma, y confirmar que se debe a datos atípicos.

Para evaluar que tanto se desvía la distribución de la normalidad, es posible realizar un gráfico cuantil-cuantil, en el cual se comparan los cuantiles para una distribución normal, con los correspondientes a la distribución empírica experimental. Si la distribución se aproxima a la normalidad, los valores de los cuantiles deberían ser los mismos para la muestra experimental y para la distribución normal, entonces, al hacer un gráfico de dispersión de los cuantiles experimentales en función de los cuantiles teóricos, los puntos deben yacer sobre sobre una línea recta.

library(car)
## Loading required package: carData
qqPlot(residuales, envelope = 0.95)

## [1] 8 9

De manera análoga a los resultados en el boxplot, hay una concentración de datos en un rango estrecho de la distribución, que yacen dentro del intervalo del 95% de confianza para la regresión entre los residuales experimentales y los teóricos. Los valores que yacen fuera del intervalo de confianza son valores atípicos. En este caso son los elementos 8 y 9 de la curva de calibración:

curva[c(8,9),]
##   Si.mg.L Absorbancia.u.a.
## 8      75            1.107
## 9     100            1.215

Estos niveles son los únicos niveles de la curva que tienen una absorbancia mayor a 1, y están por fuera del rango lineal de la absorbancia (Mayerhöfer 2020).

Pruebas de hipótesis para los estimadores de los parámetros de regresión

En la impresión del contenido del objeto modelo, R nos brinda los resultados de las pruebas de hipótesis para una regresión

Prueba t individual para los coeficientes intercepto y pendiente

En la sección coefficients de la impresión del contenido del objeto lm se presentan los coeficientes de regresión para el intercepto y la pendiente. La fila titualda con el valor de x, en este caso Si.mg.L corresponde a la pendiente.

summary(modelo)
## 
## Call:
## lm(formula = Absorbancia.u.a. ~ Si.mg.L, data = curva)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.083154 -0.014577 -0.014249 -0.002292  0.129740 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.0145770  0.0268986   0.542    0.605    
## Si.mg.L     0.0128358  0.0005908  21.725  1.1e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06188 on 7 degrees of freedom
## Multiple R-squared:  0.9854, Adjusted R-squared:  0.9833 
## F-statistic:   472 on 1 and 7 DF,  p-value: 1.104e-07

Teniendo como ecuación de regresión:

\[\begin{align} \hat{y_i} = b_0 + bx_i \end{align}\]

Y los residuales para cada nivel \(i\) como:

\[\begin{align} e_i = y_i - \hat{y_i} \end{align}\]

La aproximación de regresión simple, la cual minimiza la suma de los residuales al cuadrado o Ordinary Least Squares Regression (OLS) tiene la ventaja de que podemos obtener una ecuación para el resultado de cada parámetro de regresión.

Para la pendiente:

\[\begin{align} b = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2} \end{align}\]

y para el intercepto:

\[\begin{align} b_0 = \bar{y} - b \cdot \bar{x} \end{align}\]

De este modo se obtienen los parámetros \(b_0 = 0.0133425\) y \(b = 0.0124046\). Con cada parámetro está asociado un error estándar. Este error estándar se utiliza para transformar el valor real a la escala de una distribución normal estándar, en la cual se hace la prueba de hipótesis. Para hallar el error estándar de cada parámetro de regresión es necesario obtener el error estandar de los residuales, una medida de la dispersión de los valores predichos respecto a los experimentales:

\[\begin{align} S^2_e = \frac{1}{n-2} \sum_{i=1}^n ( y_i - \hat{y_i})^2 = \frac{1}{n-2} \sum_{i=1}^n e^2 \end{align}\]
En donde los grados de libertad son n-2 ya que estimamos dos parámetros del modelo. Para definir un intervalo de confianza en el nivel p para los parámetros, se necesitan los valores de t y el error estandar de cada parámetro:

\[\begin{align} b_0 \pm t_{n-2;p} \cdot s(b_0) \end{align}\]

\[\begin{align} b \pm t_{n-2;p} \cdot s(b) \end{align}\]

Con los errores estándar de \(b_0\) y \(b\):

\[\begin{align} s(b_0) = s_e \cdot \sqrt{ \frac{\sum_{i=1}^n x_i^2}{ n \sum_{i=1}^n (x_i - \bar{x})^2 } } \end{align}\]

\[\begin{align} s(b) = \frac{s_e}{\sqrt{\sum_{i=1}^n (x_i - \bar{x})^2}} \end{align}\]

Ya que R nos brinda al imprimir el contenido del modelo con summary(modelo) el resultado del cálculo de los errores estándar en la columna Std. Error y el valor de t calculado para la prueba de hipótesis en la columna t value podemos calcular los intervalos de confianza con un nivel de significancia de 0.05.

Q <- qnorm(p=1-0.05/2)
intervalo_intercepto  <- Q *0.0268986
intervalo_pendiente <- Q*0.0005908
print(round(c(modelo$coefficients[1],modelo$coefficients[2]),3))
## (Intercept)     Si.mg.L 
##       0.015       0.013
print(round(c(intervalo_intercepto,intervalo_pendiente),3))
## [1] 0.053 0.001

De esta manera podemos reportar los parametros de regresión con intervalos de confianza : \(b_0 = 0.015 \pm 0.053\) , \(b = 0.013 \pm 0.001\). Para reportar de una manera correcta los parámetros del modelo de regresión, hace falta reportar el resultado de la prueba de hipótesis para la diferencia significativa de cero:

Intercepto: La probabilidad de que una diferencia de cero igual o superior a la obtenida en este exprimento se vuelva a presentar por casualidad, es \(p= 0.605\), o una probabilidad del 60%. Lo cual indica que el intercepto no es significativamente diferente de cero y no es necesario para el análisis de regresión.

Pendiente: La probabilidad de que una diferencia de cero igual o superior a la obtenida en este exprimento se vuelva a presentar por casualidad, es \(p= 1.1\cdot10^{-7}\), o una probabilidad del \(1.1\cdot10^{-5}\)%. Lo cual indica que la diferencia de cero se da por una relación causal entre los cambios de señal y los cambios de concentración. La pendiente es significativamente diferente de cero y es necesaria para el análisis de regresión.

En este momento es posible presentar los resultados para los parámetros de regresión de una manera adecuada: \(b_0 = 0.015 \pm 0.053 \;(p=0.605)\), \(b = 0.013 \pm 0.001 \;(p=1.1\cdot 10^{-7})\).

Representación de los datos por el modelo

La representación de los datos experimentales por el modelo de regresión lineal se puede evaluar con el coeficiente de regresión \(R^2\) de pearson, el cual R presenta por defecto como Multiple R-squared, ya que también se puede calcular para modelos con varias variables independientes. En este caso, en regresión bivariada es el mismo que el coeficiente de pearson, e indica el porcentaje de representación de los datos usados para construir el modelo por la ecuación obtenida. un \(R^2 = 0.9854\) indica una representación del 98.54% de los datos experimentales:

round(9*0.98)
## [1] 9

Para esta regresión el modelo explica la totalidad de los datos utilizados para la construcción de la curva. A su vez, este resultado indica que el 98& de la variabilidad entre el modelo y los datos experimentales está dada por la variabilidad debida a la regresión (Ferreira 2007).

Prueba de significancia de la regresión

La prueba de significancia de la regresión hace una prueba con las siguientes hipótesis:

\(H_0:\) La Hipótesis nula que hay que comprobar implica que todos los coeficientes de la regresión son iguales a cero. \(H_1:\) La Hipótesis alternativa que se acepta cuando la nula es falsa, implica que al menos uno de los coeficientes es significativamente diferente de cero.

Esta prueba se hace al calcular el valor de F, y se rechaza la hipótesis nula a un nivel de signigicancia \(\alpha = 0,05\). con un valor de \(p = 1.104e-07\) confirma la significancia de almenos uno de los coeficientes, en este caso la pendiente.

Ajuste sin los niveles 75 mg Si /L y 100 mg Si / L de la curva

Construcción del modelo

Debido a que se obtuvieron dos resultados de absorbancia mayores a 1:

curva[c(9,8),]
##   Si.mg.L Absorbancia.u.a.
## 9     100            1.215
## 8      75            1.107

Podemos revisar el comportamiento de la regresión restando estos dos puntos.

curva2 <- curva[-c(8,9),]
modelo2 <-  lm( Absorbancia.u.a. ~ Si.mg.L , data = curva2)
summary(modelo2)
## 
## Call:
## lm(formula = Absorbancia.u.a. ~ Si.mg.L, data = curva2)
## 
## Residuals:
##          1          2          3          4          5          6          7 
## -0.0133425 -0.0127471 -0.0121516 -0.0003654  0.0416118  0.0075660 -0.0105712 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.0133425  0.0103684   1.287    0.255    
## Si.mg.L     0.0124046  0.0004984  24.891 1.95e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.02186 on 5 degrees of freedom
## Multiple R-squared:  0.992,  Adjusted R-squared:  0.9904 
## F-statistic: 619.6 on 1 and 5 DF,  p-value: 1.953e-06

Observando la nueva línea de regresión y los datos expermientales:

library(ggplot2)
g <- ggplot(curva2, aes(Si.mg.L, Absorbancia.u.a.))
g + geom_point() + geom_smooth(method ="lm")
## `geom_smooth()` using formula 'y ~ x'

Análisis de residuales para confirmar supuesto de homocedasticidad

Podemos realizar las mismas pruebas que para el primer modelo:

residuales2 <- modelo2$residuals
boxplot(residuales2)
abline(h = median(residuales2), col = "red", lty = 2)

median(residuales2)
## [1] -0.01057122

En este caso observamos que hay solo un dato atípico y que es posible gracias a la distribución dibujar los bigotes.

library(ggplot2)

g <- qplot(residuales2) 
g + geom_density(alpha = 0.4,)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

En este caso el grafico de densidad nos presenta una oblicuidad hacia la derecha, la cual podemos confirmar calculando el momento central:

library(moments)
kurtosis(residuales2)
## [1] 3.79515
skewness(residuales2)
## [1] 1.474363

En donde un valor de curtosis cercano a 3 indica que estamos más cerca de una distribución normal, con una oblicuidad positiva (cola hacia la derecha).

Podemos revisar la variación de los residuales en fución de las predicciones de absorbancia:

y.pred <- (curva2$Si.mg.L*modelo$coefficients[2]) + modelo$coefficients[1]

residuales <- data.frame(residuales = modelo2$residuals, y.pred = y.pred)

ggplot(residuales, aes(y.pred, residuales)) + geom_point()

Esta variación debería ser constante a lo largo de la variable predicha (absorbancia). en este gráfico de dispersión la variación aumenta a medida que aumenta la absorbancia, lo que indica que el error en x es significativo, contrario al supuesto de homocedasticidad.

Pruebas de parámetros de regresión

Para reportar los coeficientes de la regresión con intervalos de confianza:

Q <- qnorm(1-0.05/2)
intervalo_intercepto2  <- 0.0103684*Q 
intervalo_pendiente2 <-0.0004984*Q
print(round(c(modelo2$coefficients[1],modelo2$coefficients[2]),3))
## (Intercept)     Si.mg.L 
##       0.013       0.012
print(round(c(intervalo_intercepto2,intervalo_pendiente2),3))
## [1] 0.020 0.001

Teniendo de nuevo el resultado de que el intercepto \(b_0 = 0.013 \pm 0.020 \; (p=0.255 )\) no es sigificativo para la regresión, y la pendiente \(b = 0.012\pm 0.001 \; (p=1.95\cdot10^{-6} )\) si es significativa.

De manera análoga al primer modelo se pueden evaluar los demás parámetros y pruebas de esta regresión.

Cuantificación de muestras problema

Se realizó la cuantificación de silicio en los extractos de digestión alcalina asistida por microondas y en la dilución preparada de silicio soluble en las muestras AFM402 y AFM 12863 siendo estas tierras de diatomeas y un fertilizante de silicio soluble edapot respectivamente.

En esta primera aproximación, hubo un error en la preparación de la curva de calibración, y la lectura de la absorbancia de las muestras fue realizada el 01/03/2021, mientras que la curva de calibración fue medida el 03/03/2021, la cual fue utilizada para construir los objetos modelo y modelo2.

Se guardan los nombres de las muestras y las absorbancias:

nombres <- c("blanco procedimiento 1",
             "MRC Dil 2-1",
             "402-D50-1",
             "402-D50-2",
             "402-D50-3",
             "blanco procedimiento 2",
             "402-D50-3",
             "MRC Dil 2-2",
             "402-D50-4",
             "blanco procedimiento 3",
             "402-D50-5",
             "402-D50-6",
             "402-D50-7",
             "402-D50-8",
             "Si Soluble D10",
             "Si Soluble D20",
             "MRC-1",
             "MRC-2")

absorbancia <- c(0.048,0.237,0.124,0.120,0.062,0.048,0.106,0.271,0.159,0.046,0.117,0.179,0.134,0.132,0.847,0.472,0.432,0.447)

Se juntan los datos en un solo data.frame :

muestras <- data.frame(muestra = nombres, absorbancia= absorbancia)
muestras
##                   muestra absorbancia
## 1  blanco procedimiento 1       0.048
## 2             MRC Dil 2-1       0.237
## 3               402-D50-1       0.124
## 4               402-D50-2       0.120
## 5               402-D50-3       0.062
## 6  blanco procedimiento 2       0.048
## 7               402-D50-3       0.106
## 8             MRC Dil 2-2       0.271
## 9               402-D50-4       0.159
## 10 blanco procedimiento 3       0.046
## 11              402-D50-5       0.117
## 12              402-D50-6       0.179
## 13              402-D50-7       0.134
## 14              402-D50-8       0.132
## 15         Si Soluble D10       0.847
## 16         Si Soluble D20       0.472
## 17                  MRC-1       0.432
## 18                  MRC-2       0.447

Luego, utilizando los coeficientes de regresión hallamos las concentraciones en mg Si/L

muestras$concentracion.sin.intercepto <- round((muestras$absorbancia /modelo2$coefficients[2]),3)
muestras $concentracion.con.intercepto <- round((muestras$absorbancia -modelo2$coefficients[1])/modelo2$coefficients[2],3)
knitr::kable(muestras)
muestra absorbancia concentracion.sin.intercepto concentracion.con.intercepto
blanco procedimiento 1 0.048 3.870 2.794
MRC Dil 2-1 0.237 19.106 18.030
402-D50-1 0.124 9.996 8.921
402-D50-2 0.120 9.674 8.598
402-D50-3 0.062 4.998 3.923
blanco procedimiento 2 0.048 3.870 2.794
402-D50-3 0.106 8.545 7.470
MRC Dil 2-2 0.271 21.847 20.771
402-D50-4 0.159 12.818 11.742
blanco procedimiento 3 0.046 3.708 2.633
402-D50-5 0.117 9.432 8.356
402-D50-6 0.179 14.430 13.355
402-D50-7 0.134 10.802 9.727
402-D50-8 0.132 10.641 9.566
Si Soluble D10 0.847 68.281 67.206
Si Soluble D20 0.472 38.050 36.975
MRC-1 0.432 34.826 33.750
MRC-2 0.447 36.035 34.959

Posteriormente podemos convertir estas concentraciones a % p/p de \(SiO_2\):

  • Primero, los extractos directos:
FD.MCR1 <- round(1.803807262,5)
FD.MCR2 <- round(1.850335307,5)
masas.muestras <- c(0, 0.101/FD.MCR1,   0.1027, 0.1001, 0.1023, 0,  0.1054, 0.1034/FD.MCR2, 0.1031, 0,  0.1010, 0.1011, 0.1025, 0.1113, NA, NA,0.101,0.1034
)

muestras$porc.SiO2 <- round(muestras$concentracion.sin.intercepto *(0.025*60.8*100)/(1000*28.09*masas.muestras), 4)
knitr::kable(muestras)
muestra absorbancia concentracion.sin.intercepto concentracion.con.intercepto porc.SiO2
blanco procedimiento 1 0.048 3.870 2.794 Inf
MRC Dil 2-1 0.237 19.106 18.030 1.8464
402-D50-1 0.124 9.996 8.921 0.5267
402-D50-2 0.120 9.674 8.598 0.5230
402-D50-3 0.062 4.998 3.923 0.2644
blanco procedimiento 2 0.048 3.870 2.794 Inf
402-D50-3 0.106 8.545 7.470 0.4387
MRC Dil 2-2 0.271 21.847 20.771 2.1155
402-D50-4 0.159 12.818 11.742 0.6727
blanco procedimiento 3 0.046 3.708 2.633 Inf
402-D50-5 0.117 9.432 8.356 0.5053
402-D50-6 0.179 14.430 13.355 0.7723
402-D50-7 0.134 10.802 9.727 0.5703
402-D50-8 0.132 10.641 9.566 0.5173
Si Soluble D10 0.847 68.281 67.206 NA
Si Soluble D20 0.472 38.050 36.975 NA
MRC-1 0.432 34.826 33.750 1.8658
MRC-2 0.447 36.035 34.959 1.8858

Luego, las diluciones volumetricas de la muestra de silicio soluble en agua:

Vol.alic.D10.Si.Sol <- 1
Vol.alic.D20.Si.Sol <- 0.5

muestras$porc.SiO2[15] <- round(  muestras$concentracion.con.intercepto[15]*(0.01*250*1*60.8*100)/(Vol.alic.D10.Si.Sol*1000*28.09*1.0182)       ,4)

muestras$porc.SiO2[16] <- round(  muestras$concentracion.con.intercepto[15]*(0.01*250*1*60.8*100)/(Vol.alic.D20.Si.Sol*1000*28.09*1.0182)       ,4)
knitr::kable(muestras)
muestra absorbancia concentracion.sin.intercepto concentracion.con.intercepto porc.SiO2
blanco procedimiento 1 0.048 3.870 2.794 Inf
MRC Dil 2-1 0.237 19.106 18.030 1.8464
402-D50-1 0.124 9.996 8.921 0.5267
402-D50-2 0.120 9.674 8.598 0.5230
402-D50-3 0.062 4.998 3.923 0.2644
blanco procedimiento 2 0.048 3.870 2.794 Inf
402-D50-3 0.106 8.545 7.470 0.4387
MRC Dil 2-2 0.271 21.847 20.771 2.1155
402-D50-4 0.159 12.818 11.742 0.6727
blanco procedimiento 3 0.046 3.708 2.633 Inf
402-D50-5 0.117 9.432 8.356 0.5053
402-D50-6 0.179 14.430 13.355 0.7723
402-D50-7 0.134 10.802 9.727 0.5703
402-D50-8 0.132 10.641 9.566 0.5173
Si Soluble D10 0.847 68.281 67.206 35.7163
Si Soluble D20 0.472 38.050 36.975 71.4327
MRC-1 0.432 34.826 33.750 1.8658
MRC-2 0.447 36.035 34.959 1.8858

En la tabla anterior están los resultados en \(\% \; SiO_2\):

  • Para la muestra Muestra 402 podemos evaluar la distribución de los resultados de las réplicas, y verificar si podemos reportar el promedio como medida de tendencia central:
m.402 <- muestras[c(3,4,5,7,9,11:14),5]
boxplot(m.402)

En el gráfico de boxplot para los resultados en \(%SiO_2\) se encuentran 3 datos atípicos, las réplicas 3, 4 y 6. al removerlas podemos evaluar de nuevo la distribución sin efectos de escala por datos atípicos:

m.402.sin.atipicos <- m.402[c(3,4,6)]
boxplot(m.402.sin.atipicos)

Una vez evaluamos la distribución de los resultados sin datos atípicos, desde el boxplot se puede inferir que la muestra tiene oblicuidad hacia la derecha, lo que hará que los valores de la media y la mediana difieran:

summary(m.402.sin.atipicos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2644  0.3515  0.4387  0.4028  0.4720  0.5053

Podemos confirmar la afirmación de oblicuidad negativa calculando el momento central de oblicuidad:

library(moments)
skewness(m.402.sin.atipicos)
## [1] -0.4860191

El valor medio del porcentaje de \(SiO_2\) para la muestra de tierra de diatomeas \(0.402\) difiere del reportado en un 99.46% :

error.diatomeas <- 
  ((74.2-0.402)/74.2)*100
error.diatomeas 
## [1] 99.45822

Esto debido a la alta concentración de silicio en la muestra, la cual generó en el extracto una precipitación en forma de gel, y que a no logró pasar a través del filtro en el proceso de extracción. Este resultado permite proponer evaluar el rango de concentraciones de silicio en las muestras a trabajar, en el cual se mantenga un sesgo debido a la pérdida por precipitación en lo mínimo posible. Lo anterior podría lograrse disminuyendo la concentración de muestra en el extracto, o aumentando los reactivos. Otras variables podrían evaluarse para optimizar el proceso de extracción mediante un diseño experimental, similar al utilizado por Vereda Alonso 2011 variando el tiempo de digestión, la temperatura de digestión y las proporciones \(NaOH:muestra\) y \(H_2O_2:muestra\).

Para la muestra de silicio soluble se espera una concentración de ~ \(28 \%\)

tabla.Si.Soluble <- data.frame(muestra = muestras$muestra[c(15,16)], SiO2 = muestras[c(15,16),5])
tabla.Si.Soluble
##          muestra    SiO2
## 1 Si Soluble D10 35.7163
## 2 Si Soluble D20 71.4327

Valores que incluso en dilución, son extremadamente altos comparado a lo esperado, Lo cual puede deberse a la toma de una muestra no representativa del producto, y una dilución mayor a la adecuada en el momento de preparar el extracto.

Para el material de referencia certificado de roca fosfórica marroquí, el cual reporta un porcentaje en masa de \(SiO_2\) de \(2.01\%\).

tabla.MRC <- data.frame(muestra = muestras$muestra[c(2,8,17,18)],
                        SiO2 = muestras[c(2,8,17,18),5])     
tabla.MRC$Error <- round(abs(((tabla.MRC$SiO2-2.01)/2.01)*100),3)
tabla.MRC
##       muestra   SiO2 Error
## 1 MRC Dil 2-1 1.8464 8.139
## 2 MRC Dil 2-2 2.1155 5.249
## 3       MRC-1 1.8658 7.174
## 4       MRC-2 1.8858 6.179

En la tabla anterior se presentan los resultados de la determinación del contenido de silicio en el material de referencia certificado de roca fosfórica, junto con el porcentaje de recuperación para cada réplica, en los cuales el máximo porcentaje de error relativo es \(8.14\%\). El comportamiento de los resultados para el material de referencia, soporta las afirmaciones sobre los resultados de las muestras de tierra de diatomeas y de silicio soluble, sobre un mayor efecto del proceso de extracción en el sesgo los resultados, y no del método de cuantificación.

Experimento 05/03/2021 Extractos paz de río - comité de silicio

En este experimento se analizaron un conjunto de extractos con ácido acético 0,514 M nombradas de la forma: B (Blanco), E (Extracto), EA (Extracto con adición de silicio) ,BA (Blanco con adición de silicio), las cuales se analizaron por duplicado para tener en cuenta el error de las diluciones volumétricas.

blanco.curva <- 0.01
concentraciones <- c(1,2,5,10,20,50,100)
absorbancias <- c(mean(0.016,0.013,0.016),
                  mean(0.021,0.020,0.020),
                  mean(0.039,0.041,0.043),
                  mean(0.083,0.085,0.085),
                  mean(0.160,0.0160,0.0156),
                  mean(0.391,0.392,0.390),
                  mean(0.694,0.695,0.696)
                  )
absorbancias <- absorbancias - blanco.curva


curva3 <- data.frame(Si.mg.L = concentraciones, absorbancia.u.a.=absorbancias)
modelo.05.03.2021 <- lm(absorbancia.u.a.~Si.mg.L , data = curva3)
summary(modelo.05.03.2021)
## 
## Call:
## lm(formula = absorbancia.u.a. ~ Si.mg.L, data = curva3)
## 
## Residuals:
##          1          2          3          4          5          6          7 
## -0.0046744 -0.0066317 -0.0095038 -0.0002905  0.0071361  0.0294157 -0.0154515 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.0037170  0.0078207   0.475    0.655    
## Si.mg.L     0.0069573  0.0001813  38.381 2.26e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01619 on 5 degrees of freedom
## Multiple R-squared:  0.9966, Adjusted R-squared:  0.9959 
## F-statistic:  1473 on 1 and 5 DF,  p-value: 2.262e-07
Q <- qnorm(1-0.05/2)
intervalo_intercepto3 <- Q* 0.0078207
intervalo_pendiente3 <- Q* 0.0001813
print(round(c(0.0037170 ,0.0069573 ),3))
## [1] 0.004 0.007
print(round(c(intervalo_intercepto3,intervalo_pendiente3),4))
## [1] 0.0153 0.0004

Para este modelo, el intercepto, \(b_0 = 0.004 \pm 0.0153 \;(p = 0.655 )\) no es significativamente diferente de cero, mientras que la pendiente \(b = 0.007 \pm 0.0004 \; (p = 2.26 \cdot 10^{-7})\) es significativamente diferente de cero.

library(ggplot2)
g <- ggplot(curva3, aes(Si.mg.L,absorbancia.u.a.))
g + geom_smooth(method = "lm") + geom_point()
## `geom_smooth()` using formula 'y ~ x'

residuales3 <- modelo.05.03.2021$residuals
boxplot(residuales3)
abline(h = median(residuales3), col = "red", lty = 2)

median(residuales3)
## [1] -0.004674382
library(ggplot2)

g <- qplot(residuales3) 
g + geom_density(alpha = 0.4,)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

library(moments)
kurtosis(residuales3)
## [1] 3.334163
skewness(residuales3)
## [1] 1.163268
muestras2 <- c("B7",
              "B7-2",
              "AFM-09722",
              "AFM-09722-2",
              "B.A.7",
              "B.A.7-2",
              "E7",
              "E7-2",
              "E.A.7",
              "E.A.7-2")

Abs.muestras <- c(mean(0.032,0.030,0.026),
                  mean(0.030,0.030,0.027),
                  mean(0.079,0.085,0.073),
                  mean(0.080,0.083,0.078),
                  mean(0.133,0.127,0.131),
                  mean(0.131,0.124,0.124),
                  mean(0.267,0.275,0.278),
                  mean(0.288,0.273,0.285),
                  mean(0.348,0.342,0.432),
                  mean(0.353,0.354,0.350))

muestras2.1 <- data.frame(Muestra = muestras2, Absorbanciau.a. = Abs.muestras)
muestras2.1$C.sin.intercepto <- muestras2.1$Absorbanciau.a./modelo.05.03.2021$coefficients[2]
muestras2.1$C.con.intercepto <- (muestras2.1$Absorbanciau.a.- modelo.05.03.2021$coefficients[1])/modelo.05.03.2021$coefficients[2]
print(muestras2.1)
##        Muestra Absorbanciau.a. C.sin.intercepto C.con.intercepto
## 1           B7           0.032         4.599456         4.065195
## 2         B7-2           0.030         4.311990         3.777729
## 3    AFM-09722           0.079        11.354907        10.820646
## 4  AFM-09722-2           0.080        11.498640        10.964379
## 5        B.A.7           0.133        19.116489        18.582229
## 6      B.A.7-2           0.131        18.829023        18.294763
## 7           E7           0.267        38.376712        37.842451
## 8         E7-2           0.288        41.395105        40.860844
## 9        E.A.7           0.348        50.019085        49.484824
## 10     E.A.7-2           0.353        50.737750        50.203489

La tabla anterior presenta una concentración de Silicio en el blanco de 4.07 mg Si/L para la primera replica y 3.78 mg Si/L para la segunda réplica. Esto se atribuye al contacto de los extractos con material de vidrio durante el proceso de extracción, efecto que se minimizará en el siguiente experimento sin material de vidrio.

Cambio en el proceso de extracción “08/03/2021”

El día 08 de marzo de 2021 se preparó la colorimetría para el conjunto de muestras analizado en la sección anterior cambiando el recipiente de vidrio en la etapa de extracción por recipíentes de plástico para evitar la señal del blanco de procedimiento.

Se prepararon soluciones a partir de la curva de calibración para detectar la señal asociada a silicio en \(\lambda_{máx}= 660\; nm\) mediante el espectrofotómetro pharo 300.

ConcentracionesC.4 <- c(0,1,2,5,10,20,50,100)
Abs.H2O.HPLC <- c(0.012,0.09,0.013)
AbsorbanciasC.4 <- c(mean(0.05,-0.06,0.04),
                     mean(0.006,0.011,0.008),
                     mean(0.023,0.022,0.024),
                     mean(0.052,0.056,0.057),
                     mean(0.097,0.099,0.098),
                     mean(0.169,0.167,0.169),
                     mean(0.364,0.369,0.366),
                     mean(0.703,0.701,0.705))
curva4 <- data.frame(Si.mg.L = ConcentracionesC.4, Absorbancia.u.a. = AbsorbanciasC.4)
modelo4 <- lm(Absorbancia.u.a. ~ Si.mg.L, data = curva4)
intercepto4 <- modelo4$coefficients[1]
pendiente4 <- modelo4$coefficients[2]
summary(modelo4)
## 
## Call:
## lm(formula = Absorbancia.u.a. ~ Si.mg.L, data = curva4)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -0.0234869 -0.0069110 -0.0008745  0.0070509  0.0273359 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.022664   0.007185   3.155   0.0197 *  
## Si.mg.L     0.006823   0.000178  38.325 2.11e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01652 on 6 degrees of freedom
## Multiple R-squared:  0.9959, Adjusted R-squared:  0.9953 
## F-statistic:  1469 on 1 and 6 DF,  p-value: 2.107e-08
boxplot(modelo4$residuals)

y.pred4 <- (curva4$Si.mg.L*modelo4$coefficients[2]) + modelo4$coefficients[1]

residuales4 <- data.frame(residuales = modelo4$residuals, y.pred = y.pred4)

ggplot(residuales4, aes(y.pred, residuales)) + geom_point()

intervalo_intercepto4 <-  0.007185*Q
intervalo_pendiente4 <-  0.000178*Q
print(round(c(0.022664 ,0.006823),3))
## [1] 0.023 0.007
print(round(c(intervalo_intercepto4,intervalo_pendiente4),4))
## [1] 0.0141 0.0003
library(ggplot2)
g <- ggplot(curva4, aes(Si.mg.L,Absorbancia.u.a.))
g + geom_smooth(method = 'lm') + geom_point()
## `geom_smooth()` using formula 'y ~ x'

Mediante el análisis de regresión se obtienen los parámetros \(b_0 = 0.023 \pm0.0141 (p= 0.0197)\) y \(b = 0.007 \pm 0.0003 (p= 2.11e-08)\)

En paralelo se prepararon las soluciones correspondientes a las muestras suministradas por el área de fertilizantes junto a tres controles analíticos, y una nueva preparación de la muestra de silicio soluble edapot AFM 12863, la cual fue preparada pesando 2.0144g y llevando a un volumen de 100 mL. A partir de el extracto se preparó una dilución 100, tomando 1 mL de extracto y llevandolo a un volúmen final de 100 mL. La dilución final fue seleccionada para la determinación de Si en solución mediante colorimetría:

muestras4 <- data.frame(Muestra = c("Control 1.mg.L",
                                    "Control 20.mg.L",
                                    "Control 100.mg.L",
                                    "Blanco.A.A.1",
                                    "E.A.1",
                                    "E.A.1 + Silicio",
                                    "E.Est Silicio 1",
                                    "AFM 9722 - 1",
                                    "AFM 9722 - 2",
                                    "AFM 12863 D100"
                                    )
                        )
muestras4$Absorbancia.u.a. <- c(mean(0.016,0.018,0.020),
                                mean(0.163,0.153,0.165),
                                mean(0.707,0.696,0.703),
                                mean(0.015,0.016,0.014),
                                mean(0.211,0.200,0.199),
                                mean(0.219,0.220,0.230),
                                mean(0.143,0.141,0.146),
                                mean(0.010,0.017,0.016),
                                mean(0.008,0.024,0.025),
                                mean(0.213,0.212,0.209)) 

muestras4$Si.mg.L.Con.Intercepto <- (muestras4$Absorbancia.u.a - intercepto4) / pendiente4
muestras4$Si.mg.L.Sin.Intercepto <- (muestras4$Absorbancia.u.a) / pendiente4
muestras4$Si.mg.L.Con.Intercepto <- round(muestras4$Si.mg.L.Con.Intercepto,2)
muestras4$Si.mg.L.Sin.Intercepto <- round(muestras4$Si.mg.L.Sin.Intercepto,2)

muestras4$SiO2 <- rep(NA, 10) 
muestras4$SiO2[10] <-round((27.90*60.08*100*0.1*100)/(1000*28.09*2.0144),2)
knitr::kable(muestras4)
Muestra Absorbancia.u.a. Si.mg.L.Con.Intercepto Si.mg.L.Sin.Intercepto SiO2
Control 1.mg.L 0.016 -0.98 2.35 NA
Control 20.mg.L 0.163 20.57 23.89 NA
Control 100.mg.L 0.707 100.30 103.62 NA
Blanco.A.A.1 0.015 -1.12 2.20 NA
E.A.1 0.211 27.60 30.93 NA
E.A.1 + Silicio 0.219 28.78 32.10 NA
E.Est Silicio 1 0.143 17.64 20.96 NA
AFM 9722 - 1 0.010 -1.86 1.47 NA
AFM 9722 - 2 0.008 -2.15 1.17 NA
AFM 12863 D100 0.213 27.90 31.22 29.62

Mediante los resultados podemos evaluar la exactitud del método mediante el porcentaje de recuperación de las adiciones realizadas, la adición del blanco fue de \(16,02 \;mg/L\) y la de el extracto paz de rio de \(15,80\;mg/L\)

muestras4$recuperacion <- rep(NA,10)
muestras4$recuperacion[6] <- ((muestras4$Si.mg.L.Con.Intercepto[6]- muestras4$Si.mg.L.Con.Intercepto[5])/15.80)*100

muestras4$recuperacion[7] <- ((muestras4$Si.mg.L.Con.Intercepto[7]- muestras4$Si.mg.L.Con.Intercepto[4])/16.02)*100

Podemos también calcular la recuperación para la determinación de las adiciones mediante absorción atómica:

Muestra.PZR.AA <- 25.90
blanco.AA <- -5.58
Muestra.PZR.Ad <- 30.65
blanco.AA.Ad  <- 16.64
recuperaciones <- data.frame(muestra = c('Blanco + Si','muestra Paz de Rio + Si'),
                             recuperacion.A.A. = c(  (blanco.AA.Ad - blanco.AA)/15.80*100  , (Muestra.PZR.Ad - Muestra.PZR.AA)/15.80*100 ),
                             recuperacion.UV = round(c(muestras4[7,5],muestras4[6,5]),3)
                             
                             )
knitr::kable(recuperaciones)
muestra recuperacion.A.A. recuperacion.UV
Blanco + Si 140.63291 NA
muestra Paz de Rio + Si 30.06329 NA

En la tabla anterior se presentan los porcentajes de recuperación de las adiciones de silicio, resultados que permiten evidenciar que la señal es mayor que la esperada en los blanco mediante anmbas técnicas espectrofotométricas, y a su vez la muestra de paz de río presenta una señal menor a la esperada en ambas técnicas espectrofotométricas. Lo cual indica un posible efecto matriz de la muestra paz de río, lo cual puede evidenciarse en la técnica colorimétrica cuando hay presencia de fósforo y hierro(Govett 1961).

Respecto a la muestra de silicio soluble Edapot AFM 12863 podemos obtener el porcentaje expresado como \(\% SiO_2\):

muestras4$SiO2[10]
## [1] 29.62

Podemos observar las concentraciones y absorbancias de las muestras en la curva de calibración:

library(ggplot2)
g <- ggplot(curva4, aes(Si.mg.L,Absorbancia.u.a.))

g + geom_smooth(method = 'lm') + geom_point() + geom_point(aes(Si.mg.L.Con.Intercepto,Absorbancia.u.a.), data = muestras4, colour = 'red')
## `geom_smooth()` using formula 'y ~ x'

Debido a la alta dispersión en las respuestas de la curva de calibración a bajas concentraciones, existen predicciones para concentraciones negativas.

Conclusiones

  • Debido a la ausencia de una varianza constante en los residuales de las curvas de calibración, es aconsejable realizar diluciones gravimétricas para evitar el error en x.

  • Las mediciones a bajas concentraciones en el espectrofotómetro pharo 300 presentan una alta dispersión, por lo que es posible proponer una comparación de mediciones entre espectrofotómetros con el hach.

  • Es aconsejable estudiar el efecto matriz con la combinación de calibración externa, adición de estándar, y calibración de youden (Castells 2000).

Referencias

  • Saihua, L., Yunhe, X., Ji, X., Juan, H., Bocharnikova, E. A., & Matichenkov, V. V. (2018). Microwave digestion for colorimetric determination of total Si in plant and mineral samples. Communications in Soil Science and Plant Analysis, 49(7), 840-847.

  • Henderson, A. R. (2006). Testing experimental data for univariate normality. Clinica chimica acta, 366(1-2), 112-129.

  • Miller, J. N. (1991). Basic statistical methods for analytical chemistry. Part 2. Calibration and regression methods. A review. Analyst, 116(1), 3-14.

  • Mayerhöfer, T. G., Pahlow, S., & Popp, J. (2020). The Bouguer‐Beer‐Lambert law: Shining light on the obscure. ChemPhysChem. doi:10.1002/cphc.202000464

  • Alonso, E. V., de Torres, A. G., Cordero, M. S., & Pavón, J. C. (2011). Multivariate optimization of the synthesis and of the microwave dissolution of biomorphic silicon carbide ceramics. Microchemical Journal, 97(2), 101-108.

  • Ferreira, S. L. C., Bruns, R. E., da Silva, E. G. P., Dos Santos, W. N. L., Quintella, C. M., David, J. M., … & Neto, B. B. (2007). Statistical designs and response surface techniques for the optimization of chromatographic systems. Journal of chromatography A, 1158(1-2), 2-14.

  • Castells, R. C., & Castillo, M. A. (2000). Systematic errors: detection and correction by means of standard calibration, Youden calibration and standard additions method in conjunction with a method response model. Analytica chimica acta, 423(2), 179-185.

  • • Govett, G. J. S. (1961). Critical factors in the colorimetric determination of silica. Analytica Chimica Acta, 25(1), 69-80.