Back to the Index

Reference

Statistical Methods

Gradiance uses industry-standard algorithms to ensure your results are accurate, reproducible, and publication-ready.

Non-Linear Regression

For dose-response analysis, we utilize the Levenberg-Marquardt algorithm for iterative non-linear least squares minimization. This is the gold standard for fitting 4PL and 5PL models.

The 4PL Equation

Y = Bottom + (Top - Bottom) / (1 + 10^((LogIC50 - X) * HillSlope))

Where X is the log of concentration, Y is the response, and HillSlope describes the steepness of the curve.

Weighting

Biological data often exhibits heteroscedasticity (variance increases with signal). Gradiance supports 1/Y² weighting to correctly prioritize lower-signal data points, which is crucial for accurate IC₅₀ determination in many assays.

Outlier Detection

We employ the ROUT method for identifying robust outliers from non-linear regression. This allows us to automatically flag data points that deviate significantly from the expected model without manually cherry-picking data.

IC₅₀: relative vs absolute

The IC50 parameter in a 4PL fit is, by convention, the relative IC₅₀ — the concentration at the midpoint between the fitted top and bottom asymptotes. When a curve's lower asymptote sits well above zero (e.g. when the lowest doses already produce meaningful inhibition), this differs from the absolute IC₅₀ that most papers and regulatory submissions report — namely the concentration where response actually crosses 50 %.

Gradiance reports the absolute IC₅₀ as the headline whenever the two diverge by >10 %, computed by linear interpolation in log-concentration space on the raw data, and surfaces the relative IC₅₀ alongside as a secondary parameter with an explanatory note.

Validation against published data

We re-ran the dose-response, enzyme-kinetics, and standard-curve datasets from a peer-reviewed 2026 xanthine-oxidase study (Li et al., Zenodo 10.5281/zenodo.19378973) end-to-end through Gradiance and compared against both the published values and an independent scipy fit:

AssayParameterPaperGradianceΔ
Allopurinol IC₅₀IC₅₀ (µg/mL)2.472.460.4 %
Alcalase YFP IC₅₀IC₅₀ (mg/mL)0.600.591.4 %
SRGQIEEL IC₅₀IC₅₀ (µg/mL)180178.40.9 %
XO Michaelis–MentenVmax (µM/min)6.1126.1370.4 %
XO Michaelis–MentenKm (µM)9.91510.041.3 %

Every fit matched scipy.optimize.curve_fit to four decimal places, and matched the paper to within ~1.4 %.

Allopurinol — IC₅₀ (absolute) = 2.46 µg/mL · paper 2.47 · R² = 0.983
Allopurinol — IC₅₀ (absolute) = 2.46 µg/mL · paper 2.47 · R² = 0.983
Xanthine oxidase — Vmax 6.137 µM/min · Km 10.04 µM · paper 6.112 / 9.915
Xanthine oxidase — Vmax 6.137 µM/min · Km 10.04 µM · paper 6.112 / 9.915
ELISA linear standard curve · R² = 0.9995
ELISA linear standard curve · R² = 0.9995
qPCR ΔΔCt — Treated 1.43-fold over Control (n = 15 each)
qPCR ΔΔCt — Treated 1.43-fold over Control (n = 15 each)