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
where is the reaction rate of product
to substrate
,
represents the maximum rate achieved by the system, and
is the substrate concentration at which the reaction rate is half of
. 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 and
use coef() in R to get the coefficients of the model.
coef(m1) d:(Intercept) e:(Intercept) 73.261268 3.437136
and
.
Further reading
My post on curve fitting in R

This work is licensed under a Creative Commons
Attribution 4.0 International License.
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…
I am also interested in estimating Vmax and would like to know how to interpret this output
Hi Niels and Wes,
sorry for the late reply Niels. I’ve updated the post to show how to estimate Vmax.
Cheers,
Dave
How do we get the r squared values after fitting the rectangular hyperbola using the drc package?
Sorry for the late reply. Can’t you get the values by using summary() on the model?
Hi Davo, we don’t get r squared value using summary() as in your exemple “summary(m1)”.
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
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.
Hi,
Is there any way to calculate the K max?
Hi there. There’s Vmax and Km. What is K max?
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.
You can use the lm() function and the first couple of values to perform a linear regression on the initial part of the plot.
Is there a way to estimate the 95% CI using bootstrapping technique for the MM models?
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.