Skip to content
cccskills
FreePublished on GitHub

tooluniverse-dose-response

Dose-response / concentration-response curve fitting — IC50, EC50, Hill slope, Emax/Emin efficacy, and relative potency from paired concentration vs response data (enzyme/cell assays, drug screening, agonist/antagonist pharmacology). Fits the 4-parameter logistic (Hill sigmoidal) model. Use when you have concentrations + responses and need a potency value, to compare two compounds' potency, or to judge curve quality. NOT for image-derived dose-response (use tooluniverse-image-analysis) and NOT for survival/regression (use tooluniverse-statistical-modeling).

The English summary is being prepared. Showing the original description.

See how to install

Files included (3)

  • SKILL.md6.1 KB
  • scripts/fit_dose_response.py3.9 KB
  • test_fit_dose_response.py1.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Dose-Response / Concentration-Response Analysis

Turn paired concentration vs response measurements into a potency (IC50/EC50), a Hill slope, an efficacy (Emax), and a quality judgment — and compare potency between compounds.

When to use this

  • Enzyme inhibition / activation assays, cell viability, reporter assays, radioligand binding, agonist/antagonist pharmacology.
  • You have a list of concentrations and the response at each, and want IC50/EC50 + Hill slope.
  • You want to say "compound A is N-fold more potent than B."

The model is the 4-parameter logistic (4PL) / Hill sigmoidal: f(x) = Emin + (Emax − Emin) / (1 + (EC50/x)^n) — where n is the Hill slope.

Step 1 — Prepare the data (where results go wrong)

IssueWhat to do
Concentration unitsPick ONE unit (µM, nM, M) and use it for every point. The IC50 comes back in that unit. Don't mix.
Log vs linear concentrationsPass concentrations on the linear scale (e.g. 0.01, 0.1, 1, 10), not log10. The fitter logs internally.
Zero/control concentrationDrop a literal 0 concentration (log(0) is undefined). Keep it only as the Emin/Emax reference if normalizing.
DirectionInhibition curves go high→low (IC50); activation curves go low→high (EC50). The tools handle both; just be consistent.
NormalizationConvert raw signal to % of control if you want Emax/Emin near 100/0: % = 100 × (raw − blank)/(control − blank). Raw values also fit, but plateaus are then in raw units.
ReplicatesAverage technical replicates per concentration before fitting, or pass all points (the fit weights them equally).

Coverage requirement: you need ≥4 points (the tools require it) and ideally 6–8 spanning both plateaus — points clearly above and clearly below the inflection. A curve that never plateaus gives an unreliable, extrapolated IC50 (see Step 4).

Step 2 — Fit / get the potency

Single curve → IC50 or EC50 (same math; "IC50" for inhibition, "EC50" for activation):

tu run DoseResponse_calculate_ic50 '{"operation":"calculate_ic50",
  "concentrations":[0.001,0.01,0.1,1,10,100],
  "responses":[98,95,80,45,12,3]}'

Returns ic50, ic50_95_confidence_interval, hill_slope, emax, emin, r_squared, log_ic50.

Full 4PL parameters only → DoseResponse_fit_curve (same inputs). Two compounds → DoseResponse_compare_potency with conc_a/resp_a/conc_b/resp_b (returns each IC50 + ic50_fold_shift_b_over_a + more_potent).

For non-standard needs (constrained plateaus, weighting, plotting), scripts/fit_dose_response.py runs a scipy 4PL fit from a CSV and matches the tool.

Step 3 — Interpret the four parameters

ParameterMeaningSanity check
IC50 / EC50Concentration giving half-maximal effect — the potency. Lower = more potent.Should fall within your tested range; if it's at/beyond an endpoint, the curve is incomplete (Step 4).
Hill slope nSteepness / apparent cooperativity. ~1 = simple one-site. >1.5 = steep/positive cooperativity (or non-specific). <0.5 = shallow/multiple sites or heterogeneity.A wildly large `
EmaxMaximal response (top plateau) = efficacy.For % data, full agonist ≈100; a partial agonist plateaus well below 100 even at saturating dose.
EminBottom plateau (baseline/floor).For % inhibition data, ≈0 for a complete inhibitor.
r²Fit quality.≥0.95 good; <0.90 → inspect for outliers, wrong model, or incomplete curve before trusting the IC50.

Potency comparison: report the fold-shift in IC50/EC50 (e.g. "A is 6.2× more potent than B"), and only call it meaningful if both fits are good (r²≥0.95) and the Hill slopes are comparable — a potency ratio between curves of very different slope is not a clean comparison.

Step 4 — Quality gotchas (state these, don't hide them)

  • Incomplete curve / no plateau. If responses don't flatten at both ends, Emax/Emin (and thus IC50) are extrapolated and unstable. Report the IC50 as "approximate / right-shifted of the tested range" and recommend wider concentrations.
  • <4–5 points or none near the inflection. The fit can converge to a nonsense IC50 with a high r². Check that points actually bracket the IC50.
  • Biphasic / U-shaped data. A single 4PL is wrong for hormesis or two-site behavior — the fit will look poor (low r²); flag it rather than forcing one IC50.
  • IC50 vs Ki. IC50 depends on assay conditions (substrate/ligand concentration). Don't report IC50 as an affinity (Ki) without a Cheng-Prusoff correction.
  • Units. The IC50 is only as correct as the concentration unit you fed in — always state the unit.

Honest limitations

  • 4PL assumes a monotonic sigmoid; it cannot describe biphasic, bell-shaped, or steep all-or-none responses.
  • A confident IC50 from a poor or incomplete curve is the most common error — let r² and curve coverage gate how you report it.
  • Potency (IC50/EC50) is not efficacy (Emax) — a more potent compound can be a weaker (partial) agonist; report both.

Related skills

  • tooluniverse-image-analysis — dose-response on image-derived measurements (.tif, colony, fluorescence).
  • tooluniverse-gpcr-structural-pharmacology / tooluniverse-network-pharmacology — receptor pharmacology context.
  • tooluniverse-statistical-modeling — general regression, EC50 via spline, power analysis.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Simplest distributed training API. 4 lines to add distributed support to any PyTorch script. Unified API for DeepSpeed/FSDP/Megatron/DDP. Automatic device placement, mixed precision (FP16/BF16/FP8). Interactive config, single launch command. HuggingFace ecosystem standard.

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

ADMET property prediction for drug candidates. Full pharmacokinetic panel (Caco-2, PPB, clearance, CYP), toxicity (hERG, AMES, DILI), drug-likeness (Lipinski, QED), using RDKit descriptors and TDC models.

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

Interpretable ADMET analysis with mechanistic reasoning. Maps liabilities to structural causes and biological pathways. Based on CoTox (Park 2025) and DrugR (Liu 2026).

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

aeon

Free

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

Infer gene regulatory networks (GRNs) from gene expression data using scalable algorithms (GRNBoost2, GENIE3). Use when analyzing transcriptomics data (bulk RNA-seq, single-cell RNA-seq) to identify transcription factor-target gene relationships and regulatory interactions. Supports distributed computation for large-scale datasets.

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

Comprehensive Python library for astronomy and astrophysics. This skill should be used when working with astronomical data including celestial coordinates, physical units, FITS files, cosmological calculations, time systems, tables, world coordinate systems (WCS), and astronomical data analysis. Use when tasks involve coordinate transformations, unit conversions, FITS file manipulation, cosmological distance calculations, time scale conversions, or astronomical data processing.

The English summary is being prepared. Showing the original description.

huang-sh/DeepScience4Updated Jul 15, 2026

See all skills by huang-sh

Report a problem with this skill