Enzyme kinetics (Michaelis-Menten)
Overview
Enzyme kinetics (Michaelis-Menten) fits initial reaction velocities measured at varying substrate concentrations to estimate maximum enzymatic velocity (\(V_{\max}\)) and the Michaelis constant (\(K_m\)). The template uses nonlinear least-squares regression with analytic Jacobians, computes delta-method standard errors for catalytic efficiency (\(V_{\max}/K_m\)), calculates turnover number (\(k_{\text{cat}}\)) when enzyme concentration is provided, evaluates fit quality checks, and provides a direct side-by-side comparison with the classic double-reciprocal (Lineweaver-Burk) transformation to illustrate the distortion introduced by reciprocal linearization.
The workbook ships pre-populated with the Puromycin treated-cell dataset from Treloar (1974), as shipped in R’s datasets::Puromycin, a configurable Defaults table, an in-workbook modification guide, and a Validation sheet containing eight reference checks: fits of the Puromycin treated and untreated data compared with R nls results, and noise-free synthetic datasets with known parameters.
Before you start
Requirements. Excel with Python for Excel enabled. The template operates entirely within workbook sheets without requiring external databases or third-party add-ins.
Core enzyme kinetics concepts. - Substrate concentration (\([S]\)): The independent variable representing the initial molar or mass concentration of substrate available to the enzyme. - Initial reaction velocity (\(v\)): The rate of product formation (or substrate consumption) measured during the early linear phase of the reaction before significant substrate depletion or product inhibition occurs. - Maximum velocity (\(V_{\max}\)): The asymptotic limiting reaction rate achieved when the enzyme active sites are completely saturated with substrate (\([S] \gg K_m\)). - Michaelis constant (\(K_m\)): The substrate concentration at which the reaction velocity reaches half of \(V_{\max}\) (\(v = V_{\max} / 2\)). It reflects the operational affinity of the enzyme for the substrate under assay conditions. - Catalytic efficiency proxy (\(V_{\max} / K_m\)): The apparent second-order rate constant at low substrate concentrations (\([S] \ll K_m\)). - Turnover number (\(k_{\text{cat}}\)): The maximum number of substrate molecules converted to product per active site per unit time, computed as \(k_{\text{cat}} = V_{\max} / [E]\) when total enzyme concentration \([E]\) is specified. - Lineweaver-Burk plot: The double-reciprocal linearization \(1/v = (K_m / V_{\max})(1/[S]) + 1/V_{\max}\). Although historically popular for hand calculation, ordinary least squares on \(1/v\) vs \(1/[S]\) strongly overweights points with small velocities (large \(1/v\)), introducing statistical bias and variance distortion. Nonlinear regression directly on \(v\) vs \([S]\) is the standard modern recommendation.
Assumptions. 1. Initial rate conditions: Measurements capture initial steady-state velocity where reverse reactions and enzyme inactivation are negligible. 2. Substrate in excess: Total substrate concentration greatly exceeds total enzyme concentration (\([S]_0 \gg [E]_0\)). 3. Hyperbolic kinetics: The enzyme exhibits non-cooperative, single-substrate Michaelis-Menten kinetics without allosteric cooperativity (Hill coefficient \(n = 1\)).
Workbook tour
| Sheet and range | What it holds | Kind |
|---|---|---|
| Rates, A4:B104 | Input data: Substrate concentration [S] and initial rate v with replicate determinations. | Editable input |
| Defaults, A4:D24 | Configurable settings: Confidence level, R² floor, enzyme concentration [E], units, and outlier SD. | Editable input |
| Results, A4:E8 | Parameter estimates (Vmax, Km, Vmax/Km, kcat) with standard errors and confidence intervals. |
Output |
| Results, A11:E13 | Lineweaver-Burk comparison: OLS estimates, percent difference vs nonlinear fit, and evaluation note. | Output |
| Results, A16:B18 | Acceptance checks: R² floor (Defaults B6) and Km within tested range. The minimum distinct substrate concentrations (default 4) is enforced by the run guard rather than shown as a row. |
Output |
| Results, A22:B34 | Fit statistics: points used, degrees of freedom, residual SD (s_y.x), R², AICc, units, and diagnostics. |
Output |
| Results, A36 | Native scatter chart plotting initial rate measurements, fitted hyperbolic curve, and confidence envelope. | Output |
| Curve, A4:D54 | Grid of 50 concentration points with fitted rate and lower/upper confidence bounds for the Results chart. | Output |
| Validation, A4:G12 | Reference checks comparing fits of the Puromycin data (Treloar 1974, as in R datasets::Puromycin) and noise-free synthetic data. |
Output |
| Guide, A4:B9 | Step-by-step instructions for adapting the workbook to other assays and SOPs. | Authored reference |
Using the template
1. Enter velocity measurements
- Navigate to the Rates sheet.
- Enter substrate concentration values in column A (Substrate concentration) and measured initial velocities in column B (Initial rate), starting in row 5.
- Replicate determinations appear as separate rows sharing the same substrate concentration value.
- Rows with non-numeric text, blank values, or negative substrate concentrations are excluded automatically (negative rates are kept).
2. Configure defaults and units
- Open the Defaults sheet.
- Adjust cell B5 (Confidence level) to set the statistical confidence interval width (default 0.95 for 95% confidence).
- Adjust cell B6 (R-squared floor) to set the minimum acceptable fit quality (default 0.90).
- Enter total enzyme concentration in cell B7 (Enzyme concentration) if known; this enables turnover number (\(k_{\text{cat}}\)) calculation on Results. If left blank, \(k_{\text{cat}}\) displays as
n/a. - Edit cell B8 (Substrate unit, default
ppm) and cell B9 (Rate unit, defaultcounts/min/min) to match your assay units (e.g.uManduM/min). These labels appear in the Results table and statistics only; the Rates headers, chart axis titles and Curve header stay unit-free ([S]andv).
3. Review kinetic parameters and checks
- Open the Results sheet.
- Inspect the fitted estimates for \(V_{\max}\), \(K_m\), catalytic efficiency (\(V_{\max}/K_m\)), and optional \(k_{\text{cat}}\) with their standard errors and two-sided confidence intervals.
- Review the Acceptance checks table to confirm that fit \(R^2 \ge \text{floor}\) (Defaults B6) and that \(K_m\) falls within the tested concentration range. The run guard separately requires at least
MIN_CONCENTRATIONS(default 4) distinct substrate concentrations before any results appear. - Examine the Lineweaver-Burk comparison table to see how double-reciprocal OLS compares to the nonlinear least-squares fit.
- Review the native scatter chart showing experimental replicates, fitted hyperbolic curve, and confidence envelope.
Inputs and settings
Rates (A5:B104): - Substrate concentration (column A): Known substrate concentration for each reaction well or vial. - Initial rate (column B): Measured reaction velocity (e.g. absorbance change per minute, concentration produced per minute, or scintillation counts).
Defaults (A5:D10): - Confidence level (B5): Two-sided Student \(t\) confidence level for parameter intervals and confidence bands. Allowed range: 0.50 to 0.99. Default 0.95. - R-squared floor (B6): Minimum coefficient of determination required for automated acceptance. Allowed range: 0.50 to 0.99. Default 0.90. - Enzyme concentration (B7): Optional total enzyme concentration \([E]\) in the assay. When positive, computes \(k_{\text{cat}} = V_{\max} / [E]\). Default blank (None). - Substrate unit (B8): Text label for substrate concentration units (e.g. ppm, uM, mM). - Rate unit (B9): Text label for velocity units (e.g. counts/min/min, uM/min). - Outlier SD threshold (B10): Standardized residual threshold for outlier diagnostic flagging (does not exclude points). Allowed range: 1.0 to 10.0. Default 3.0.
How results are calculated
- Michaelis-Menten rate equation: The initial velocity \(v\) at substrate concentration \([S]\) follows: \[v = \frac{V_{\max} [S]}{K_m + [S]}\]
- Nonlinear least-squares fitting: Parameters \(V_{\max}\) and \(K_m\) are estimated using bounded trust-region reflective optimization (scipy curve_fit, method trf) minimizing: \[\text{RSS} = \sum_{i=1}^n \left( v_i - \frac{V_{\max} [S]_i}{K_m + [S]_i} \right)^2\] Analytic Jacobians are supplied: \[\frac{\partial v}{\partial V_{\max}} = \frac{[S]}{K_m + [S]}, \quad \frac{\partial v}{\partial K_m} = -\frac{V_{\max} [S]}{(K_m + [S])^2}\]
- Parameter covariance and standard errors: The parameter covariance matrix is calculated from the design matrix \(J\): \[\Sigma = s_{y.x}^2 (J^T J)^{-1}, \quad s_{y.x} = \sqrt{\frac{\text{RSS}}{n - 2}}\] Parameter standard errors are the square root of diagonal elements: \(\text{SE}(V_{\max}) = \sqrt{\Sigma_{00}}\), \(\text{SE}(K_m) = \sqrt{\Sigma_{11}}\).
- Catalytic efficiency (\(V_{\max} / K_m\)) via delta method: Let \(g(V_{\max}, K_m) = V_{\max} / K_m\). With gradient \(\nabla g = [1/K_m, -V_{\max}/K_m^2]^T\): \[\text{Var}(g) = \nabla g^T \Sigma \nabla g, \quad \text{SE}(g) = \sqrt{\text{Var}(g)}\]
- Lineweaver-Burk double-reciprocal OLS: Linear regression on \(1/v\) versus \(1/[S]\): \[\frac{1}{v} = \text{slope} \cdot \frac{1}{[S]} + \text{intercept}\] Yields \(V_{\max,\text{LB}} = 1/\text{intercept}\) and \(K_{m,\text{LB}} = \text{slope}/\text{intercept}\).
Reading the results
Results (A4:E8): - \(V_{\max}\): Fitted limiting maximum velocity. - \(K_m\): Substrate concentration required for half-maximal velocity. - Catalytic efficiency proxy (\(V_{\max}/K_m\)): First-order rate constant at limiting substrate concentrations with delta-method confidence interval. - \(k_{\text{cat}}\): Apparent turnover number (\(V_{\max}/[E]\)); displays n/a if enzyme concentration is omitted.
Lineweaver-Burk comparison (A11:E13): - Displays parameter estimates from linear regression of double-reciprocal transformed data and the percentage difference from nonlinear fit values. - Reciprocal transformation turns small velocities into large numbers, exaggerating measurement noise in low-concentration wells and biasing parameters downwards.
Acceptance checks (A16:B18): - Fit R-squared at least [floor]: Verifies that the hyperbolic model explains at least the floor set in Defaults B6 (0.90 by default) of observed variance. The row label shows the floor in use. - \(K_m\) within tested substrate range: Confirms that experimental concentrations straddle \(K_m\), ensuring \(K_m\) is interpolated rather than extrapolated.
Saving, sharing and App mode
- Saving: Save the workbook normally as an
.xlsxfile. Measurements, settings, and Python calculation outputs persist with the file. - Sharing: Distribute the workbook to collaborators with Python for Excel enabled. The notebook recalculates automatically on open.
- App mode: Users without Python experience can enter data and view updated tables and charts directly in Excel worksheets while the Python notebook operates behind the scenes.
Errors, empty states and limits
- Empty state: If Rates is cleared, built-in reference Puromycin data is used as fallback.
- Minimum observations: At least 5 usable rate determinations are required. Non-numeric values and negative concentrations are excluded (negative rates are kept).
- Minimum concentrations: At least
MIN_CONCENTRATIONSdistinct substrate concentration levels are required (default 4; set in the notebook rules section). The run guard halts the Results, status and publish steps when this is not met. - Row limit: Ingests up to 100 measurement rows (Rates A5:B104). Rows beyond row 104 are not read; a notice appears if a value is present at Rates!A105. The notice does not appear when that cell is blank.
Limitations and when to use this
- No enzyme inhibition models: This template fits single-substrate Michaelis-Menten kinetics. Fitting competitive, non-competitive, or uncompetitive inhibition requires multi-series data with varying inhibitor concentrations, which is outside the scope of this template.
- No cooperative (allosteric) fitting: Enzymes exhibiting sigmoidal kinetics (cooperative binding, Hill coefficient \(n \ne 1\)) require a Hill model rather than the hyperbolic Michaelis-Menten equation.
- Initial rates required: The model assumes product concentration increases linearly with time during the measurement interval. If progress curves exhibit significant curvature due to substrate depletion, reaction progress curve analysis is required.
Free alternatives
Free alternative: Excel Solver (included with Excel) can fit v = Vmax x S / (Km + S) directly with bounds. The Lineweaver-Burk linear trendline is a free shortcut but biases Vmax and Km; this workbook shows it only as a comparison.
Developer reference
Notebook implementation
The notebook imports boardflare and standard scientific packages (numpy, pandas, scipy.optimize, scipy.stats). Input ranges are bound in a single reactive call:
inputs = bf.inputs(
rates=bf.ref("Rates!A4:B104", headers=True),
defaults=bf.ref("Defaults!A4:B24", headers=True),
overflow="Rates!A105",
)The fit executes nonlinear regression using the shared MICHAELIS_MENTEN engine model synced from engine/models/michaelis_menten.py. Publication outputs six distinct tables:
publication = bf.publish(
outputs={
"results": results_table,
"lineweaver_burk": lineweaver_burk_table,
"checks": checks_table,
"statistics": statistics_table,
"curve": curve_table,
"validation": validation_table,
}
)How the calculation/model works
Nonlinear regression minimizes residual sum of squares via bounded trust-region reflective (scipy curve_fit, method trf) with bounds \(V_{\max} \ge 0\) and \(K_m \ge 0\). The initial parameter guess uses \(V_{\max}^{(0)} = 1.1 \cdot \max(y)\) and \(K_m^{(0)} = \text{median}(x[x > 0])\). Analytic Jacobians ensure stable convergence.
The Lineweaver-Burk double-reciprocal regression is computed on positive points (\(x > 0, y > 0\)) using ordinary least squares: \[1/v = \beta_0 + \beta_1 (1/[S])\] with \(V_{\max,\text{LB}} = 1/\beta_0\) and \(K_{m,\text{LB}} = \beta_1/\beta_0\).
Inhibition fitting (competitive, uncompetitive, mixed) is excluded from this template to maintain a focused single-curve layout.
Validation / expected results
The baseline evaluation on shipped Puromycin treated cells produces: - \(V_{\max}\): \(212.6838\ \text{counts/min/min}\) (SE: \(6.9472\), 95% CI: \(197.2046\) to \(228.1631\)) - \(K_m\): \(0.0641\ \text{ppm}\) (SE: \(0.0083\), 95% CI: \(0.0457\) to \(0.0826\)) - Catalytic efficiency proxy (\(V_{\max}/K_m\)): \(3316.8917\) (SE: \(352.4421\), 95% CI: \(2531.6017\) to \(4102.1817\)) - Lineweaver-Burk: \(V_{\max,\text{LB}} = 195.8027\) (\(-7.94\%\)), \(K_{m,\text{LB}} = 0.0484\) (\(-24.51\%\)) - Acceptance checks: \(R^2 \ge 0.90\) (PASS, floor from Defaults B6), \(K_m\ \text{in range}\) (PASS). The run guard (at least 4 distinct concentrations) did not halt the run. - Validation sheet: All eight reference checks show PASS.
Changelog
2026-10-26 (Issue #236)
- Rebuilt template as a field workbook (
tier: field-workbook), replacing the initial skeleton generator with a hand-crafted biochemist-authentic enzyme kinetics workbook. - Implemented Rates sheet with replicate determination layout pre-populated with the Puromycin treated-cell data from Treloar (1974), as shipped in R’s
datasets::Puromycin. - Revision: removed the “published” label from the Treloar data (an M.Sc. thesis, University of Toronto, per R’s
?Puromycinhelp page), made unit labels Defaults-driven on Results only, movedDEFAULT_*values to documented fallbacks, added a notice for an invalid enzyme concentration, and guarded the overflow notice against blank cells. - Added Defaults sheet with configurable confidence levels, \(R^2\) floor, optional enzyme concentration, unit labels, and outlier SD threshold.
- Added turnover number \(k_{\text{cat}}\) computation when enzyme concentration is specified.
- Added side-by-side Lineweaver-Burk double-reciprocal comparison block with percentage difference and methodological notes.
- Added 50-point fitted curve grid on Curve sheet feeding a native Excel scatter plot on Results.
- Added Validation sheet with eight reference benchmarks (Puromycin treated, Puromycin untreated, and synthetic noise-free recovery) and an in-workbook Modification Guide.