New to Claude Skills? Learn how to install them →

mims-harvard on GitHub

Dose-Response Analysis

Free

Efficiently analyze concentration-response data for potency.

Get this skill

Free · Opens the source repo

What Dose-Response Analysis does

The Dose-Response Analysis skill provides a robust method for fitting concentration-response data to extract key pharmacological parameters such as IC50, EC50, Hill slope, Emax, and Emin. This skill is particularly useful for researchers and developers working in pharmacology, biochemistry, and related fields where understanding drug potency and efficacy is critical. By applying the 4-parameter logistic (4PL) model, users can derive meaningful insights from their experimental data, allowing for the comparison of compound potencies and the assessment of curve quality.

To get started, users need to prepare their data carefully, ensuring that concentration units are consistent and that the data spans both plateaus of the response curve. The skill requires at least four data points to generate reliable results. Once the data is ready, users can execute commands to calculate IC50 or EC50 values, fit curves, and compare the potency of different compounds. The skill also includes guidance on interpreting the results, including the significance of the Hill slope and the quality of the fit, which are crucial for drawing accurate conclusions from the analysis.

This skill is ideal for laboratory scientists conducting enzyme inhibition studies, cell viability assays, or pharmacological evaluations. It streamlines the process of data analysis, enabling users to focus on interpreting results rather than getting bogged down in the complexities of curve fitting. However, it is important to note that this skill is not suitable for analyzing image-derived dose-response data or for survival analysis; users should refer to other tools in the tooluniverse for those needs.

When to use it

Use this skill when you have paired concentration and response data from assays and need to derive potency values such as IC50 or EC50.

When not to use it

This skill is not suitable for image-derived data or survival analysis; consider other tools for those scenarios.

What you can build with it

Enzyme Inhibition Assays

Use this skill to analyze data from enzyme inhibition assays and determine the IC50 values for various compounds.

Cell Viability Testing

Apply the skill to cell viability data to calculate EC50 values and assess the efficacy of different treatments.

Pharmacological Comparisons

Utilize the potency comparison feature to evaluate the relative effectiveness of two pharmacological agents.

How to install Dose-Response Analysis

View source

1. Install with the skills CLI

npx skills add mims-harvard/tooluniverse/tooluniverse-dose-response --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by mims-harvard

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.
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.

Frequently asked questions about Dose-Response Analysis

Similar skills