---
title: "Ajuste de datos experimentales cinética enzimática"
author: "Sección biología"
date: "2 de octubre de 2017"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

Para cierta enzima, se ha medido en laboratorio la  velocidad de reación`V`  en función de la concentración de sustrato `[S]`. 
El siguiente gráfico muestra la distribución de esos datos

```{r, echo = FALSE, fig.align='center', fig.width=4, fig.asp=1}
# funcion para generar los puntos
hiperb = function(x, a, b){
  a*x/(1+b*x)  
}

set.seed(2017)
S = runif(20, 0.1, 10)
V = abs(hiperb(S, 15, 3)+rnorm(20, 0, .3) )
plot(S, V, xlim = c(0,10), ylim =c(0,6), pch = 19, col = "red", xlab="[S]", ylab = "V")
datos =data.frame(S=S, V=V)
#write.table(datos, file = "datos.csv", col.names = T, row.names = F, dec = ".")
```

La forma de esa nube de puntos recuerda poderosamente a la gráfica de una hipérbola, que se corresponde con una curva de forma genérica
\begin{equation}\label{fun}
V = \dfrac{a[S]}{1+b[S]}
\end{equation}

y cuya gráfica para, por ejemplo, `a = 20` y `b = 5` es  

```{r, fig.align='center', fig.width=4, fig.asp=1}
hiperb = function(x, a, b){
  a*x/(1+b*x)  
}
x = seq(from = 0, to = 10, by = 0.001)
y = hiperb(x, 20, 5)
plot(x,y,pch = 19, cex = .4, xlim = c(0,10), ylim =c(0,5))
```

En el contexto de la cinética enzimática hay dos cantidades (parámetros) importantes que caracterizan la reacción: 

  * La velocidad máxima de reacción $V_{max}$.
  * La constante cinética $K_M$, propia de cada reacción.
  
En el lenguaje de las funciones $V_{max}$ es la asíntota horizontal de la función $V([S])=a[S]/(1+b[S])$, es decir, 
$$V_{max}=\lim_{[S]\to\infty} \dfrac{a[S]}{1+b[S]}=\dfrac{a}{b}$$ 
La constante cinética $K_M$ se obtiene resolviendo la ecuación 
\[V_{max}/2=\dfrac{a[S]}{1+b[S]}\]
que, gráficamente, se visualiza como 

![](cinetica_enzimatica_1.png)

Como $V_{max}=a/b$, si resuelves la ecuación anterior obtendrás que $K_M=1/b$.

Es decir, si, conseguimos _estimar_  valores apropiados `a` y `b`para obtener una hipérbola que proxime bien  los valores de `[S]` y `V` obtenidos experimentalmente  podremos obtener (de forma aproximada) los valores que caracterizan la reacción enzimática: $V_{max}$ y $K_M$.

### Transformar los datos para que se dispongan conforme a una recta: 

Resulta que si en la expresión 
\begin{equation}
V = \dfrac{a[S]}{1+b[S]}
\end{equation}
sustituimos las variables $[S]$ y $V$ por las nuevas variables $1/[S]_{inv}$  y  $1/V_{inv}$ (este cambio de variable se llama _doble recíproco_) es decir, 
\begin{equation}
\frac{1}{V_{inv}} = \dfrac{a\frac{1}{[S]_{inv}}}{1+b\frac{1}{[S]_{inv}}}
\end{equation}
y simplicamos la expresión (te animamos a reordenar los términos en el castillo de fracciones), se obtiene
\begin{equation}
V_{inv} = \dfrac{1}{a}[S]_{inv} + \frac{b}{a}
\end{equation}

Este hecho sugiere que si en lugar de trabajar con  
`[S]` y `V` lo hacemos con `1/[S]` y `1/V`, la nueva serie de datos estará distribuida aproximadamente como una recta, y podremos usar las técnicas de recta de regresión para calcular la reca $y = b_1x+b_0$ que mejor aproxima los datos transformados. Vamos a ello:

Partimos de los valores experimentales:
```{r}
df = data.frame(S, V)
library(knitr)
kable(head(df))
```

invertimos esos datos

```{r}
S_inv = 1/S
V_inv =  1/V
df_inv = data.frame(S_inv, V_inv)
kable(head(df_inv))
```

Visualizamos la nube de puntos de los datos transformados

```{r}
plot(S_inv, V_inv, pch=19, cex = .7)
```

que, efectivamente, parecen estar dispuestos conforme a una linea recta. Pordemos calular los coeficientes delarecta de regresión de los datos transformados
```{r}
lmInv = lm(V_inv ~ S_inv)
lmInv$coefficients
plot(S_inv, V_inv, pch=19, cex = .7)
abline(a = lmInv$coefficients[1], b = lmInv$coefficients[2], col = "red")
```

Finalmente, como 
$$ K_M = \frac{1}{b} = `r lmInv$coefficients[1]` $$
y 
$$ V_{max} = \frac{a}{b} = `r 1/lmInv$coefficients[1]` $$

se despeja y se obtiene que 

```{r}
(a = 1/lmInv$coefficients[2])
(b = a*lmInv$coefficients[1])
Vmax = a/b
Km = 1/b
```

A continuación representamos la nube de puntos obtenidos experimentalmente y gráfica de la hipérbola cuyos coeficientes hemos aproximado mediante la técnica de regresión.

```{r, fig.align='center', fig.width=4, fig.asp=1}
# puntos de la hiperbola
x = seq(from = 0, to = 10, by = 0.001)
y = hiperb(x, a, b)

plot(S, V, xlim = c(0,10), ylim =c(0,6), pch = 19, col = "red", xlab="[S]", ylab = "V")
par(new=TRUE)
plot(x,y, pch = 19, cex = .4, xlim = c(0,10), ylim =c(0,6), xlab = "", ylab = "")
```
