Bioanalytical data science · Python

ELISA Analysis Pipeline

A tested, end-to-end pipeline that turns raw 96-well plate-reader data from sandwich ELISAs into quality-controlled analyte concentrations, statistical comparisons between treatment groups, and an audit-ready report.

The app runs entirely in your browser (Python compiled to WebAssembly). The first load takes about 30 seconds while the scientific Python stack downloads.

135
automated tests · 97% coverage
< 8%
median error recovering simulated ground truth
2
public real-world datasets re-analysed
0
servers needed for the live app
The live app showing plate QC results for the demo study

What it does

Each stage is a documented module with the scientific reasoning in its docstrings.

Parse & validate platesBlank subtraction Weighted 4PL / 5PL fit (AICc)Back-calculation Outliers · %CV · recoveryLOD / LLOQ / ULOQ Controls & plate pass/failDilution linearity Inter-plate normalizationWelch / Mann-Whitney / ANOVA · BH-FDR HTML report

Outputs

Standard curve with quantifiable range and residuals
Weighted 4PL fit, validated quantification range, LOD, and weighted residuals.
IL-6 by treatment group
Group comparison with Holm-adjusted significance. Hollow points are censored values.
Bridge controls before and after normalization
Bridge controls before and after inter-plate normalization (IL-6 control CV ~25% → ~5%).
Plate map heatmap
Raw-OD plate map. Edge effects and pipetting gradients show up here.

Real data, honest conclusions

Notebook · biology Serum IL-6 after sleep fragmentation A re-analysis of a published mouse study (Dryad, CC0).
  • The original straight-line calibrations recover standards at 28–142%. The weighted 4PL recovers 94–102%.
  • 100 / 110 samples fall below the LLOQ.
  • A labelled sensitivity analysis still reproduces the IL-6 rise at 6, 12 and 24 h.
Notebook · QC SoftMax Pro plates across two kit lots Five real plates (ELISAtools, MIT).
  • Rule-based outlier QC matches the analyst on 4 / 4 wells, and exposes 13 discretionary masks.
  • A shared control reveals a ~30% kit-lot shift, which normalization corrects.

Reports

Self-contained HTML, regenerated from the code on every deploy.

SimulatedDemo study Two cytokines, three treatment groups, four plates with calibrator bias, edge effects and outlier wells. Real dataMouse IL-6 Four plates and 110 samples, with plate acceptance, censoring and flags. Real dataSoftMax plates Triplicate QC and kit-lot normalization.

Built with

Python 3.11–3.13NumPypandas SciPy (curve_fit)statsmodelsmatplotlib Streamlitstlite / Pyodide (WebAssembly) pytestruffGitHub ActionsGitHub Pages