Analytical
  • Home
  • Cursos
  • Charlas
  • Blog
  • Libro
  • Sobre mí
  1. Métodos Estadísticos Modernos aplicados en Química Analítica
  2. Reportes y presentaciones
  • Métodos Estadísticos Modernos aplicados en Química Analítica
    • Instalación de R
    • Introducción a R
    • Calibración
    • Comparación de métodos analíticos
    • ANOVA
    • Bootstrap
    • Análisis de datos no normales
    • Test de Permutaciones
    • Métodos Robustos
    • Método de Monte Carlo
    • Incertidumbre
    • Reportes y presentaciones
    • Referencias

En esta página

  • ¿Cómo haría el informe y la presentación a la antigua?
  • ¿Cómo haría el informe y la presentación con R y Quarto?
  • Ejemplo
    • Instalación de Quarto
    • Descarga de datos en Excel
    • Creación de un proyecto Quarto
    • Mi primera página web con Quarto
    • Ahora modifiquemos el archivo informe.qmd.
    • Importar los datos desde Excel
    • Evaluación de la linealidad de la curva de calibración.
    • Informe en formato Word
    • ¿Ve el potencial?
  1. Métodos Estadísticos Modernos aplicados en Química Analítica
  2. Reportes y presentaciones

Reportes y presentaciones

Fecha de publicación

29 de abril de 2025

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.

¿Cómo haría el informe y la presentación a la antigua?

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:

  • calibracion
  • lod y loq
  • precision
  • sesgo
  • incertidumbre
  • etc.

Ahora, en la hoja calibracion llevaría a cabo alguna de estas tareas:

  • graficaría la curva de calibración
  • utilizaría el Menú Datos de Excel y llevaría a cabo el análisis de regresión
  • observaría el QQ-plot de los residuos para evaluar los supuestos de normalidad y homocedasticidad de la curva.
  • como tiene Excel podría incluso ajustar un modelo cuadrático y aplicar el test de linealidad de Mandel (tal como aparece descrito en este post)

Luego abriría un Word y comenzaría el largo y tortuoso proceso de COPIAR Y PEGAR.

  • Copia la figura de la curva de calibración y la pega en el Word.
  • Copia el gráfico de QQ-Plot y lo pega en el Word.
  • Copia la tabla de datos y la pega en el Word.
  • Copia la tabla de ANOVA de la regresión y la pega en el Word.
  • Copia la tabla del test de Mandel y la pega en el Word.

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:

  • Copia la figura de la curva de calibración y la pega en el Powerpoint.
  • Copia el gráfico de QQ-Plot y lo pega en el Powerpoint.
  • Copia la tabla de datos y la pega en el Powerpoint.
  • Copia la tabla de ANOVA de la regresión y la pega en el Powerpoint.
  • Copia la tabla del test de Mandel y la pega en el Powerpoint.

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.

¿Cómo haría el informe y la presentación con 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.

Ejemplo

Vamos a crear un informe en Word usando Quarto.

Instalación de 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.

Descarga de datos en Excel

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

Creación de un proyecto Quarto

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:

Mi primera página web con Quarto

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 Viewerpara 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:

1 + 1
[1] 2

Ahora modifiquemos el archivo 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:

set.seed(123) # para siempre obtener los mismos datos aleatorios
x <- rnorm(n = 100, mean = 100, sd = 10)
hist(x)

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í:

set.seed(123) # para siempre obtener los mismos datos aleatorios
x <- rnorm(n = 100, mean = 5, sd = 10)
hist(x)

Sólo hemos cambiado la opción mean = 5 dentro de rnorm. Guardamos y presionamos Render y obtenemos el histograma modificado con media 5:

Importar los datos desde Excel

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:

library(readxl)
curva <- read_excel('datos.xlsx', sheet = 'calibracion')
curva # sólo si queremos ver los datos

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

¿Y el informe en Word?

Ya vamos a llegar a ese punto, se lo prometo.

Evaluación de la linealidad de la curva de calibración.

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:

  1. En primer lugar graficaremos la curva de calibración con el package ggplot2:
library(ggplot2)

ggplot(curva, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = 'lm') + #muestra la banda de confianza
  theme_classic()

¿Y ese punto atípico?

Lo vamos a analizar

  1. Ajustamos un modelo lineal de calibración con lm() y lo guardaremos con el nombre ajuste.lineal.
ajuste.lineal <- lm(y ~ x, data = curva)
  1. Con la función summary podemos ver la estadística de la regresión lineal:
summary(ajuste.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?)

  1. Haremos un diagnóstico de la regresión con los residuos:
plot(ajuste.lineal, which = 1)

Mmmm… ese outlier… definitvamente debemos hacer algo con él.

plot(ajuste.lineal, which = 2)

Haremos un test de normalidad de Shapiro a los residuos, fíjese dónde quedaron guardados dentro de ajuste.lineal:

shapiro.test(ajuste.lineal$residuals)

    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:

library(outliers)
grubbs.test(ajuste.lineal$residuals)

    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:

curva[5, ] # quinta fila
# A tibble: 1 × 2
      x     y
  <dbl> <dbl>
1    40   510

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:

curva [5, 2] <-  410 # quinta fila, segunda columna cámbialo: a 410

Si ahora llamamos a curva, aparece el dato corregido:

curva
# 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    
Recomendación

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

ajuste.lineal <- lm(y ~ x, data = curva)
summary(ajuste.lineal)

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
plot(ajuste.lineal, which = 1)

¡Ahora sí pues!

  1. Aplicamos el test de Mandel (tal como se indica en este post)

Ajustamos, primero, un modelo cuadrático para poder compararlo con el modelo lineal y lo guardamos con el nombre ajuste.no.lineal:

ajuste.no.lineal <- lm(y ~ x + I(x^2), data = curva)

Aplicamos el test de Mandel con el comando anova:

anova(ajuste.lineal, ajuste.no.lineal)
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.

Y si hubiese cambiado el dato en el Excel ¿funciona?

Absolutamente.

  1. Lo cambia y lo guarda
  2. Cierra el Excel
  3. Compila el archivo informe.qmd
  4. ¡Listo! informe actualizado en 3 segundos

¿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?

¿Y el informe en Word?

¡Ya! ahora vamos por ello.

Informe en formato Word

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.

Haga este experimento

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.

¿Ve el potencial?

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Volver arriba

Copyright 2024, Carlos Gómez