Dose-response regression
MinutePlot® and R on the same data. MinutePlot version 1.0.0; R 4.5.2.
Dataset
- doseresponse_4pl (generated) — Two datasets: a generated set of 7 positive doses (0.47 to 30, doubling) × 3 replicates on a decreasing four-parameter logistic curve with noise (fixed seed), and drc’s ryegrass -- root length of ryegrass at 7 concentrations of ferulic acid (0 to 30 mM), 24 observations (Inderjit et al. 2002).
- Data file (the same format serves MinutePlot and R): doseresponse_4pl.csv and ryegrass.csv — one column per variable; paste it into the app, and keep it in the R script’s folder.
- ryegrass is R built-in (drc); doseresponse_4pl is generated.
Setup
In MinutePlot:
- Workbench → Regression → paste doseresponse_4pl.csv (dose, response) or ryegrass.csv (conc, rootl) → Preview data → Confirm → model 4PL (dose-response) → Fit model.
- Zero-dose rows stay in the fit (ryegrass: all 24 rows). No sample-name column, no groups.
In R:
- Install once:
install.packages(c("drc")); then rundoseresponse_drc.Rtop to bottom (source it, or paste it into the console) with the R data file in the same folder. - R 4.5.2 and the package versions in the page header; each script prints the versions it runs under.
The analysis:
- Four-parameter logistic (MinutePlot: 4PL, fitted by nonlinear least squares on the dose scale; parameters lower asymptote, upper asymptote, EC50 -- the half-maximal dose, which R’s drc labels ED50 in its output -- and slope). R reference: drc::drm with fct = LL.4 -- the four-parameter log-logistic, the same curve family; the slope parameter’s sign convention differs (drc’s b is positive for a decreasing curve), so slopes are compared by magnitude.
- Fit statistics as MinutePlot reports them: R², residual standard error, residual df.
- Standard errors: the two implementations parameterise the logistic curve differently, and in a nonlinear fit the standard errors (and hence the confidence intervals) depend on the parameterisation; the point estimates, the fitted curve and the residual fit agree exactly, and the small differences in the parameter SEs are expected, not a discrepancy.
- Zero-dose (untreated control) observations are included in the fit: the curve is evaluated on the dose scale, so dose 0 lies on the upper plateau of a decreasing curve (the lower plateau of an increasing one), as in drc’s LL.4; ryegrass is fitted on all 24 observations on both sides. This needs build 196 or later -- an earlier app (including the installer built from build 186) drops the six zero-dose rows and fits 18 observations, giving EC50 2.99 instead of 3.06.
Side-by-side results
doseresponse_4pl data -- fitted parameters (slope compared by magnitude)
MinutePlot®
| Parameter | Estimate | SE | 95 % CI |
|---|---|---|---|
| Lower asymptote | 0.2623 | 0.1080 | [0.0345, 0.4901] |
| Upper asymptote | 7.7359 | 0.1276 | [7.4666, 8.0052] |
| EC50 | 3.1963 | 0.1069 | [2.9709, 3.4218] |
| Slope | -2.3294 | 0.1708 | [-2.6897, -1.9691] |
R
| Parameter | Estimate | SE | 95 % CI |
|---|---|---|---|
| Lower asymptote | 0.2623 | 0.1062 | — |
| Upper asymptote | 7.7359 | 0.1312 | — |
| EC50 | 3.1963 | 0.1081 | [2.9698, 3.4229] |
| Slope | 2.3294 | 0.1725 | — |
R values: verified in R 4.5.2 (see the verdict).
doseresponse_4pl data -- fit statistics
MinutePlot®
| R² | Residual SE | Residual df |
|---|---|---|
| 0.9956 | 0.2219 | 17 |
R
| R² | Residual SE | Residual df |
|---|---|---|
| — | 0.2219 | 17 |
R values: verified in R 4.5.2 (see the verdict).
ryegrass data, all 24 observations -- fitted parameters (slope compared by magnitude)
MinutePlot®
| Parameter | Estimate | SE | 95 % CI |
|---|---|---|---|
| Lower asymptote | 0.4814 | 0.2095 | [0.0444, 0.9184] |
| Upper asymptote | 7.7930 | 0.1897 | [7.3972, 8.1887] |
| EC50 | 3.0580 | 0.1858 | [2.6703, 3.4456] |
| Slope | -2.9822 | 0.4584 | [-3.9385, -2.0260] |
R
| Parameter | Estimate | SE | 95 % CI |
|---|---|---|---|
| Lower asymptote | 0.4814 | 0.2122 | — |
| Upper asymptote | 7.7930 | 0.1886 | — |
| EC50 | 3.0580 | 0.1857 | [2.6705, 3.4454] |
| Slope | 2.9822 | 0.4651 | — |
R values: verified in R 4.5.2 (see the verdict).
ryegrass data, all 24 observations -- fit statistics
MinutePlot®
| R² | Residual SE | Residual df |
|---|---|---|
| 0.9783 | 0.5196 | 20 |
R
| R² | Residual SE | Residual df |
|---|---|---|
| — | 0.5196 | 20 |
R values: verified in R 4.5.2 (see the verdict).
Verdict
MinutePlot values from the current build (zero-dose controls join the fit with build 196); the R side is unchanged and is to be re-confirmed side by side after deployment.
R script
doseresponse_drc.R — each script loads its data, prints its versions and the R-side tables shown above, in page order; no plotting.