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 dataConfirm → 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 run doseresponse_drc.R top 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®

ParameterEstimateSE95 % CI
Lower asymptote0.26230.1080[0.0345, 0.4901]
Upper asymptote7.73590.1276[7.4666, 8.0052]
EC503.19630.1069[2.9709, 3.4218]
Slope-2.32940.1708[-2.6897, -1.9691]

R

ParameterEstimateSE95 % CI
Lower asymptote0.26230.1062
Upper asymptote7.73590.1312
EC503.19630.1081[2.9698, 3.4229]
Slope2.32940.1725

R values: verified in R 4.5.2 (see the verdict).

doseresponse_4pl data -- fit statistics

MinutePlot®

Residual SEResidual df
0.99560.221917

R

Residual SEResidual df
0.221917

R values: verified in R 4.5.2 (see the verdict).

ryegrass data, all 24 observations -- fitted parameters (slope compared by magnitude)

MinutePlot®

ParameterEstimateSE95 % CI
Lower asymptote0.48140.2095[0.0444, 0.9184]
Upper asymptote7.79300.1897[7.3972, 8.1887]
EC503.05800.1858[2.6703, 3.4456]
Slope-2.98220.4584[-3.9385, -2.0260]

R

ParameterEstimateSE95 % CI
Lower asymptote0.48140.2122
Upper asymptote7.79300.1886
EC503.05800.1857[2.6705, 3.4454]
Slope2.98220.4651

R values: verified in R 4.5.2 (see the verdict).

ryegrass data, all 24 observations -- fit statistics

MinutePlot®

Residual SEResidual df
0.97830.519620

R

Residual SEResidual df
0.519620

R values: verified in R 4.5.2 (see the verdict).

Verdict

doseresponse_4pl data: lower asymptote 0.2623, upper 7.7359, EC50 3.1963 [2.9698, 3.4229], slope 2.3294 in magnitude, residual SE 0.2219 on 17 df -- identical to R’s drc::drm(LL.4). ryegrass data, all 24 observations: lower 0.4814, upper 7.7930, EC50 3.0580 [2.6703, 3.4456], slope 2.9822, residual SE 0.5196 on 20 df -- identical to drc; parameter SEs differ in the second decimal as the Setup explains.

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.

R values verified in R 4.5.2 (emmeans 2.0.4, multcomp 1.4-32, multcompView 0.1-12, ez 4.5.0, Hmisc 5.3.0, pls 2.9.0, drc 3.0-1, car 3.1-5) on 16–17 September 2026.