El cultivo celular desempeña un papel crucial en la producción de productos biológicos. Al introducir cambios en el proceso como parte de un diseño de experimento (DOE), modelar con precisión el comportamiento del proceso de cultivo celular resulta complejo, ya que este implica múltiples fases interdependientes de crecimiento y producción, de las cuales solo algunas pueden verse afectadas por los cambios. Los modelos paramétricos no lineales tradicionales tienen dificultades para captar eficazmente esta complejidad, mientras que los modelos no paramétricos por sí solos pueden ser inconexos y difíciles de correlacionar con los parámetros del DOE.
Para abordar este problema, la DOE funcional simplifica la complejidad en componentes principales y correlaciona los cambios con los parámetros de la DOE. Este enfoque permite la creación de un perfilador de predicción que optimiza los parámetros de cultivo celular a partir de datos a pequeña escala y los utiliza para predecir el comportamiento durante la producción a gran escala. Todo el proceso se puede realizar dentro de la plataforma Functional Data Explorer de JMP Pro y proporciona un enfoque más eficiente para optimizar los procesos de cultivo celular.
Hoy, repasaré un caso práctico de uso de DOE funcional para modelar procesos complejos no lineales de cultivo celular. Inicialmente, repasaré el proceso de cultivo celular que intentábamos modelar, que es una producción continua. Analizaré dos de los objetivos de este modelado: mantener el estado estacionario y, posteriormente, ver si podemos predecir el comportamiento a gran escala con base en datos a pequeña escala.
Luego repasaré los splines no paramétricos, que son las funciones base para el modelado que hice, y una introducción a Functional Data Explorer, que es la plataforma que en este caso utiliza splines y componentes principales para modelar.
Revisaré dos respuestas diferentes que abordé para ambos objetivos, así como diferentes tipos de ajustes de spline y cómo incorporar condiciones DOE. Finalmente, explicaré cómo generar algunos perfiladores de articulaciones y presentaré un resumen y análisis de los hallazgos, así como de los posibles desafíos que encontré.
El objetivo de lo que intentamos modelar se denomina producción continua. El estándar en productos biológicos es la producción por lotes. Para ello, se cultivan células, se maximiza su producción y, en un punto determinado, se agotan metabólicamente y entran en una fase de muerte. Después, se recolecta todo en ese biorreactor, que debe incluir las células muertas, así como el fármaco o la molécula de interés, y se procesa según sea necesario.
Lo que estamos tratando de analizar, y mucha gente en la industria lo está analizando, es en lugar de crecer y morir y hacer estos lotes únicos, ¿podemos ser más como otras industrias, digamos la industria automotriz o algo así, donde simplemente producimos material continuamente?
Para lograrlo, queremos, por supuesto, seguir cultivando las células, pero luego queremos mantenerlas en la fase estacionaria, que sería la número 5 en esta curva de crecimiento, y evitar la fase de muerte en la número 6. Para ello, se podría tener un biorreactor más pequeño, pero se estaría alimentando constantemente con nuevo medio que debería contener nutrientes frescos y todo lo necesario, y al mismo tiempo extrayendo la misma cantidad de líquido. En teoría, ese líquido debería contener el fármaco de interés. El objetivo es mantener un estado constante de entrada de nuevo alimento y, con suerte, que luego se filtre la molécula que buscamos producir.
El segundo objetivo, además de intentar mantener una producción constante, es predecir cómo se realizarán las cosas a gran escala basándonos en la pequeña escala. A pequeña escala, podemos operar muchos reactores diferentes e introducir diferentes condiciones, pero no podemos hacerlo a gran escala debido a limitaciones logísticas, de tiempo y económicas. Queremos ver si podemos predecir tanto la pequeña como la gran escala, y también cómo la adición de diferentes factores y condiciones podría afectar también a gran escala.
Otro aspecto interesante de esto es que, con la producción, al tener estas diferentes fases, se podrían introducir condiciones en distintos momentos. La fase de crecimiento podría estar siempre bajo el mismo control, quizás el mismo que a gran escala, pero después se añadirán diferentes factores DOE, que tendrán un componente temporal. Repasaremos cómo logramos esto con Functional Data Explorer.
Primero, voy a presentar el modelo spline. Esta es la base del modelado que estábamos desarrollando. Inicialmente, queríamos ver si podíamos usar modelado paramétrico, que quizás habría funcionado para algunas fases. Podríamos haber usado el modelo exponencial logístico para la fase de crecimiento. Pero al añadir los efectos de escala y el DOE que se introducen en diferentes momentos, no captábamos necesariamente todo eso, ya que algunas producciones podían crecer y luego desaparecer, mientras que otras podían crecer y mantenerse estables. Realmente no pudimos capturar eso con el modelo paramétrico que encontramos.
Queríamos usar algo más flexible, en este caso, las splines. En esencia, una spline consiste en ajustar una función simplificada entre los nodos de los datos. Al ajustar una spline, hay un par de opciones que se deben tomar. ¿Cuántos nodos se desean? Generalmente, cuantos más nodos se tengan, mejor se ajustará el modelo a los datos, lo que puede ser positivo o negativo, e incluso provocar un sobreajuste. También influye el grado de ajuste. Entre cada nodo, ¿se desea una línea recta? ¿Se desea alguna curvatura? ¿Se desea simplemente una función escalonada?
Luego, con ciertos tipos de splines, que el Explorador de Datos Funcionales genera como P-Splines, se puede agregar una función de suavizado. En cada nodo, se suavizará entre cada spline, de modo que, si se usa lineal, por ejemplo, se obtendrán líneas rápidas e inconexas.
Las dos opciones de splines disponibles en Functional Data Explorer son B Splines y P Splines. También existen otras opciones en Functional Data Explorer, como funciones de onda, pero no se aplicaron necesariamente en este caso. Como regla general, las P Splines, que son las splines de regresión más simples, son útiles para modelar funciones suaves. Las P Splines pueden ser mejores para funciones con ruido y fluctuaciones, ya que suavizan parte de ese ruido. Esto es una afirmación general. Hay maneras de sobreajustar con una P Spline y de subajustar con una B Spline, pero estas son solo reglas generales.
En este caso, la plataforma que usamos es Functional Data Explorer. Tengo algunas imágenes de cómo se ve realmente la plataforma. Generalmente, los datos funcionales son simplemente datos que se registran en un dominio continuo. En este caso, se trata del tiempo; el lote se produce a lo largo del tiempo. También puede ser de otras maneras. Lo he visto usado para datos espectrales, por ejemplo. Luego, se busca identificar un conjunto de mediciones. En este caso, se identificarían diferentes lotes, por lo que habrá ajustes individuales para cada lote.
Otra ventaja, que detallaré más adelante, es que puedes agregar estos factores complementarios. Estos pueden ser tus factores DOE, es decir, elementos que entran y potencialmente cambian las formas que quieres capturar. Explicaré cómo funciona esto más adelante en la presentación.
Al principio, no estaba seguro de qué tipo de spline sería el mejor, ya que no encontré una regla fija. Inicialmente, modelé con ambos. Al modelar estos datos en Functional Data Explorer, existen muchas maneras de encontrar un modelo óptimo. En este caso, utilizo la minimización de BIC. También se pueden usar métodos como la validación cruzada. En este caso, al introducir estos factores suplementarios, fue un poco más difícil definir qué sería un conjunto de datos de prueba y de entrenamiento. En este caso, simplemente optamos por la minimización de BIC.
Aquí tenemos los resultados de los dos tipos de spline. Esta línea roja representa el ajuste medio de cada uno. Se puede ver que son bastante similares, pero alcanzan ese valor de forma diferente. El spline B recomendó un menor número de nudos, en este caso 13, y una función cúbica, añadiendo así un poco de la curvatura que vemos aquí.
P Spline recomendaba tener un nudo cada día, básicamente. Hay 30 días, pero 29 nudos entre cada día. Luego, se suavizaba cada nudo, lo que permitió usar un ajuste lineal y, al mismo tiempo, obtener la curvatura mediante el suavizado. Vemos que son bastante similares al principio. Quizás haya algunas diferencias al final, ya que podríamos estar perdiendo datos de algunos lotes.
A continuación, analizaremos los ajustes individuales para ver qué estaba ocurriendo allí, donde observamos esas diferencias al final. Aquí mostramos, para el mismo conjunto de lotes, cuáles fueron los ajustes de spline reales por lote. De nuevo, observamos algo similar a lo que vimos con la función media: el inicio es bastante similar, la parte media es similar, pero al final de las producciones para los ajustes de spline B, a veces observamos estos cambios rápidos de dirección, algo que no esperaríamos en la vida real.
Generalmente, una vez que las células mueren, no resucitan mágicamente ni comienzan a crecer de nuevo. Esto parece deberse a que no disponíamos necesariamente de datos del día 30 para todos los lotes. Dado que el B Spline utilizaba esa función cúbica, predecía cosas que tal vez no tenían sentido. Mientras que con el P Spline, que utilizaba esa función lineal suave, obtenemos un poco más de lo esperado al final del lote, incluso si faltan datos. Esto sugería que el P Spline podría ser más adecuado, pero aun así quería continuar con ambos para confirmarlo.
Con el Explorador de Datos Funcionales, una vez obtenidos todos los ajustes de todos los lotes, se generará una función de media. Esta es la media de todos los ajustes para todos los lotes. Luego, analizará y preguntará: "¿De dónde obtenemos grandes fuentes de variabilidad fuera de esa función de media?"
Si recuerdan un par de diapositivas atrás, vimos una gran expansión en abanico. Volveré a mostrarla. Vemos esta gran expansión. La situación es bastante ajustada, y luego vemos esta gran expansión al final, que es lo que intentamos explorar. Por supuesto, al observar esta primera función de forma, que describirá entre el 70 % y el 80 % de la variabilidad, vemos que es bastante plana al principio durante esta fase de crecimiento, pero luego vemos esta variación al final, que es lo esperado. De hecho, esta es probablemente la fase estable que intentamos modelar. Esto parece representarla porque es constante y luego sube, lo que contrarresta esta caída que observamos en la función media.
Vemos que ambos capturan eso aquí en la función de forma, pero para el P Spline, sube y se mantiene estable, mientras que para el B Spline, sube y nuevamente tiene esa pequeña caída al final que no necesariamente queríamos.
Las funciones de forma adicionales capturan aspectos que quizás sean menos interesantes, pero que aún podrían ser interesantes de modelar. Quizás pequeños saltos, quizás entre la transición, entre las fases de crecimiento y estacionaria, y algunas caídas al final. Pero esta función de forma inicial era definitivamente la que probablemente nos interesaría más.
Las funciones de forma a veces son un poco difíciles de interpretar, ya que hay que compararlas con la función media. Una ventaja del Explorador de Fechas Funcional, como cualquier otro componente principal, es que proporciona gráficos de puntuación. De esta manera, se ajusta a cada lote y les asigna una puntuación según su valor alto o bajo en cada componente principal, es decir, cuál es alto en la función de forma uno y cuál es bajo en la función de forma uno.
Desde allí, se pueden ver ejemplos que ayudan a definir qué es este cambio de forma que ocurre aquí. Esto confirma que este lote en particular, que tenía una función de forma inicial alta, tenía un buen estado estable, mientras que en el bajo, vemos un aumento y luego una disminución.
Por curiosidad, también miré qué hacen estos otros. Parecen más bien capturar. A veces, se produce una interrupción entre la fase de crecimiento y la estacionaria porque cambiamos una condición, lo que puede desorganizar un poco la producción, lo cual no es un gran problema, pero quizás queremos minimizarlo. O quizás estas caídas al final, que pueden ser significativas o no, podrían ser simplemente un efecto secundario de la finalización de este lote en particular.
A partir de esto, definimos nuestros componentes principales funcionales e identificamos dónde se producían esos cambios de forma. Pero luego quisimos ver qué cambia realmente esas funciones de forma. ¿Podemos controlar cómo se crea la forma manipulando las condiciones? Ahí es donde entra en juego el DOE funcional.
Para ello, lo que ocurre esencialmente es una regresión contra cada componente principal individual con las condiciones de DOE suplementarias. Existen muchas opciones diferentes para realizar este modelado. En este caso particular, simplemente realicé un mejor subconjunto con minimización de AIC porque, en este caso, solo introducimos tres factores. No hubo una gran necesidad de reducir el número de factores ni la complejidad. Además, no fue demasiado complejo computacionalmente para realizar un mejor subconjunto. Ese es el método que utilizo para todos estos FPC. Podemos ver aquí, lo cual es interesante, que generan una expresión de predicción. Se puede tener una idea de cómo cada factor afecta a cada forma.
Pero, de nuevo, esa no siempre es la mejor manera de interpretar algo. A partir de ella, podríamos ver que el factor 3 tiene el coeficiente más alto, por lo que quizás sea el más influyente. Pero una de mis funciones favoritas de JMP son los perfiladores. Son muy útiles para visualizar lo que realmente está sucediendo.
En este caso, al analizar el perfilador, utilicé la maximización del día 30 como indicador de una fase estacionaria prolongada. No es una solución perfecta, pero creemos que, si se mantiene estable, seguirá siendo alta en el día 30. De hecho, al realizar esta optimización, observamos que minimizar el factor 3, lo cual es lógico porque tiene un coeficiente negativo, nos dará una producción más estable que cuando el factor 3 es muy alto. Esto fue muy útil para nuestros clientes. Básicamente, les proporcionó un punto de apoyo para identificar: "Aquí tenemos una condición en la que vamos a obtener una producción más estable".
La segunda respuesta, dado que identificamos el estado estacionario, era si podíamos predecir la gran escala. El conjunto de datos que teníamos para esta respuesta contenía tanto un experimento a gran escala en condiciones de control como un experimento a pequeña escala en condiciones de control, además de introducir las diferentes condiciones de DOE después del crecimiento.
La razón por la que queríamos capturar esto es que no es una traducción perfecta de la pequeña a la gran escala, especialmente para la fase de crecimiento. Dado que las células podrían tener más espacio para crecer a gran escala, podría haber una mejor o peor mezcla, lo que les permitiría tener más acceso a los nutrientes. Tendemos a observar un crecimiento más rápido a gran escala que a pequeña escala. Queríamos ver si podíamos generar un perfilador de predicción que nos permitiera predecir ese aumento en el crecimiento, pero también ver si podíamos aplicar esos impactos del DOE.
No entraré en detalles sobre esto, pero se realizó un ajuste muy similar para la Respuesta 2. Se eligió el Spline P porque presentaba esa peculiaridad al final que vimos con el Spline B para la Respuesta 1. Al observar las funciones de forma, vemos esta de nuevo. Es la de estado estacionario. Pero en este caso, por la escala, no es lo que nos interesa tanto.
Debido a la escala, queremos ver si afecta a esta parte. Contamos con estas funciones de forma adicionales, donde vemos que parecen capturar cambios al inicio de la producción, que es lo que nos interesa. De hecho, la Función de Forma 3 parece ser el cambio más drástico en esa fase de crecimiento.
Nuevamente, observar los perfiladores ayuda a confirmarlo. Si observamos estas pendientes, cuando tenemos un FPC3 alto en comparación con un FPC3 bajo, vemos que cuando es alto, es un poco más superficial; cuando es bajo, vemos este pico más intenso.
Luego, queríamos pasar al DOE. ¿Podemos aplicar los factores y la escala a estos componentes principales? Lo bueno que se observó en el Componente Principal 3 fue que lo único significativo fue la escala, lo cual es positivo porque pudimos aislar el impacto de la escala en ese cambio de forma en particular. No completamente, ya que la escala también afectó a los demás componentes principales, pero sí teníamos esta forma aislada.
Nuevamente, observar el perfilador es lo que más ayuda con la interpretación. Vemos aquí, en el día 30, que la escala no tiene mucho impacto. Es bastante estable. Pero si observamos el día 7, durante la fase de crecimiento, vemos esta diferencia, este efecto donde la gran escala será mayor que la pequeña. Al ver esto, parecemos estar captando esa diferencia entre las escalas.
Logramos capturar estos dos objetivos en los modelos. Otra ventaja de Functional Data Explorer es que permite exportar las fórmulas de predicción a una columna de la tabla de datos y, con la plataforma de perfiladores habitual, crear un perfilador que se pueda manipular simultáneamente entre las dos respuestas, ya que comparten algunos factores.
Esto es útil por un par de razones. Primero, es útil ver todo junto, pero también puede que tengas clientes o usuarios de modelos que no tengan JMP Pro y que no tengan acceso a Functional Data Explorer. Esto te permite compartir el modelo con alguien que quizás solo tenga JMP estándar, para que puedan experimentar con él desde allí.
En resumen, logramos nuestros dos objetivos de modelado con Functional DOE. Simplificó gran parte de la complejidad, a la vez que capturó las áreas de interés que vimos donde los cambios se producían entre lotes en diferentes condiciones. Pudimos aislar ciertas funciones frente a factores específicos. Finalmente, creamos este perfilador, ideal para compartir con el cliente o usuario del modelo, ya que, en definitiva, son ellos quienes lo usarán.
Algunas limitaciones. Creo que se discute en todas las conferencias JMP anuales que Functional DOE o Functional Explorer no proporcionan ningún error de predicción. He intentado experimentar un poco con la idea de que, si generamos nuestros residuos de predicción, ¿podríamos hacernos una idea modelando esos residuos? Tuve poco éxito con eso, pero estoy abierto a ideas sobre cómo podríamos hacerlo en el futuro.
Otra cosa que sería interesante, y que de hecho podría ser posible, pero no supe cómo hacerlo, es optimizar con una función de forma específica. En mi caso, estaba optimizando para maximizar el día 30 como indicador. Si el día 30 es alto, tenemos una producción bastante estable. Ese no es un indicador perfecto. Si pudiéramos introducir una función ideal con una producción plana, ¿cómo optimizaríamos con respecto a eso? Sería útil. De nuevo, eso podría ser algo que ya es posible, pero que desconozco.
El otro riesgo, por supuesto, con cualquier modelado flexible, es el sobreajuste de datos muy ruidosos. En este caso, los datos eran bastante uniformes. Esto no siempre será así. Generalmente, cuando queremos equilibrar ese sobreajuste, herramientas como la validación cruzada son muy útiles. Sin embargo, como no estaba ejecutando todo en las mismas condiciones, introdujimos estos factores adicionales, lo que complica un poco la definición de un conjunto de datos de prueba frente a uno de entrenamiento. Definitivamente, en el futuro, estaré abierto a cualquier sugerencia al respecto.
En general, logramos hacer lo necesario. Por supuesto, no solo trabajé en esto yo. Nuestro equipo preclínico proporcionó muchos datos. También contamos con la colaboración de algunos de mis coautores, quienes aportaron mucha información sobre el procesamiento continuo. También contamos con la ayuda de otros estadísticos en nuestra investigación. Quería agradecerles al final. También hay algunas referencias disponibles. Con esto concluyo mi presentación.