ELISA standard curve (4PL, 5PL)
Overview
ELISA standard curve (4PL, 5PL) fits four-parameter and five-parameter logistic models to microplate optical densities (OD 450 nm) from sandwich and competitive enzyme-linked immunosorbent assays (ELISA). The template models the sigmoidal relationship between analyte concentration and photometric absorbance on a logarithmic scale, supports zero-calibrator (blank) subtraction, assesses duplicate well %CV, computes standard percent recovery against nominal concentrations, defines assay quantifiable boundaries (Lower Limit of Quantitation [LLOQ] and Upper Limit of Quantitation [ULOQ]), and interpolates unknown sample concentrations with automatic dilution-factor scaling and delta-method confidence intervals.
The workbook ships pre-populated with an illustrative 8-point 3-fold dilution standard ladder and zero blank run in duplicate, 12 unknown test samples spanning quantifiable and out-of-range concentrations, a configurable Defaults table, an in-workbook modification guide, and independent reference validation checks that verify algorithm correctness. All example data are illustrative, not a published dataset, designed to reflect typical sandwich ELISA response behavior.
Before you start
Requirements. Excel with Python for Excel enabled. The template operates entirely within the workbook sheets without requiring external add-ins, instrument drivers, or cloud services.
Core immunoassay concepts. - 4-Parameter Logistic (4PL): The standard symmetric sigmoidal model relating log concentration to optical density: \[y = \text{Bottom} + \frac{\text{Top} - \text{Bottom}}{1 + 10^{(\log_{10}\text{EC50} - x) \cdot \text{Hill}}}\] - 5-Parameter Logistic (5PL): An asymmetric sigmoidal model (Richards / Gottschalk-Dunn formulation) introducing an asymmetry parameter \(g > 0\): \[y = \text{Bottom} + \frac{\text{Top} - \text{Bottom}}{\left(1 + 10^{(\log_{10}\text{EC50} - x) \cdot \text{Hill}}\right)^g}\] When \(g = 1\), the 5PL reduces exactly to the symmetric 4PL. Asymmetry allows the curve to approach one asymptote more gradually than the other, which is common in high-affinity sandwich immunoassays with receptor saturation. - Blank subtraction: The mean optical density of zero-concentration control wells (reagent blanks) is subtracted from all standard and unknown wells. Net ODs reflect analyte-specific signal above background. - Duplicate %CV: The coefficient of variation between replicate wells, calculated as \(100\% \times \frac{\lvert y_1 - y_2 \rvert}{\sqrt{2} \cdot \bar{y}}\). In-house assay protocols conventionally use a 15% duplicate %CV limit as a starting point; users should replace this with their laboratory’s specific precision criteria. - % Recovery: For calibration standards, the back-calculated concentration divided by nominal concentration, multiplied by 100%. Standard recovery is evaluated against a conventional 80% to 120% in-house acceptance window. Note that the ±15% (±20% at LLOQ) accuracy convention commonly used in bioanalytical method validation is not implemented by this template; users should configure the Defaults sheet to match their assay’s specific criteria. - LLOQ and ULOQ: The Lower Limit of Quantitation and Upper Limit of Quantitation define the assay’s reportable dynamic range. In this workbook, LLOQ is defined as the lowest calibration standard with recovery inside the acceptance window (80–120%), and ULOQ is the highest standard inside the window. Unknown samples falling outside [LLOQ, ULOQ] are flagged and not extrapolated.
Physical and statistical assumptions. 1. Monotonic response: Optical density increases monotonically with analyte concentration in sandwich ELISA (Hill slope > 0). Competitive ELISA formats where OD decreases with concentration are not supported. 2. Replicate consistency: Duplicate wells within a plate reflect independent technical replicates subject to pipetting and plate-reader noise. 3. Log-concentration symmetry: Intervals are symmetric on the \(\log_{10}\) scale and become asymmetric after back-transformation to linear concentration. 4. No extrapolation: Concentrations are reported only for test samples whose optical densities fall within the quantifiable calibration range [LLOQ, ULOQ]. Samples outside this range must be re-assayed at a higher or lower dilution factor.
Workbook tour
| Sheet and range | What it holds | Kind |
|---|---|---|
| Standards, A4:D30 | Calibration ladder inputs: Standard ID, Nominal conc. (pg/mL), OD well 1, OD well 2. | Editable input |
| Standards, F4:L13 | Back-calculation results: Standard ID, Nominal conc., Mean OD, Net OD, Back-calculated conc., % Recovery, and Flag. | Output |
| Defaults, A4:D12 | Analysis configuration: Curve model (4PL/5PL), Weighting (None/1/y^2), Subtract blank, Confidence level, CV limit, Recovery window. | Editable input |
| Unknowns, A4:D36 | Test samples input: Sample ID, Dilution factor, OD well 1, OD well 2. | Editable input |
| Unknowns, F4:O16 | Unknown results: Sample ID, Dilution factor, Mean OD, %CV, In-well conc., Dilution-corrected conc., SE, Low, High, Flags. | Output |
| Results, A4:E9 | Fitted curve parameters: Bottom, Top, EC50, Hill slope, and Asymmetry (g) with standard errors and confidence intervals. | Output |
| Results, A12:B16 | Acceptance checks: R² floor (>= 0.99), standard recovery (>= 75% in window), minimum standards (>= 6), unknowns in range. | Output |
| Results, A19:B32 | Fit statistics: model name, weighting, blank subtraction, blank OD mean, n, df, Sy.x, R², RMSE, LLOQ, ULOQ. | Output |
| Results, A35 | Native scatter chart plotting standards, fitted sigmoidal curve, and upper/lower confidence bands. | Output |
| Curve, A4:D54 | Grid of 50 concentration values spanning the calibration range feeding the Results chart. | Output |
| Validation, A4:G13 | Independent method benchmarks: scipy curve_fit comparisons (unweighted and 1/y^2 weighted), synthetic recovery, 5PL/4PL equivalence, round-trip interpolation, and blank subtraction. | Output |
| Guide, A4:B10 | Step-by-step instructions for adapting the template to laboratory SOPs, changing units, and multi-plate runs. | Authored reference |
Using the template
1. Enter calibration standards
- Navigate to the Standards sheet.
- Enter calibration standard names (Std 1 to Std 8), nominal concentrations in pg/mL, and duplicate OD readings in columns C and D.
- Enter
0for the nominal concentration of the blank well (labeledBlank). - The table on the right computes Mean OD, Net OD (blank-subtracted), Back-calculated conc., and % Recovery against the nominal value. Standards with recovery outside the acceptance window flag as
Outside window.
2. Configure defaults
- Open the Defaults sheet.
- Select cell B5 (Curve model) to choose between
4PL(standard symmetric logistic) and5PL(asymmetric Richards logistic). - Select cell B6 (Weighting) to choose between
None(ordinary unweighted least squares) and1/y^2(relative weighting proportional to \(1/\text{OD}^2\)). - Select cell B7 (Subtract blank) to toggle automatic subtraction of the zero-standard OD from all measurements.
- Review or modify statistical thresholds: Confidence level (default 0.95), Duplicate CV limit (%) (default 15%), Recovery window min/max (%) (default 80% to 120%), and Fit outlier threshold (default 3.0 SD).
3. Enter unknown samples
- Navigate to the Unknowns sheet.
- Enter sample identifiers, dilution factors (any positive number; non-integers allowed, e.g. 2.5), and duplicate OD readings in columns A through D.
- Inspect columns F through O. Samples within the quantifiable range display Conc. in well, Dilution-corrected conc., standard error, and confidence bounds.
- Samples with duplicate %CV exceeding the configured limit flag as
high CV. Single-well samples receive the flagsingle replicate(with blank %CV). Samples with missing, non-numeric, zero, or negative dilution factors flag asinvalid dilution factorand suppress concentration reporting. Samples outside the assay quantitation boundaries flag asbelow LLOQorabove ULOQand suppress concentration reporting to prevent unvalidated extrapolation.
4. Review results and acceptance checks
- On the Results sheet, inspect the fitted curve parameters (Bottom, Top, EC50, Hill slope, and Asymmetry g if 5PL) along with standard errors and confidence intervals.
- Verify that the Acceptance checks show PASS for \(R^2 \ge 0.99\), standard recovery, and number of standards.
- Inspect the native scatter chart on the Results sheet to visually confirm curve fit concordance across the dilution ladder.
Inputs and settings
Standards (A5:D30): - Standard: Alphanumeric identifier (e.g. Std 1 to Std 8, Blank). - Nominal conc. (pg/mL): Prepared standard concentration in pg/mL. The blank well must be entered with a nominal concentration of 0. - OD well 1, OD well 2: Measured absorbance (optical density) at 450 nm for duplicate microplate wells.
Defaults (A5:D12): - Curve model (B5): 4PL (default) or 5PL. - Weighting (B6): None (default) or 1/y^2. - Subtract blank (B7): Yes (default) or No. - Confidence level (B8): Two-sided confidence level for intervals (default 0.95). - Duplicate CV limit (%) (B9): Acceptance threshold for duplicate well precision (default 15%). - Recovery window min (%) (B10): Lower acceptable standard recovery limit (default 80%). - Recovery window max (%) (B11): Upper acceptable standard recovery limit (default 120%). - Fit outlier threshold (B12): Standardized residual threshold (default 3.0 SD) to flag outlier wells.
Unknowns (A5:D36): - Sample ID: Alphanumeric sample identifier. - Dilution factor: Positive number indicating sample pre-dilution (e.g. 1 for undiluted, 2.5 for 1:2.5 dilution, 20 for 1:20 dilution; non-integers allowed). Non-positive or invalid dilution factors trigger an invalid dilution factor flag and suppress reported concentration. - OD well 1, OD well 2: Measured optical densities for duplicate test wells.
How results are calculated
Blank subtraction: When enabled, mean blank optical density is computed: \[\bar{y}_{\text{blank}} = \frac{y_{\text{blank}, 1} + y_{\text{blank}, 2}}{2}\] Net optical density for every standard and unknown well is: \[y_{\text{net}} = y_{\text{raw}} - \bar{y}_{\text{blank}}\]
Nonlinear least squares fitting: The model is fitted on \(\log_{10}\) concentration \(x = \log_{10}(C)\) using bounded multi-start trust-region least squares (scipy
curve_fit) followed by Gauss-Newton refinement: \[\text{RSS} = \sum_{i} \left(\frac{y_i - f(x_i, \mathbf{\theta})}{\sigma_i}\right)^2\] For unweighted fits, \(\sigma_i = 1\). For \(1/y^2\) weighting, \(\sigma_i = \max(\lvert y_i \rvert, \sigma_{\text{floor}})\) with \(\sigma_{\text{floor}} = f_{\text{floor}} \cdot \max(\max_i \lvert y_i \rvert, 10^{-3})\), where \(f_{\text{floor}}\) is 1% (WEIGHTING_SIGMA_FLOOR_FRAC = 0.01). The floor stops near-zero net ODs from dominating the weighted fit.Quantifiable range (LLOQ and ULOQ): Standard percent recovery is computed for each non-zero standard: \[\% \text{Recovery} = 100\% \times \frac{\hat{C}_{\text{back}}}{C_{\text{nominal}}}\] Standards with recovery between 80% and 120% define the quantifiable range: \[\text{LLOQ} = \min \{ C_i : 80\% \le \text{Recovery}_i \le 120\% \}\] \[\text{ULOQ} = \max \{ C_i : 80\% \le \text{Recovery}_i \le 120\% \}\]
Unknown interpolation & delta-method intervals: For an observed net optical density \(y_0\), concentration \(x_0 = \log_{10}(C_0)\) is obtained by closed-form inversion of the 4PL or 5PL equation. Delta-method variance on the \(\log_{10}\) scale incorporates both parameter covariance \(V\) and replicate measurement variance: \[\mathrm{Var}(x_0) = \frac{\mathbf{J}(x_0)^T V \mathbf{J}(x_0) + \frac{(s_{y.x} \sigma(y_0))^2}{m}}{(f'(x_0))^2}\] where \(m\) is the number of replicate wells and \(f'(x_0) = \frac{\partial f}{\partial x}\) is the analytical slope at \(x_0\). The weight scale \(\sigma(y_0)\) is \(1\) for unweighted fits. For \(1/y^2\) weighting it is \(\sigma(y_0) = \max(\lvert y_0 \rvert, \sigma_{\text{floor}})\), using the same \(\sigma_{\text{floor}}\) as the fit (step 3), so the unknown’s variance is on the same scale as the fitted residuals. Back-transformation to concentration yields asymmetric confidence bounds: \[C_{\text{low}} = 10^{x_0 - t_{\text{crit}} \sqrt{\mathrm{Var}(x_0)}}, \quad C_{\text{high}} = 10^{x_0 + t_{\text{crit}} \sqrt{\mathrm{Var}(x_0)}}\] Dilution-corrected concentration scales by dilution factor \(D\): \(C_{\text{reported}} = D \cdot C_0\).
Reading the results
Parameters table (Results A4:E9): - Bottom (OD): Lower plateau baseline absorbance. - Top (OD): Upper plateau saturation absorbance. - EC50 (pg/mL): Half-maximal effective concentration (\(10^{\log_{10}\text{EC50}}\)) with asymmetric back-transformed confidence bounds. - Hill slope: Slope factor describing curve steepness. - Asymmetry (g): Richards asymmetry exponent (5PL only; \(g=1\) is symmetric 4PL).
Acceptance checks (Results A12:B16): - Fit R-squared >= 0.99: Verifies overall curve fit fidelity. - Standard recovery (>= 75% in window): Verifies that at least 75% of calibration standards meet the recovery acceptance window (a template choice; configurable via RECOVERY_PASS_FRACTION). - Number of standards >= 6: Verifies sufficient calibration levels across the dynamic range. - Unknowns inside quantifiable range: Confirms whether all test samples fall within [LLOQ, ULOQ]. Flags FAIL if any unknown sample requires re-dilution.
Unknowns table (Unknowns F4:O16): - Conc. in well (pg/mL): Direct interpolated concentration in the microplate well. - Dilution-corrected (pg/mL): Final sample concentration accounting for pre-dilution. - Flags: below LLOQ (sample below lower quantitation limit; do not extrapolate), above ULOQ (sample above upper quantitation limit; re-assay at higher dilution), high CV (duplicate well %CV exceeds limit), single replicate (only one replicate well tested; %CV left blank), invalid dilution factor (dilution factor is missing, non-numeric, zero, or negative; concentration suppressed).
Saving, sharing and App mode
- Saving: Save normally as an
.xlsxworkbook. All entered standards, settings, and calculated results persist with the workbook. - Sharing: Share with colleagues who have Python for Excel enabled. The calculation runs locally and deterministically.
- App mode: In App mode, non-technical users interact exclusively with the grid (Standards, Defaults, Unknowns, and Results) while the Python notebook executes in the background.
Errors, empty states and limits
- Minimum standards: At least 6 distinct non-zero calibration standards and 5 usable observations are required. Fewer standards produce a clear guard message (
Too few standards). - Decreasing response guard: The template assumes optical density increases with analyte concentration (sandwich ELISA; Hill slope > 0). If standard optical densities decrease overall, the curve fit halts with a clear guard message (
Decreasing response: template requires sandwich ELISA format). - Non-numeric rows: Blanks or non-numeric entries in replicate wells are skipped safely without interrupting the fit.
- Invalid dilution factors: A dilution factor that is missing, non-numeric, zero, or negative is flagged as
invalid dilution factorand concentration calculation is suppressed. - Single replicate wells: If a sample has only one replicate reading, the %CV is left blank and flagged as
single replicate. - Out of range samples: Test samples with absorbance outside the calibration asymptotes or outside [LLOQ, ULOQ] suppress numeric concentration reporting and display diagnostic flags.
Limitations and when to use this
- Static plate layouts: Well-position spatial drift, edge effects, and temperature gradients across 96-well plates are not modeled.
- Single analyte: Designed for single-analyte microplate assays. Multiplex array assays (such as Luminex or Meso Scale Discovery) require individual curve fitting per analyte channel.
- One plate per workbook: The template models one 96-well plate per workbook to preserve independent calibration curves and quantitation limits. To analyze multiple plates, save a copy of the workbook for each plate.
- Configurable acceptance criteria: The 80–120% recovery window and 15% duplicate %CV limit are conventional in-house starting points, not regulatory mandates. Adjust the Defaults sheet to match your assay’s specific SOP acceptance criteria.
Free alternatives
Free alternative: the ConductScience ELISA fitter (free, browser-based) fits a four-parameter logistic curve. This workbook keeps the 4PL/5PL fit in Excel, back-calculates unknowns, and adds acceptance checks.
Developer reference
Notebook implementation
The notebook imports boardflare and standard scientific libraries (numpy, pandas, scipy.optimize, scipy.stats). Input ranges are bound in a single reactive call:
inputs = bf.inputs(
standards=bf.ref("Standards!A4:D30", headers=True),
defaults=bf.ref("Defaults!A4:B20", headers=True),
unknowns=bf.ref("Unknowns!A4:D36", headers=True),
overflow="Standards!A31",
)The fit executes weighted nonlinear regression via FOUR_PL or FIVE_PL. Analytical inversion evaluates sample concentrations, and publication maps seven distinct outputs:
publication = bf.publish(
outputs={
"standards": standards_table,
"unknowns": unknowns_table,
"results": results_table,
"checks": checks_table,
"statistics": statistics_table,
"curve": curve_table,
"validation": validation_table,
}
)How the calculation/model works
The five-parameter logistic function: \[y = \text{Bottom} + \frac{\text{Top} - \text{Bottom}}{\left(1 + 10^{(\log_{10}\text{EC50} - x) \cdot \text{Hill}}\right)^g}\]
Analytic Jacobian derivatives are evaluated for parameters \((\text{Bottom}, \text{Top}, \log_{10}\text{EC50}, \text{Hill}, g)\), and the covariance matrix is derived from: \[\mathbf{V} = s_{y.x}^2 (\mathbf{J}^T \mathbf{W} \mathbf{J})^{-1}\]
Closed-form inversion for 4PL (\(g=1\)): \[x_0 = \log_{10}\text{EC50} - \frac{1}{\text{Hill}} \log_{10}\left(\frac{\text{Top} - y_0}{y_0 - \text{Bottom}}\right)\]
Closed-form inversion for 5PL: \[x_0 = \log_{10}\text{EC50} - \frac{1}{\text{Hill}} \log_{10}\left(\left(\frac{\text{Top} - \text{Bottom}}{y_0 - \text{Bottom}}\right)^{1/g} - 1\right)\]
Validation / expected results
The baseline evaluation with shipping example data produces: - Bottom (OD): \(0.0089\) (SE: \(0.0065\), 95% CI: \(-0.0053\) to \(0.0230\)) - Top (OD): \(2.9441\) (SE: \(0.0123\), 95% CI: \(2.9172\) to \(2.9710\)) - EC50: \(59.2664\ \text{pg/mL}\) (SE: \(0.7448\), 95% CI: \(57.6657\) to \(60.9116\); the interval is computed on the \(\log_{10}\) scale and back-transformed, so it is asymmetric around the EC50) - Hill slope: \(1.1204\) (SE: \(0.0145\), 95% CI: \(1.0887\) to \(1.1520\)) - Goodness of fit: \(R^2 = 0.9999\), Residual SE \(s_{y.x} = 0.0122\). - Quantifiable range: LLOQ = \(1.37\ \text{pg/mL}\), ULOQ = \(1000.00\ \text{pg/mL}\). - Validation sheet: All 9 independent implementation, synthetic parameter recovery, and internal consistency checks report PASS.
Changelog
2026-10-26 (Issue #236)
- Built new hand-crafted ELISA standard curve field workbook (
tier: field-workbook), supporting both 4PL and 5PL regression. - Implemented engine model
FIVE_PL(Richards / Gottschalk-Dunn asymmetry) with analytic Jacobian, multi-start bounded solver, and unit tests. - Added Standards sheet with duplicate well input, blank subtraction toggle, back-calculation, and recovery evaluation.
- Added Unknowns sheet supporting dilution factors, duplicate %CV calculation, quantifiable range gating, and delta-method confidence bounds.
- Added Results sheet with curve parameter table, acceptance checks, fit statistics, LLOQ/ULOQ range summary, and native scatter chart.
- Added Validation sheet with 9 reference checks verifying 4PL, 5PL, 1/y^2 weighted fit, synthetic parameter recovery, blank subtraction, and round-trip interpolation.
- Added in-workbook Modification Guide for assay adaptation.