La fermentación en estado sólido (FES) es un proceso biotecnológico ampliamente utilizado para la producción de enzimas, biomasa y metabolitos de interés (Krull & Bley, 2015) empleando sustratos solidos como soporte y fuente de nutrientes para microorganismos como hongos, bacterias y levaduras (Villegas et al., 1993). Este método destaca por el bajo costo de los sustratos, usualmente residuos agroindustriales, y por permitir la obtención de productos de alto valor agregado aplicables en industrias y tratamiento ambiental (Krishna, 2005; Flores Macias 2024 y Sánchez Tejeda 2022). Sin embargo, el control de factores ambientales críticos, como la temperatura, humedad, oxígeno y dióxido de carbono, es esencial para optimizar el proceso y mantener condiciones adecuadas en los biorreactores (Thomas et al., 2013; Roussos et al., 1997). Estos factores influyen directamente en la eficiencia y la calidad del producto final, por lo que su monitoreo en tiempo real resulta indispensable (Saucedo-Castañeda et al., 1994). A pesar de los avances en esta área, los sensores diseñados específicamente para la FES suelen ser costosos, lo que dificulta su adopción en laboratorios pequeños y aplicaciones industriales (Bellon-Maurel et al., 2003;Spier et al., 2010). Investigaciones recientes como las de Nagel et al. (2000) y Spier et al (2010), han demostrado la viabilidad de correlacionar parámetros críticos con la actividad metabólica y la producción de enzimas en biorreactores. No obstante, estos sistemas dependen de quipos especializados de alto costo, limitando su escalabilidad. Por ejemplo, trabajos como los de Flores Macias (2024) y Sánchez Tejeda (2022), utilizaron sensores costosos, como el PASCO GLX 3000 para medir los parámetros de CO2 y O2, durante la producción de lacasa y lipasa. En la investigación de Pliego Sandoval (2011) se utilizaron los sensores PASCO CL-6561 y PASCO CL-6562 para monitorear CO2 y O2 respectivamente durante la fermentación en estado sólido. En los 3 trabajos mencionados, los sistemas utilizados representan un costo elevado lo cual contradice la naturaleza económica de la FES. Este proyecto propone el desarrollo de un sistema de monitoreo en tiempo real que utilice sensores económicos y plataformas de código abierto, como Arduino® y LabVIEW, para medir parámetros críticos como CO2 y O2. Esta solución busca mejorar la precisión en el control del proceso, reducir costos y ofrecer una herramienta accesible y escalable para diversas aplicaciones.
El objetivo principal es Diseñar, implementar y validar un sistema de monitoreo en tiempo real para la medición de parámetros críticos (dióxido de carbono) durante la producción de lacasa en biorreactores de estado sólido especifiamente con estos datos hacer una analisis de correlación entre los valores de dioxido de carbono medidos en un sensor desarrollado en Arduino y un sensor comercial como el de Pasco.
# Carga de datos
# Puedes usar read.csv(), read_excel(), o data() si es un set incluido
arduino <- c(537, 520, 695, 592, 533, 662, 717, 547, 564, 792, 874, 607, 1001, 1019, 1458, 1305, 1659, 2084, 3074, 2802, 3767, 5353, 5624, 6093, 6441, 7560, 8658, 8552, 8396, 9734, 12380, 10612, 801, 683, 524, 801, 662, 744, 754)
pasco <- c(609, 717, 737, 759, 779, 795, 818, 840, 866, 892, 953, 1038, 1158, 1342, 1663, 2081, 2601, 3361, 4468, 5985, 8017, 10733, 14343, 19097, 25223, 33313, 42863, 55678, 70268, 86322, 104044, 115706, 1135, 504, 498, 664, 804, 888, 912)
arduinoc<-c(288369, 270400, 483025, 350464, 284089, 438244, 514089, 299209, 318096, 627264, 763876, 368449, 1002001, 1038361, 2125764, 1703025, 2752281, 4343056, 9449476, 7851204, 14190289, 28654609, 31629376, 37124649, 41486481, 57153600, 74960964, 73136704, 70492816, 94750756, 153264400, 112614544, 641601, 466489, 274576, 641601, 438244, 553536, 568516)
📝 Los datos obtenidos provienen de un proceso de fermentación sumergida utilizando la cepa Saccharomyces cerevisiae, con el objetivo de generar dióxido de carbono (CO₂) medible durante el proceso.
En este caso de estudio la variable independiente son los datos de dioxido de carbono generados obtenidos por el sensor arduino, y la variable dependiente son los datos obtenidos apartir del sensor comercial el cual tiene una alta sensibilidad, sin embargo, tambien tiene un alto costo. En este ejercicio tambien se introducen los datos linealizados de arduino para lo cual se elevan al cuadrado “Arduinoc”, tambien considerados varibles independientes, todos determinados en ppm.
—# 4. Evaluación de la Normalidad
#Normalidad (Formal)
#Criterio de decisión.
#p-value>0.05 los datos son normales
#p-value <0.05 los datos son NO normales
shapiro.test(arduino)
##
## Shapiro-Wilk normality test
##
## data: arduino
## W = 0.74787, p-value = 8.332e-07
shapiro.test(pasco)
##
## Shapiro-Wilk normality test
##
## data: pasco
## W = 0.58466, p-value = 2.625e-09
shapiro.test(arduinoc)
##
## Shapiro-Wilk normality test
##
## data: arduinoc
## W = 0.64306, p-value = 1.689e-08
#Normalidad (Formal)
#Criterio de decisión.
#p-value>0.05 los datos son normales
#p-value <0.05 los datos son NO normales
Los datos utilizados en el análisis provienen de un experimento de fermentación sumergida utilizando la cepa Saccharomyces cerevisiae, con el objetivo de cuantificar la generación de dióxido de carbono (CO₂) durante el proceso. Para evaluar los supuestos estadísticos que permitirían aplicar modelos paramétricos, se realizaron diversas pruebas sobre normalidad, homocedasticidad, correlación y posible influencia de valores extremos.
En primer lugar, se aplicó la prueba de Shapiro-Wilk para determinar si los datos de las variables arduino, pasco y arduinoc siguen una distribución normal. En todos los casos, los valores de p fueron menores a 0.05 (arduino: p = 8.33e-07, pasco: p = 2.62e-09, arduinoc: p = 1.68e-08), lo que indica que los datos no siguen una distribución normal. Por lo tanto, no se cumple el supuesto de normalidad de los residuos, lo cual limita el uso de pruebas paramétricas como la regresión lineal tradicional o el ANOVA.
En cuanto a la homocedasticidad (igualdad de varianzas de los residuos), se aplicó la prueba de Breusch-Pagan sobre dos modelos: uno con los datos originales y otro con la transformación logarítmica de la variable dependiente (pasco). En el modelo original, se obtuvo un valor de p = 5.514e-05, indicando una clara presencia de heterocedasticidad. Aunque el modelo transformado (log(pasco) ~ arduino) mejoró este aspecto (p = 0.04254), el valor aún es menor a 0.05, por lo que la heterocedasticidad persiste, aunque de forma más moderada.
Adicionalmente, se evaluó la correlación entre las variables mediante métodos no paramétricos, en particular la correlación de Spearman, que es adecuada en presencia de datos no normales. La correlación observada fue alta, lo que sugiere una relación monótona significativa entre las variables, aspecto esperado y deseado en el contexto del análisis de señales provenientes de sensores durante la fermentación.
Por último, aunque no se ha presentado en esta sección, se recomienda evaluar la influencia de observaciones individuales mediante la revisión de los residuos estandarizados y gráficos como el de la distancia de Cook. Esto ayuda a identificar puntos con un impacto desproporcionado sobre el modelo que podrían distorsionar los resultados.
Es importante destacar que, debido a que los datos no cumplen los supuestos de normalidad ni de homocedasticidad, se optó por utilizar pruebas no paramétricas en el análisis estadístico. Estas pruebas, como la correlación de Spearman o Kendall, no requieren la verificación de normalidad ni de homocedasticidad, ya que se basan en rangos y son más robustas ante la presencia de asimetrías, valores atípicos y varianzas desiguales. En este contexto, la falta de homocedasticidad no invalida el análisis, dado que las herramientas empleadas no dependen de este supuesto.
#sperman test
#Correlación para datos NO normales
cor(arduino,pasco,method = 'spearman')# es la misma instrucción pero se especifica el método para determinar correlación
## [1] 0.9426055
#Tambien se verifica correlación en los datos linealizados de arduino
cor(arduinoc,pasco,method = 'spearman')
## [1] 0.9426055
Dado que los datos correspondientes a las variables arduino, pasco y arduinoc no cumplen con el supuesto de normalidad, se utilizó la correlación de Spearman como método no paramétrico para evaluar la relación entre ellas. Esta prueba, al basarse en rangos y no requerir normalidad ni homocedasticidad, es adecuada para datos con distribución no normal y posibles asimetrías. El coeficiente de correlación de Spearman obtenido entre las variables arduino y pasco fue de 0.9426, indicando una correlación positiva muy fuerte. El mismo valor se obtuvo al correlacionar pasco con arduinoc, lo que sugiere que la transformación aplicada a arduino no alteró la fuerza ni la dirección de la relación.
Este resultado evidencia una relación monótona consistente entre ambas variables, donde a medida que aumentan los valores de arduino, también lo hacen los de pasco, sin importar la forma exacta de la curva. La alta correlación observada respalda el uso de arduino como una alternativa confiable para estimar el comportamiento medido por pasco, al menos en términos de tendencia relativa. Así, el análisis confirma que, incluso en ausencia de condiciones ideales para aplicar modelos paramétricos, se puede establecer una relación estadísticamente significativa y robusta entre ambas mediciones utilizando herramientas no paramétricas.
#install.packages("PerformanceAnalytics") #Cargamos la paqueteria
if (!require("PerformanceAnalytics")) install.packages("PerformanceAnalytics", dependencies = TRUE)
## Cargando paquete requerido: PerformanceAnalytics
## Cargando paquete requerido: xts
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Adjuntando el paquete: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
#Hacemos un data.frame de los datos
dat1=data.frame(arduino, pasco)
dat2=data.frame(arduinoc, pasco)
# Instalar y cargar
if (!require("corrplot")) install.packages("corrplot", dependencies = TRUE)
## Cargando paquete requerido: corrplot
## corrplot 0.95 loaded
library(corrplot)
# Matriz de correlación
cor_matrix1 <- cor(dat1, method = "spearman")
cor_matrix2 <- cor(dat2, method = "spearman")
#visualización con chart.Correlation (con gráfico de dispersión + correlaciones)
chart.Correlation(dat1, method = 'spearman', histogram = TRUE, pch = 19)
## Warning in cor.test.default(as.numeric(x), as.numeric(y), method = method):
## Cannot compute exact p-value with ties
Este conjunto de gráficos presenta un análisis de correlación entre las lecturas de un sensor de CO2 de Arduino (“arduino”) sin linealizar y un sensor de CO2 de Pasco (“pasco”). En el cuadrante superior izquierdo, el histograma del sensor de Arduino sin linealizar muestra una distribución sesgada a la derecha, similar a la del sensor de Pasco en el cuadrante inferior derecho. Sin embargo, al observar el diagrama de dispersión en el cuadrante inferior izquierdo, se aprecia una mayor dispersión de los puntos alrededor de la línea de regresión en comparación con los datos linealizados previamente analizados. Aunque todavía se observa una tendencia positiva, la relación entre ambos sensores parece menos definida y más variable. En el cuadrante superior derecho, el coeficiente de correlación de Spearman se mantiene en 0.94 con una alta significancia estadística ()*, lo que indica una fuerte relación monotónica incluso sin la linealización. No obstante, la mayor dispersión visual en el diagrama de dispersión sugiere que la relación entre las lecturas de ambos sensores es menos consistentemente proporcional en todo el rango de valores cuando los datos del Arduino no están linealizados. Esta observación justifica la necesidad de la linealización, ya que, si bien existe una correlación fuerte, la linealización busca establecer una relación más directamente proporcional entre las lecturas de los dos sensores, lo que puede ser crucial para realizar calibraciones precisas y obtener mediciones del sensor de Arduino que sean más directamente comparables y equivalentes a las del sensor de Pasco a lo largo de todo el rango de medición. La dispersión observada en los datos sin linealizar implica que la relación entre las mediciones de ambos sensores podría no ser constante, lo que podría introducir errores en las estimaciones si se asumiera una relación lineal directa sin la transformación adecuada.
chart.Correlation(dat2, method = 'spearman', histogram = TRUE, pch = 19)
## Warning in cor.test.default(as.numeric(x), as.numeric(y), method = method):
## Cannot compute exact p-value with ties
Los resultados revelaron una correlación lineal positiva extraordinariamente fuerte de 0.94, la cual mostró una significancia estadística muy alta (p-valor < 0.001). Los histogramas para ambas variables indicaron una concentración de lecturas en niveles bajos de CO2, y el diagrama de dispersión confirmó visualmente la relación directa y robusta entre las mediciones de los dos sensores. Este hallazgo sugiere que el sensor de Arduino, una vez linealizado, proporciona mediciones de CO2 altamente consistentes y confiables en comparación con el sensor de Pasco, validando su uso como una alternativa precisa para la monitorización de CO2 en partes por millón (ppm).
En el presente estudio, se realizó un análisis comparativo exhaustivo de las mediciones de dióxido de carbono (CO2 en ppm) obtenidas de dos tipos de sensores: un sensor de Arduino y un sensor de Pasco, considerado este último como referencia. El objetivo principal fue evaluar la relación entre ambos dispositivos, prestando especial atención al impacto de la linealización en los datos del sensor de Arduino.
Para llevar a cabo esta evaluación, se emplearon dos conjuntos de datos: “dat1” que representa las mediciones sin linealizar del sensor de Arduino en comparación con el sensor de Pasco, y “dat2” que contiene los datos del sensor de Arduino una vez que se le aplicó un proceso de linealización, nuevamente en comparación con el sensor de Pasco.
La visualización y el análisis de correlación se realizaron utilizando el paquete GGally en el entorno de programación R, complementado por ggplot2 para una personalización estética. Específicamente, se generaron matrices de dispersión y correlación utilizando la función ggpairs(). Estas matrices proporcionan una vista integral de la relación entre las variables, incluyendo:
Histogramas en la diagonal ( diag = list(continuous = “barDiag”) ): Permiten visualizar la distribución de frecuencia de cada variable de forma individual, ofreciendo información sobre su sesgo y dispersión.
Diagramas de dispersión con curvas suavizadas en la parte inferior ( lower = list(continuous = “smooth”) ): Ilustran la relación bivariada entre las variables, mostrando la tendencia de los puntos y permitiendo identificar patrones no lineales o dispersiones. La curva suavizada (loess) ayuda a percibir la tendencia central de los datos.
Coeficientes de correlación en la parte superior ( upper = list(continuous = “cor”) ): Cuantifican la fuerza y dirección de la relación entre las variables. En este análisis, se utilizó el coeficiente de correlación de Spearman, adecuado para datos no paramétricos y para evaluar relaciones monotónicas.
A través de la comparación visual y cuantitativa de las matrices generadas para “dat1” y “dat2”, se busca evidenciar la mejora en la relación entre el sensor de Arduino y el sensor de Pasco una vez que los datos de Arduino han sido sometidos a un proceso de linealización. Esto permitirá justificar la importancia de dicho proceso para obtener mediciones más precisas y consistentes con el sensor de referencia.
# Instalar GGally si no está instalado
if (!require("GGally")) install.packages("GGally", dependencies = TRUE)
## Cargando paquete requerido: GGally
## Cargando paquete requerido: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(GGally)
# Cargar también ggplot2 (necesario para temas y personalización)
if (!require("ggplot2")) install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
# Visualización mejorada con ggpairs
ggpairs(
dat1,
lower = list(continuous = "smooth"), # Agrega curvas suavizadas (loess) en los gráficos inferiores
diag = list(continuous = "barDiag"), # Histograma en la diagonal
upper = list(continuous = "cor"), # Correlaciones numéricas en la parte superior
title = "Matriz de correlación y dispersión (dat1)"
) +
theme_minimal() # Tema limpio y profesional
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggpairs(dat1)
# Visualización mejorada con ggpairs para dat2
ggpairs(
dat2,
lower = list(continuous = "smooth"), # Agrega curvas suavizadas (loess) en los gráficos inferiores
diag = list(continuous = "barDiag"), # Histograma en la diagonal
upper = list(continuous = "cor"), # Correlaciones numéricas en la parte superior
title = "Matriz de correlación y dispersión (dat2)"
) +
theme_minimal() # Tema limpio y profesional
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggpairs(dat2)
Análisis Comparativo y Justificación de la Linealización en Mediciones de CO2
El presente estudio se centra en la evaluación de la relación entre las mediciones de dióxido de carbono (CO2 en ppm) obtenidas por un sensor de Arduino y un sensor de Pasco, este último considerado como referencia. Para ello, se analizaron dos conjuntos de datos cruciales representados en matrices de correlación y dispersión: dat1, que corresponde a las medicaciones del sensor de Arduino sin linealizar (imágenes “Sin linealizar1.jpeg” y “c4f93cc3-bcf7-4f69-ab05-5f5408d4a47b.png”), y dat2, que agrupa las mediciones del sensor de Arduino previamente sometidas a un proceso de linealización (imágenes “linealizados2.jpeg” y “516f5584-1730-4344-bf9f-c3b290e81c03.png”). El objetivo es demostrar cómo la linealización mejora la calidad de la relación entre ambos sensores, lo cual es fundamental para el uso confiable y preciso del sensor de Arduino.
Análisis de los Datos dat1 (Sensor de Arduino sin Linealizar):
Las matrices de correlación y dispersión para dat1 ilustran la relación inicial entre el sensor de Arduino sin linealizar y el sensor de Pasco.
Histogramas: En ambos gráficos, los histogramas para las variables “arduino” (sin linealizar) y “pasco” muestran una distribución de lecturas fuertemente sesgada a la derecha. Esto indica que la mayoría de las mediciones de CO2 se concentran en valores bajos, con una frecuencia decreciente a medida que aumentan las concentraciones. Este patrón es consistente para ambos sensores en su estado inicial.
Diagrama de Dispersión: El cuadrante inferior izquierdo de ambos gráficos es clave. Se observa una clara curvatura en la nube de puntos y una dispersión considerable de los mismos alrededor de la línea de regresión (o la curva suavizada en “Sin linealizar1.jpeg”). Aunque existe una tendencia monotónica positiva (a mayores lecturas de Pasco, mayores lecturas de Arduino), esta relación no es directamente lineal. La forma curva sugiere que el sensor de Arduino sin linealizar no responde de manera proporcional constante en todo su rango de medición con respecto al sensor de Pasco.
Correlación de Spearman: A pesar de la no linealidad visual, el coeficiente de correlación de Spearman es notablemente alto, de 0.918* en “Sin linealizar1.jpeg”. La alta significancia estadística (indicada por las tres estrellas) confirma que esta es una relación monotónica muy fuerte y no aleatoria. Sin embargo, dado que Spearman mide la fuerza de una relación monotónica (no necesariamente lineal), este valor alto no descarta la presencia de no linealidad que se observa visualmente en el diagrama de dispersión.
Análisis de los Datos dat2 (Sensor de Arduino Linealizado):
Al contrastar los gráficos correspondientes a dat2, que representan las mediciones del sensor de Arduino después de aplicar un proceso de linealización, se evidencia una mejora sustancial en la relación.
Histogramas: Las distribuciones de “arduinoc” (linealizado) y “pasco” conservan un sesgo similar al de los datos sin linealizar, lo cual es esperable ya que la linealización afecta la escala de los valores, no necesariamente su distribución fundamental.
Diagrama de Dispersión: La mejora más significativa se aprecia aquí. Los puntos de datos se agrupan ahora mucho más ajustadamente alrededor de la línea de regresión, mostrando una relación visiblemente más lineal y consistente entre el sensor de Arduino linealizado y el sensor de Pasco. La curvatura presente en dat1 ha sido corregida de manera efectiva, resultando en un patrón que se aproxima mucho más a una línea recta. La dispersión de los puntos se ha reducido notablemente.
Correlación de Spearman: El coeficiente de correlación de Spearman se incrementa ligeramente a 0.968*los datos linealizados. Este valor, cercano a 1, indica una correlación monotónica excepcionalmente fuerte y altamente significativa. Más allá del valor numérico en sí, la mejora cualitativa en la linealidad de la relación en el diagrama de dispersión es el indicador clave del éxito de la linealización.
Justificación de la Linealización:
La comparación directa entre los conjuntos de datos dat1 y dat2 justifica de manera contundente la implementación de un proceso de linealización para el sensor de Arduino. Aunque el sensor sin linealizar ya exhibía una fuerte correlación monotónica con el sensor de Pasco (0.918/0.94), la presencia de una curvatura discernible y una mayor dispersión en sus lecturas limitaba la precisión y la intercambiabilidad de las mediciones en todo el rango de operación. La relación entre ambos sensores no era directamente proporcional, lo que implicaría que la diferencia o el error entre ellos variaría dependiendo de la concentración de CO2.
La aplicación de la linealización (como se ve en dat2) logra una transformación matemática que corrige esta relación no lineal inherente del sensor de Arduino. Esto resulta en:
Mayor Precisión y Conformidad: Los datos linealizados exhiben una relación cercana a una línea recta con el sensor de Pasco, indicando que el sensor de Arduino ahora responde de forma más consistente y directamente proporcional a los cambios reales en la concentración de CO2.
Reducción de la Dispersión: La notable disminución en la dispersión de los puntos alrededor de la línea de regresión significa que las lecturas del Arduino son significativamente más consistentes y predecibles en relación con las del Pasco, minimizando la variabilidad y el error de medición.
Facilitación de la Calibración y Comparabilidad: Una relación lineal simplifica drásticamente cualquier proceso de calibración, permitiendo el desarrollo de una ecuación de conversión o un factor de escala sencillo y confiable para traducir las lecturas del sensor de Arduino a valores equivalentes a los de un instrumento de referencia. Esto es esencial para que un sensor de bajo costo pueda ser utilizado como una herramienta precisa y fiable en aplicaciones de monitoreo y experimentación, validando su rendimiento frente a equipos más sofisticados.