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

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

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.

d:(Intercept) e:(Intercept) 
    73.261268      3.437136

V_{max} = 73.261268 and K_M = 3.437136 .

Further reading

My post on curve fitting in R

Print Friendly, PDF & Email

Creative Commons License
This work is licensed under a Creative Commons
Attribution 4.0 International License
14 comments Add yours
  1. 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. Hi Niels and Wes,

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



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

  3. 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’
    Is there any thing wrong, ive tried downloading the packages

    1. 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.

      1. 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. You can use the lm() function and the first couple of values to perform a linear regression on the initial part of the plot.

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

  5. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

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