In this report we present the enzymatic reaction from an unknown enzyme. We will make every attempt to understand the results that we obtained.

For this first report we will attempt to analyse the data with the enzyme kinetics method of Michaelis-Menten

Data source and method

Enzyme was from unknown source and tested in the laboratory under standard conditions.

The analysis method is derived from the script from Professor Rob Beynon in the U.K.

In particular we will calculate the Vmax and Km with nonlinear least square methods and provide a theoretical curve.

Raw data

The data was obtained from an experiement performed by Freddie Buck on: Tue May 02 11:22 2017.

The substrate data was collected and written in the lab notebook.

A vector S can be created to contain the substracte concentrations:

S <- c(0,1,2,5,8,12,30,50)

Similarly vector v will contain the velocity results for each S value:

v <- c(0,11.1,25.4,44.8,54.5,58.2,72.0,60.1)

The data can be combined and presented in simple tabular form.

There are 8 observations for S and 8 for v.

(Inside note: the number of observations for each vector is derived from an R calculation with the length() function.)

# Combine data in a dataframe:
kinData <- data.frame(S,v)

# Print the data:
##    S    v
## 1  0  0.0
## 2  1 11.1
## 3  2 25.4
## 4  5 44.8
## 5  8 54.5
## 6 12 58.2
## 7 30 72.0
## 8 50 60.1

Data exploration

We can explore the data with a simple first plot describing the reaction.

plot (S,v)

It seems that the plot is consistent with an enzymatic reaction and matches the Michaelis-Menten equation.

Model building

This enzymatic data plot indicates that the Michaelis-Menten equation can be used.

We can use a statistical method to create a model and calculate constant parameters Km and Vmax.

For this we will use standard statistical functions built-in in R base installation: nls() and predict() described as follows by R help:

nls(): Determine the nonlinear (weighted) least-squares estimates of the parameters of a nonlinear model. nls() is non-linear least squares optimiser that we can use to solve the Km and Vmax parameters based on first approximation obtained by visual inspection of the plot.

predict() will be used to predict a theoretical curve based on the nls() calculations and a series of hypothetical S dilutions.

Predict Vmax and Km

The Michaelis-Menten equation:

# "velocity = Vmax times S divided by (Km plus S)", stored in MMcurve
MMcurve <- formula(v ~ Vmax*S/(Km+S))

By inspecting the plot we can determine approximate values for Km and Vmax that can be given to nls() in order to compute values closer to the truth:

Vmax is about 50

Km is about 2 (value of [S] when Vmax is half.)

bestfit <- nls(MMcurve, kinData, start=list(Vmax=50,Km=2))
# print the results
## Nonlinear regression model
##   model: v ~ Vmax * S/(Km + S)
##    data: kinData
##   Vmax     Km 
## 73.261  3.437 
##  residual sum-of-squares: 156.4
## Number of iterations to convergence: 7 
## Achieved convergence tolerance: 5.971e-06

We can therefore estimate the final values of Km and Vmax from this result rounded to 2 significant digits:

Vmax = 73.26

Km = 3.44

Theoretical curve

We can use the model above to build a theoretical curve: we first create a list of hypothetical concentrations of the substrate S and then use the predict() funtion with the bestfit data obtained by nls() to compute theoretical values for velocity v:

# Hypothetical oncentration ranges for S:
SconcRange <- seq(0,50,0.1)

# Calculate the predicted velocities using the predict() function:
theorLine <- predict(bestfit,list(S=SconcRange))

This will be used in the final plot.

Final plot based on data and model

This final plot contains all the data points and the theoretical curve, with the values of Vmax and Km included on the plot.

# Now plot the data, the best fit line, and put the best fit coefficients in the plot
plot (kinData, 
      xlab="Subtrate (mM)", 
      ylab="Velocity (nmol/s)", 
      title(main="Fitted MM data"), 
      pch=17, col="blue", cex=1.5)

# Now add the theoretical line with the lines() function:

# Add text with the values:
text(28,30, "Vmax = ")
text(29,25, "Km = ")


In conclusion we can report that this enzyme follows a typical Michaelis-Menten pattern and the equation can be solved with Vmax = 73.26 and Km = 3.44 based on 8 observations for S and 8 for v.

R Session:

## R version 3.3.3 (2017-03-06)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: OS X El Capitan 10.11.6
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## loaded via a namespace (and not attached):
##  [1] backports_1.0.5 magrittr_1.5    rprojroot_1.2   tools_3.3.3    
##  [5] htmltools_0.3.5 yaml_2.1.14     Rcpp_0.12.10    stringi_1.1.5  
##  [9] rmarkdown_1.4   knitr_1.15.1    stringr_1.2.0   digest_0.6.12  
## [13] evaluate_0.10