# Fitting a Michaelis-Menten curve using R

Updated 2017 November 22nd

Many biological phenomena follow four different types of relationships that include sigmoid, exponential, linear and Michaelis-Menten (MM) type relationships. The MM model is given by $v = \frac{d[P]}{dt} = V_{max}\frac{[S]}{K_M + [S]}$

where $v$ is the reaction rate of product $[P]$ to substrate $[S]$, $V_{max}$ represents the maximum rate achieved by the system, and $K_M$ is the substrate concentration at which the reaction rate is half of $V_{max}$. This is a short post on fitting a Michaelis-Menten curve to data using the drc package for R available in CRAN. To get started install and load the drc package.

#install if necessary
install.packages("drc")
library(drc)


I’ll use the same data as this blog post.

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

# reaction rate
v <- c(0,11.1,25.4,44.8,54.5,58.2,72.0,60.1)
kinData <- data.frame(S,v)

# use the two parameter MM model (MM.2)
m1 <- drm(v ~ S, data = kinData, fct = MM.2())

# the summary indicates how well the curve fits the data
summary(m1)

Model fitted: Michaelis-Menten (2 parms)

Parameter estimates:

Estimate Std. Error t-value   p-value
d:(Intercept) 73.26127    4.36676 16.7770 2.864e-06 ***
e:(Intercept)  3.43714    0.75484  4.5535  0.003878 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error:

5.106323 (6 degrees of freedom)

plot(m1, log = '', pch = 17, main = "Fitted MM curve") To get $V_{max}$ and $K_M$ use coef() in R to get the coefficients of the model.

coef(m1)
d:(Intercept) e:(Intercept)
73.261268      3.437136 $V_{max} = 73.261268$ and $K_M = 3.437136$.

My post on curve fitting in R .
1. Niels Hansen says:

Hi, could you elaborate how to interpret this data:
Estimate Std. Error t-value p-value
d:(Intercept) 8.1177e+05 5.0017e+04 1.6230e+01 0
e:(Intercept) 1.4721e+07 1.3435e+06 1.0957e+01 0

I’m interested in estimating Vmax…

1. Wes says:

I am also interested in estimating Vmax and would like to know how to interpret this output

1. Davo says:

Hi Niels and Wes,

sorry for the late reply Niels. I’ve updated the post to show how to estimate Vmax.

Cheers,

Dave

2. Stanford Mabasa says:

How do we get the r squared values after fitting the rectangular hyperbola using the drc package?

1. Davo says:

Sorry for the late reply. Can’t you get the values by using summary() on the model?

1. Tom says:

Hi Davo, we don’t get r squared value using summary() as in your exemple “summary(m1)”.

3. Dillon Barker says:

I get
Error: package or namespace load failed for ‘drc’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]):
there is no package called ‘quantreg’

1. Davo says:

It seems like the package “quantreg” wasn’t installed on your system. I just installed the package “drc” by running install.packages(“drc”) on a fresh installation of R (version 3.4.3) and the example code above worked fine.

4. Charlotte Volpe says:

Hi,
Is there any way to calculate the K max?

1. Davo says:

Hi there. There’s Vmax and Km. What is K max?

1. CharlotteV says:

I am looking for the saturation value on the x-axes. So I wanted to know if it is possible to create a tangent (linear regression for the initial part of the plot) and them make an intercept with the upper asymptote.

1. Davo says:

You can use the lm() function and the first couple of values to perform a linear regression on the initial part of the plot.

5. Smruti Mokal says:

Is there a way to estimate the 95% CI using bootstrapping technique for the MM models?

6. Eliott says:

How do you predict x at 90 % of maximum y, otherwise known as the critical value, which is the amount of fertiliser needed to achieve 90% of maximum yield.

This site uses Akismet to reduce spam. Learn how your comment data is processed.