Ajuste de Curva Michaelis-Menten con Python
Tabla de contenido
- Introducción
- Importación de bibliotecas
- Definición de la función a ajustar
- Generación de datos de prueba
- Añadir ruido a los datos experimentales
- Definición de la función de cálculo de residuos
- Ajuste de los parámetros
- Visualización de los resultados
- Conclusiones
- Recursos
Introducción
¡Bienvenidos a esta clase suplementaria! En este video, vamos a repasar cómo construir un programa de ajuste utilizando la curva de Michaelis-Menten. Vamos a generar datos experimentales ruidosos y encontrar los mejores valores de km y vmax que se ajusten a esos datos. Pero primero, vamos a importar las bibliotecas necesarias y definir la función que vamos a ajustar. ¿Listos? ¡Comencemos!
Importación de bibliotecas
Para comenzar, vamos a importar las bibliotecas necesarias para llevar a cabo el ajuste. Utilizaremos las bibliotecas numpy y matplotlib.
import numpy as np
import matplotlib.pyplot as plt
Definición de la función a ajustar
Ahora, vamos a definir la función que queremos ajustar, que corresponde a la curva de Michaelis-Menten. Esta función Toma como argumentos la concentración del sustrato (S), la vmax y el valor de km.
def mm(S, vmax, km):
return (vmax * S) / (km + S)
Generación de datos de prueba
Como no tenemos datos experimentales reales, vamos a generar datos de prueba para simular el proceso de ajuste. Utilizaremos la función linspace de la biblioteca numpy para generar una serie de puntos en el rango de concentraciones del sustrato.
S = np.linspace(0, 10, 11)
Añadir ruido a los datos experimentales
Ahora que tenemos los datos de prueba, vamos a añadir ruido a los valores utilizando la distribución normal. Esto nos permitirá simular el error experimental.
error = np.random.normal(0, 0.1, len(S))
experimental_data = mm(S, 5.6, 2.3) + error
Definición de la función de cálculo de residuos
Antes de realizar el ajuste, necesitamos definir la función que calculará los residuos. Los residuos son la diferencia entre los valores experimentales y los valores calculados por la función de ajuste. Utilizaremos la función cuadrática de los residuos (chi-cuadrado) para evaluar qué tan bien se ajustan los datos. La función de cálculo de residuos toma como argumentos los parámetros de ajuste (vmax y km) y devuelve un array con los residuos.
def residuals(params):
vmax, km = params.values()
predicted_data = mm(S, vmax, km)
return experimental_data - predicted_data
Ajuste de los parámetros
Ahora estamos listos para realizar el ajuste. Utilizaremos el algoritmo de optimización Levenberg-Marquardt, que se encuentra en la biblioteca scipy. Primero, necesitamos definir los valores iniciales y los límites para los parámetros vmax y km.
from scipy.optimize import least_squares
initial_params = {'vmax': 4, 'km': 1}
bounds = ([0, 0], [20, 20])
result = least_squares(residuals, initial_params, bounds=bounds)
Visualización de los resultados
Finalmente, vamos a visualizar los resultados del ajuste. En primer lugar, vamos a trazar los datos experimentales junto con la curva ajustada utilizando los parámetros óptimos encontrados. A continuación, vamos a graficar los residuos para evaluar qué tan bien se ajusta la curva a los datos.
Fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 10))
ax1.plot(S, experimental_data, 'bo', label='Datos experimentales')
ax1.plot(S, mm(S, result.x[0], result.x[1]), 'r-', label='Curva ajustada')
ax1.set_xlabel('Concentración del sustrato (S)')
ax1.set_ylabel('Velocidad de reacción')
ax1.legend()
ax2.axhline(0, color='gray', linewidth=0.5)
ax2.stem(S, residuals(result.x), basefmt='b-', linefmt='r-', use_line_collection=True)
ax2.set_xlabel('Concentración del sustrato (S)')
ax2.set_ylabel('Residuos')
Conclusiones
En este video, aprendimos cómo realizar un ajuste utilizando la curva de Michaelis-Menten. Generamos datos de prueba ruidosos, encontramos los mejores valores de vmax y km que se ajustaron a esos datos y visualizamos los resultados. ¡Espero que haya sido útil! Si tienes alguna pregunta, no dudes en preguntar. ¡Hasta la próxima!
Recursos