1 + 1
[1] 2
24 de septiembre de 2024
En este capítulo profundizaremos en el concepto de “Investigación Reproducible” el cual, además, nos permitirá ser más eficientes al analizar datos del laboratorio.
Imagine la siguiente situación:
Ud. está en el laboratorio y debe generar el informe de validación de un método analítico y, además, presentar los resultados de la validación a la gerente técnico. Digamos que sólo posee Excel, Word y Powerpoint para hacer estas dos tareas.
Sobresimplificaré la historia para ir al punto rápidamente.
Probablemente comenzaría con una hoja Excel vacía.
Iría llenando la hoja con los datos de la validación. Si es ordenado(a) colocaría cada etapa de la validación en una hoja distinta, por ejemplo:
Ahora, en la hoja calibracion
llevaría a cabo alguna de estas tareas:
Datos
de Excel y llevaría a cabo el análisis de regresiónLuego abriría un Word y comenzaría el largo y tortuoso proceso de COPIAR Y PEGAR.
Listo.
Ahora, procede de la misma manera con los datos de lod y loq
, precision
, sesgo
, etc.
Ojo que aún no ha escrito nada en el informe y no ha podido interpretar los resultados. Sólo ha copiado y pegado tablas y figuras.
Asumamos que terminó el informe. Ahora, debe hacer la presentación en Powerpoint.
Vamos de nuevo con la tortura del COPIAR Y PEGAR:
Listo.
Informe y presentación finalizados. Todo listo para que se luzca de mañana ante la Gerente Técnica del Laboratorio.
Pero ocurre algo inesperado.
A última hora se percata que hay un error en la integración de los cromatogramas y debe recalcular nuevamente todas las áreas.
Si Ud. aún vive en el siglo XX (estadísticamente hablando) debe hacer todo el proceso de COPIAR Y PEGAR las tablas y figuras !de nuevo!
¡Basta! Pare de sufrir. Demos un salto de fe y utilicemos R
y Quarto
.
Bueno ya conoce R y RStudio, entonces, ¿Qué es Quarto?
En palabras del rockstar #1 de R Hadley Wickham:
Quarto provides a unified authoring framework for data science, combining your code, its results, and your prose. Quarto documents are fully reproducible and support dozens of output formats, like PDFs, Word files, presentations, and more.
Es decir, Quarto le permitirá escribir su informe o presentación junto con los análisis estadísticos en un MISMO DOCUMENTO. Por lo tanto, ya no necesitará caminar por el vía crucis del COPIAR Y PEGAR.
Ud. escriba su documento y Quarto se preocupará del copiar y pegar en forma automática.
– “¿Y si cambian los datos?”
No se preocupe, Quarto actualizará en forma automática todos los análisis estadísticos, las tablas, los p-values, los gráficos, el test de linealidad, la incertidumbre de calibración, las secciones y los capítulos del informe… todo… hasta las referencias blibliográficas.
Puede, desde un mismo documento Quarto, exportar el informe a un Word o a una página web. Y con un poco de trabajo adicional puede incluso hacer directamente la ppt
. Aunque si investiga un poco más, créame, se olvidará del Powerpoint. La mayoría de los científicos de datos ahora usan HTML para hacer las presentaciones.
En este link puede observar algunas de las posibilidades que ofrece Quarto. Este libro y página web la hice con Quarto.
Vamos a crear un informe en Word usando Quarto.
Lo primero: instalar Quarto siguendo estas instrucciones. Es muy simple.
Una vez instalado, Quarto formará parte de RStudio. No hay que hacer nada más.
Para realizar el ejemplo, descargue este archivo Excel con los datos que utilizaremos. Sólo posee una hoja llamada calibracion
.
El archivo se llama, en un arrebato de creatividad… datos.xlsx
Ahora, abrimos RStudio y creamos un Proyecto de tipo Quarto Project
al que denominaremos Informe
. Si no recuerda como crear un Proyecto en RStudio puede consultar la siguiente sección de este libro.
Cuando se cree el proyecto se abrirá una nueva sesión de R y aparecerá un script pero ahora con extensión .qmd
y que quedrá guardado en la carpeta del proyecto que llamamos Informe
:
No modifiquemos nada, sólo presionemos el botón que dice Render
Se abrirá una ventana al lado derecho con el documento en formato HTML:
Puede presionar el botón Show in new window
en la pestaña Viewer
para visualizar el resultado en su navegador web:
Listo, ha creado una página web la cual puede ser alojada en su servidor o en la nube de RStudio (en forma gratuita).
Explicación de lo que ocurrió:
En el archivo informe.qmd
hay un encabezado (líneas 1 a la 3) que sólo indica el título del documento:
---
title: "Informe"
---
En este encabezado ingresaremos todas las modificaciones y opciones de nuestro documento: título, autor(a), institución, fecha, formato de salida (docx, pptx, html, pdf, etc.) y otras características. Por defecto, la salida es una página web (html), cuando queramos un documento Word bastará indicar que queremos una salida (output
) de tipo docx
.
En la línea 5 hay un subtítulo indicado por ## Quarto
. Los títulos siguen una estructura jerárquica:
# Título principal
## Sub-título
### Sub-sub-título
etc.
En las líneas 9 a la 11 hay un código en R
que se ejecutará cuando se compila el documento. En este caso, también se mostrará el código en el documento final:
informe.qmd
.Primero agregaremos información al inicio entre las líneas 1 y 3:
---
title: "Informe de validación"
author: "Carlos Gómez"
date: today
---
Cambiemos el subtítulo por:
## Análisis Exploratorio de Datos Simulados
Y escribamos el siguiente texto debajo:
A continuación llevaremos el análisis estadístico y los gráficos de EDA de datos simulados normales con media 100 y desviación estándar 10
Por lo tanto, cambiemos ahora el código R
para generar 100 datos aleatorios normales con media 100 y desviación estándar 10 y además grafiquemos el histograma de estos 100 datos aleatorios:
Ahora su archivo informe.qmd
debe verse algo similar a esto (no es necesario que coincidan los números de líneas a la izquierda):
Listo, ahora guardamos y presionamos Render
. Obtendremos nuestro documento en HTML modificado en la pestaña Viewer
de la derecha. También se actualizó la página web en su navegador.
¿Captó el concepto?
En un mismo documento escribimos nuestro texto y el código R
para los análisis estadísticos. Compilamos y automáticamente Quarto genera el documento de salida mezclando texto, código, tablas, gráficos, etc. Si cambiamos los datos, se actualiza todo. Veamos un ejemplo:
Cambiemos la media de los datos simulados de 100 a 5. Entonces, en la línea donde pusimos nuestro código R ahora debe lucir así:
Sólo hemos cambiado la opción mean = 5
dentro de rnorm
. Guardamos y presionamos Render
y obtenemos el histograma modificado con media 5:
Importaremos los datos de la demostración datos.xlsx
. Para lo cual es NECESARIO que copie o mueva este archivo a la carpeta del proyecto. Si no lo hace, R
mostrará un mesaje indicando que no encuentra el archivo.
Si lo copio correctamente, la pestaña Files
a la derecha lo debe indicar:
Utilizaremos la librería readxl
para importar los datos que guardaremos con el nombre calibracion
. Entonces, agreguemos el texto que explica lo que estamos haciendo y el nuevo código R
para la importación:
“A continuación importaremos los datos desde Excel utilizando el package readxl
y guardando el data.frame
con el nombre curva
. La hoja se llama calibracion
”
Para agregar un nuevo código R
presione las teclas Control + Alt + I
y aparecerá lo siguiente:
En esta celda escribiremos el código R
:
Hasta ahora, su archivo informe.qmd
debe lucir más o menos así:
Guardamos y compilamos con Render
, obtenemos el resultado en Viewer
(debe hacer *scroll**)
Ya vamos a llegar a ese punto, se lo prometo.
Vamos a finalizar este informe con la evaluación de la linealidad de la curva de calibración que acabamos de importar. Utilizaremos el test de Mandel. Desde ahora, para evitar repetir la explicación anterior, iremos mezclando texto con código R
el cual deberá copiar y pegar en su archivo informe.qmd
:
ggplot2
:library(ggplot2)
ggplot(curva, aes(x = x, y = y)) +
geom_point() +
geom_smooth(method = 'lm') + #muestra la banda de confianza
theme_classic()
Lo vamos a analizar
lm()
y lo guardaremos con el nombre ajuste.lineal
.summary
podemos ver la estadística de la regresión lineal:
Call:
lm(formula = y ~ x, data = curva)
Residuals:
Min 1Q Median 3Q Max
-18.451 -12.055 -9.200 -5.136 94.381
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 18.4561 18.8170 0.981 0.352
x 9.9291 0.3181 31.217 1.74e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 33.36 on 9 degrees of freedom
Multiple R-squared: 0.9908, Adjusted R-squared: 0.9898
F-statistic: 974.5 on 1 and 9 DF, p-value: 1.742e-10
Mmmm… interesante. Aún con el dato outlier, aparentemente, el modelo lineal tiene un buen ajuste (piense: ¿en qué zona de la curva está ubicado el outlier?)
Mmmm… ese outlier… definitvamente debemos hacer algo con él.
Haremos un test de normalidad de Shapiro a los residuos, fíjese dónde quedaron guardados dentro de ajuste.lineal
:
Shapiro-Wilk normality test
data: ajuste.lineal$residuals
W = 0.48913, p-value = 1.122e-06
Parece que ese outlier está molestando mucho.
Apliquemos un test de Grubbs a los residuos con el package outliers
:
Grubbs test for one outlier
data: ajuste.lineal$residuals
G.5 = 2.98230, U = 0.02165, p-value = 4.641e-08
alternative hypothesis: highest value 94.3811363636364 is an outlier
Definitivo: ese dato es, desde el punto de vista estadístico, un outlier.
¿Lo eliminamos? Mmmm… momento. Revise el QAQC de ese día primero. Supongamos que al revisar la documentación se percata que hay un error en la transcripción del dato:
La respuesta instrumental del estándar 40 ppm no era 510 UA, sino 410 UA.
Fácil: cambie el dato en la planilla Excel y compile el archivo informe.qmd
y todos los análisis estadísticos, gráficos y tablas se actualizarán automáticamente. Esto funcionaría perfectamente.
Sin embargo, hay un viejo dicho en análisis estadístico:
“Nunca toque la base de datos. Si tiene que hacer un cambio, hágalo desde el script” — El Principito
Por lo tanto, siguiendo la sabiduría popular cambiaremos el dato desde R
y dejaremos intacto el archivo Excel. Hay varias formas de hacerlo, esta no necesariamente es la mejor. El gráfico de residuos nos identifica el valor outlier como el número 5, es decir, aquel que ocupa la 5a posición en curva
:
Entonces si queremos cambiar la respuesta instrumental del estándar \(x = 40\) ppm desde \(y = 510\) UA a \(y = 410\) UA, lo hacemos de la siguiente manera en R
:
Si ahora llamamos a curva
, aparece el dato corregido:
# A tibble: 11 × 2
x y
<dbl> <dbl>
1 0 0.005
2 10 104
3 20 210
4 30 303
5 40 410
6 50 511
7 60 605
8 70 704
9 80 802
10 90 910
11 100 1005
La recomendación es que guarde el data frame curva
con los datos corregidos pero con otro nombre, por ejemplo, curva.corr
. Y luego ejecute los comandos de análisis estadístico sobre curva.corr
así se evita confusiones con curva
.
Este es sólo un demo y no lo hicimos para simplificar la discusión.
library(ggplot2)
ggplot(curva, aes(x = x, y = y)) +
geom_point() +
geom_smooth(method = 'lm') + #muestra la banda de confianza
theme_classic()
Call:
lm(formula = y ~ x, data = curva)
Residuals:
Min 1Q Median 3Q Max
-4.815 -2.319 -1.020 3.882 5.181
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.8198 2.2183 2.173 0.0579 .
x 10.0200 0.0375 267.229 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.933 on 9 degrees of freedom
Multiple R-squared: 0.9999, Adjusted R-squared: 0.9999
F-statistic: 7.141e+04 on 1 and 9 DF, p-value: < 2.2e-16
¡Ahora sí pues!
Ajustamos, primero, un modelo cuadrático para poder compararlo con el modelo lineal y lo guardamos con el nombre ajuste.no.lineal
:
Aplicamos el test de Mandel con el comando anova
:
Analysis of Variance Table
Model 1: y ~ x
Model 2: y ~ x + I(x^2)
Res.Df RSS Df Sum of Sq F Pr(>F)
1 9 139.19
2 8 116.37 1 22.819 1.5688 0.2458
Ya que Ud. ya sabe como aplicar el test Mandel (porque tomó el curso de Estadística para Químicos sólo debe observar el p-value del test que está debajo de Pr(>F)
y concluir si el modelo lineal es adecuado para estos datos de calibración.
Absolutamente.
informe.qmd
¿Se imagina haber hecho el análisis en Excel: cambiar el dato, rehacer los cálculos, tablas, gráficos y después vamos copiando y pegando de nuevo?
¡Ya! ahora vamos por ello.
Si ha seguido este tutotial al pie de la letra, Ud. debiera tener un archivo informe.qmd
muy similar a este (si no lo tiene puede bajarlo desde aquí)
Lo único que hay modificar para obtener este informe en formato Word es agregar la siguiente opción en el encabezado (arriba):
---
title: "Informe de validación"
author: "Carlos Gómez"
date: today
format: docx
---
Compile ahora con Render
.
Y voilá… su informe en Word.
Cierre el Word, haga algún cambio en el archivo informe.qmd
y vuelva a compilar. Por ejemplo, agregue un qqplot a los residuos del ajuste lineal con el dato corregido qqnorm(ajuste.lineal$residuals)
Todo se ha actualizado de acuerdo al cambio que hizo
Nota: siempre cierre el Word antes de compilar.
Si quiere el informe en PDF, sólo debe indicar en el encabezado format: pdf
Las posibilidades de customización de los resportes son enormes: desde la tipografía hasta la paleta de colores de los gráficos. En este link puede tener una idea de las customizaciones a un informe en Word.
Podría tener un template de informe de validación y estandarizar las planillas Excel. Por ejemplo: que la hoja que se llama calibracion
siempre tenga como encabezado las etiquetas x
e y
. Después en el archivo qmd
Ud. le puede cambiar el nombre a [ppm] y Absorbancia o Área.
Imagine que tiene una gran base de datos de datos de controles de calidad. A medida que tiene más datos se va actualizando el análisis estadístico completo. Podría generar cartas control multivariadas.
Aunque no lo vimos en este tutorial, Ud. puede generar la presentación en Powerpoint a partir de los mismos análisis. Si cambia un dato, se actualiza la ppt. Pero olvídese de Powerpoint, la Estadística moderna usa revealjs
para hacer presentaciones.
Quizás Ud. tiene que preparar un informe estandarizado para cada uno de los productos que preparan en la planta. Se puede crear un loop que compile el mismo informe estandarizado pero tomando los datos de cada producto que Ud. tiene en hojas o libros distintos de Excel.
Piense en la validación de un método analítico multiresiduo donde cada hoja Excel contiene los datos de, por ejemplo, calibracion de todos los analitos. Cinco columnas: Analito, Instrumento, Analista, X, Y.
Quizás Ud. debe analizar datos de rondas de intercomparación usando los métodos de la guía ISO 13528:2022. Use el package metRology
o robustbase
y genere un template en HTML, suba el informe a un servidor donde los clientes ingresan con cuentas de usuario. Así sus gráficos podrían tener toda la interactividad de una página web.
Las opciones son infinitas.