{
  "about": {
    "fixture": "Oracle fits for the 33 synthetic curves and the worked MTT example, the rules that decide what is shown, Z' and F-tests by hand (brief sections 4.3 and 5.4)",
    "ruling": "CSO ruling, 6 October 2026 (items 6 to 9): Wald, profile, the not-determinable rules, 1/Y^2 weighting and Z'; with the CSO's confirmation of the same day (items 1, 2, 4, 5 and 8): no finite minimum, C32 and C33, direct minimisation under weighting, the bend-point constant and the weighted flat line",
    "generatedBy": "pipeline/assay-analyser/reference.R",
    "scriptSha256": "912ea05cabc1bd2ddccee30bc815ee09defd3b505ab717c10c4cbfdbc39420f7",
    "recordedOn": "2026-10-06",
    "r": "R version 4.3.3 (2024-02-29)",
    "packages": [
      {
        "name": "drc",
        "version": "4.0-0",
        "licence": "GPL-2"
      },
      {
        "name": "MASS",
        "version": "7.3-60.0.1",
        "licence": "GPL-2 | GPL-3"
      },
      {
        "name": "jsonlite",
        "version": "1.8.8",
        "licence": "MIT + file LICENSE"
      }
    ],
    "platform": "x86_64-pc-linux-gnu",
    "inputs": {
      "syntheticCurves": {
        "file": "pipeline/assay-analyser/fixtures/synthetic-curves.json",
        "sha256": "6b564a434829d9250f230bbc5fe6dd552e69819422af490b2693931d57e0928a"
      },
      "mttExample": {
        "file": "pipeline/assay-analyser/fixtures/mtt-example.json",
        "sha256": "50029b58c869ecb47767215f6b6ba9b54ef33575a77dcd1044cf2c6b3c2a8214"
      },
      "zPrimeControls": {
        "file": "pipeline/assay-analyser/fixtures/zprime-controls.json",
        "sha256": "dd3f2b587d4585ac1a15ab09c3f39de68087920a4297491245c0a8a0fa6bb356"
      }
    },
    "oracleLicence": "drc and MASS are GPL; build-time oracles only, never shipped; this script is MIT and calls them by their public API",
    "rule": "No value in this file comes from the Drybench engine under test.",
    "review": {
      "status": "awaiting the Q-19 reviewer's signature on this regenerated file (the CEO names the reviewer)",
      "reviewer": null,
      "signedOn": null
    },
    "model": "y = Bottom + (Top - Bottom) / (1 + 10^((logIC50 - x) * Hill)), x = log10(concentration in M)",
    "drcMapping": "drc LL.4 f(x) = c + (d - c) / (1 + exp(b (log(x) - log(e)))): e = IC50 = 10^logIC50, b = -Hill, c = Bottom, d = Top. LL2.4 is the same curve with e = log(IC50) (natural log).",
    "confidenceLevel": 0.95,
    "oracles": {
      "estimates": "expected.estimates = bestFit: the lowest objective found (nls from the generating parameters and from drc's estimates; drc LL.4 where its unweighted minimum is lower)",
      "wald": "expected.waldLogIC50 = the nls fit's Wald interval on logIC50, logIC50 +/- t(0.975, n - p) x SE with SE from (J^T J)^-1 s^2, wherever nls converged; badge 'Wald interval on log10 IC50'. drc LL2.4's interval (drcLL24.waldLogIC50) is a cross-check only; drc LL.4's linear-scale interval on IC50 is never used and is not recorded",
      "profile": "expected.profileLogIC50 = directProfileLogIC50: logIC50 held at each value and the other free parameters refitted; a bound is where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found by root finding; unbounded when not reached within 10 log10 units. MASS confint() (nls.profileCrossCheck) interpolates along a spline: cross-check only",
      "weighting": "1/Y^2 weighting by the fitted curve (C24, C25): minimise sum(((y - f) / f)^2) directly, the residual (y - f) / f with its full Jacobian, and take the Wald and profile intervals on that objective (CSO confirmation, item 4; GraphPad 'Math theory of weighting', Prism 11 guide, read by the CSO 6 October 2026); refuse if any fitted value is zero or below. nls with the one-sided formula ~ (y - f) / f; drc cannot weight by the fitted curve, so it gives start values only. nls.irlsCrossCheck shows that iteratively reweighted least squares settles elsewhere; agreement with Prism is not checked.",
      "noFiniteMinimum": "Where least squares has no finite minimum (minimumCheck: polishing keeps lowering the objective toward a limit no finite 4PL reaches), expected.engineMustReport is 'no finite minimum' and the engine shows and exports no estimates, intervals or parameters; on every other fitted curve it is 'a minimum' (CSO confirmation, item 1)"
    },
    "tolerances": {
      "ruling": "CSO ruling, 6 October 2026",
      "logIC50": {
        "absolute": 0.00043,
        "unit": "log10 units (0.1 percent in concentration)"
      },
      "hill": {
        "relative": 0.001
      },
      "topAndBottom": {
        "absolute": "0.001 x |Top - Bottom|, from the oracle's estimates"
      },
      "waldBoundsLogIC50": {
        "absolute": 0.0022,
        "unit": "log10 units (0.5 percent in concentration)"
      },
      "profileBoundsLogIC50": {
        "absolute": 0.0043,
        "unit": "log10 units (1 percent in concentration)",
        "appliesTo": "every finite bound of every fitted curve, withheld values included; the two curves with no finite minimum (expected.minimumAttained false: C30 and MTT Compound C) have no profile to compare"
      },
      "unboundedFlags": "exact, using the oracle's search limit of 10 log10 units each side of the estimate",
      "objective": {
        "relative": 1e-06,
        "note": "the engine's (weighted) residual sum of squares within 1e-6 relative of expected.objective; if the engine's is lower, rerun the oracle"
      },
      "fixedParameters": "exact",
      "rules": "withheldBy, shown and every count in ruleChecks exact",
      "notRuled": "The ruling sets no tolerance for F, p, absolute IC50 or Z'; they are arithmetic on the oracle's numbers (suggestion: 1e-6 relative)",
      "never": "No percentage tolerance on a logarithm"
    },
    "rules": {
      "source": "CSO ruling, 6 October 2026 (item 8); rules (iv) and (v) from Sebaugh 2011 (PMID 22328315, abstract read by the CSO 6 October 2026): 'at least two assay concentrations beyond the lower and upper bend points'; k = 4.6805 (Sebaugh and McCray 2003, paper not yet read), the root of (k - 1) ln k = k + 1 by the CSO's arithmetic (CSO confirmation, item 5)",
      "bendConstant": {
        "k": 4.6805,
        "rootOfEquation": 4.68049857988291,
        "equation": "(k - 1) ln k = k + 1",
        "spanFromEachPlateau": 0.176040841475222,
        "note": "the bend points lie 1 / (1 + k) = 17.6 percent of the span from each plateau"
      },
      "counting": "counts are of distinct concentrations with at least one kept well",
      "order": "applied in order; the first of (i) to (v) that fires withholds the value and gives the reason; (vi) keeps the value and adds a flag",
      "i": "refuse: fewer than four concentrations, or any concentration of zero or below used as a point (not fitted)",
      "ii": "no response: flat-line F-test p >= 0.05. The flat line is fitted by the full model's objective: y = mean(y) unweighted, y = sum(y^2) / sum(y) under 1/Y^2 weighting (CSO confirmation, item 8; the mean under weighting is kept as crossCheckMean); F = ((objective_flat - objective_4PL) / (p - 1)) / (objective_4PL / (n - p)), p free 4PL parameters, n kept wells; p is approximate for a nonlinear model (the methods page says so). Withholds both IC50s.",
      "iii": "relative IC50 not bracketed: fewer than two concentrations on either side of the fitted IC50",
      "iv": "relative IC50, plateau unbracketed: fewer than two concentrations at or beyond a free plateau's bend point, logIC50 -/+ log10(4.6805) / |Hill| (Top's on the low-concentration side of a falling curve); a plateau the user fixed is exempt",
      "v": "absolute IC50 (percent-of-control responses only): fewer than two concentrations where the fitted curve is below 50, or fewer than two where it is above 50",
      "vi": "poorly determined (relative IC50, value kept with the flag): profile interval wider than two log10 units, or unbounded",
      "noFiniteMinimum": "on a fit with no finite minimum, rules (ii) to (v) are evaluated at the best point (expected.rulesAtBestPoint); if none fires, both IC50s are still withheld (withheldBy 'noFiniteMinimum'): 'IC50 between {c1} and {c2}' for a step-shaped fit, otherwise 'no finite best fit' (CSO confirmation, item 1)",
      "reasonTexts": "expected.*.reason is the oracle's wording, except what the CSO wrote: 'IC50 beyond the highest concentration' and 'below 50 percent only at 100 <c2><b5>M' (ruling, item 8; U+00B5 MICRO SIGN), and 'IC50 between {c1} and {c2}' and 'no finite best fit' (confirmation, item 1). Tests assert withheldBy and shown exactly; the wording belongs to the CPO."
    },
    "fitSettings": {
      "drc": "drmc(relTol = 1e-12, maxIt = 5000): drc's optim (BFGS) with a tighter relative tolerance than the default 1e-7; unweighted only",
      "nls": "Gauss-Newton, nls.control(maxiter = 1000, tol = 1e-8, minFactor = 1e-10), from the generating parameters, then from drc's estimates; tol 1e-6 as a fallback (convergenceTolerance records which)",
      "exclusions": "wells marked excluded in the input are dropped before fitting",
      "warnings": "warnings records what R raised per curve; 'NaNs produced' comes from inside drm()'s optimiser for LL.4 and the returned fits are unaffected",
      "zPrime": "sample standard deviations (n - 1), n recorded; refused when either control has fewer than two wells"
    }
  },
  "curves": [
    {
      "id": "C01",
      "description": "Hill -1, triplicates",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.957505986505246,
          "c": 0.517521650762668,
          "d": 101.682423814337,
          "e": 9.16014829363499e-07
        },
        "standardErrors": {
          "b": 0.0472108355386179,
          "c": 1.22226064978537,
          "d": 1.08567709222656,
          "e": 5.22479453567647e-08
        },
        "wald": {
          "b": {
            "lower": 0.86046272423269,
            "upper": 1.0545492487778
          },
          "c": {
            "lower": -1.99487109656593,
            "upper": 3.02991439809127
          },
          "d": {
            "lower": 99.4507825904053,
            "upper": 103.914065038269
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 163.430466743594,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.682423814337,
          "bottom": 0.517521650762668,
          "logIC50": -6.03809749548214,
          "hill": -0.957505986505246
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.903234296531,
        "lnIC50StandardError": 0.0570387098199638,
        "waldLogIC50": {
          "lower": -6.08901668232261,
          "upper": -5.98717918886026
        },
        "logIC50": -6.03809793559143,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 101.682449644629,
          "bottom": 0.517511521009015,
          "logIC50": -6.03809792103845,
          "hill": -0.95750468303754
        },
        "standardErrors": {
          "top": 1.10894678967083,
          "bottom": 1.24429878883374,
          "logIC50": 0.0246484595256659,
          "hill": 0.0497180714162137
        },
        "wald": {
          "top": {
            "lower": 99.4029768725725,
            "upper": 103.961922416686
          },
          "bottom": {
            "lower": -2.04018126990642,
            "upper": 3.07520431192445
          },
          "logIC50": {
            "lower": -6.08876355521065,
            "upper": -5.98743228686625
          },
          "hill": {
            "lower": -1.05970164246612,
            "upper": -0.855307723608964
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 163.430466735365,
        "rss": 163.430466735365,
        "minimumFitted": 1.63620851822991,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.08890970377993,
          "upper": -5.98691092468106,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.95735842893694e-05,
          "logIC50Difference": -4.25556307526165e-07,
          "objectiveDrcMinusNls": 8.22876700112829e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.682449644629,
          "bottom": 0.517511521009015,
          "logIC50": -6.03809792103845,
          "hill": -0.95750468303754
        },
        "objective": 163.430466735365,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 163.430466735365,
        "polishedObjective": 163.430466735278,
        "relativeImprovement": 5.33894626224299e-13,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.682451914367,
          "bottom": 0.517507654334032,
          "logIC50": -6.03809790237679,
          "hill": -0.957504512370201
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 163.430466735365,
        "threshold": 189.989182739906,
        "lower": -6.08890965912743,
        "upper": -5.98691119271738,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.996586197941967,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.01836793090697,
        "absoluteIC50_M": 9.58588178963819e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.58588763573409e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 53.3869666666667,
        "objectiveFlat": 47873.4454889667,
        "objectiveFull": 163.430466735365,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 2530.04721285461,
        "p": 3.57314954880928e-32,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((47873.4455 - 163.430467) / 3) / (163.430467 / 26) = 2530.04721; p = P(F(3, 26) > F) = 3.57315e-32 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.57314954880928e-32,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.700040701056866,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.73813862209532,
              "bendPoint_M": 1.82751679946674e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.33805721998158,
              "bendPoint_M": 4.59137515703996e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.101998466410051,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.682449644629,
          "bottom": 0.517511521009015,
          "logIC50": -6.03809792103845,
          "hill": -0.95750468303754
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 163.430466735365,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.08876355521065,
          "upper": -5.98743228686625,
          "standardError": 0.0246484595256659,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.08890965912743,
          "upper": -5.98691119271738,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 2530.04721285461,
          "p": 3.57314954880928e-32,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.03809792103845,
          "ic50_M": 9.16013931779685e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.01836793090697,
          "absoluteIC50_M": 9.58588178963819e-07
        }
      },
      "warnings": []
    },
    {
      "id": "C02",
      "description": "Hill -1, one replicate per concentration",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6.5,
        "hill": -1,
        "ic50_M": 3.16227766016838e-07,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 3.16227766016838e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 10,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.12931792163037,
          "c": 1.78741509334286,
          "d": 99.3548331146169,
          "e": 2.78370855398451e-07
        },
        "standardErrors": {
          "b": 0.123175126551658,
          "c": 1.68832010934402,
          "d": 2.50903054217914,
          "e": 2.69513669356215e-08
        },
        "wald": {
          "b": {
            "lower": 0.827919244704835,
            "upper": 1.4307165985559
          },
          "c": {
            "lower": -2.34375539073739,
            "upper": 5.91858557742312
          },
          "d": {
            "lower": 93.2154565460741,
            "upper": 105.49420968316
          }
        },
        "dfResidual": 6,
        "tQuantile": 2.44691185114497,
        "rss": 44.8596202897834,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.3548331146169,
          "bottom": 1.78741509334286,
          "logIC50": -6.5553762360234,
          "hill": -1.12931792163037
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -15.0943086005114,
        "lnIC50StandardError": 0.0968201402743785,
        "waldLogIC50": {
          "lower": -6.65826379047869,
          "upper": -6.45248607621507
        },
        "logIC50": -6.55537493334688,
        "dfResidual": 6
      },
      "nls": {
        "estimates": {
          "top": 99.3550360028384,
          "bottom": 1.7870728842687,
          "logIC50": -6.55537501268994,
          "hill": -1.1293016658616
        },
        "standardErrors": {
          "top": 2.42492994073367,
          "bottom": 1.64514968708588,
          "logIC50": 0.0422575946331889,
          "hill": 0.112691324390952
        },
        "wald": {
          "top": {
            "lower": 93.4214461926609,
            "upper": 105.288625813016
          },
          "bottom": {
            "lower": -2.23846338196917,
            "upper": 5.81260915050657
          },
          "logIC50": {
            "lower": -6.65877562179877,
            "upper": -6.45197440358112
          },
          "hill": {
            "lower": -1.40504740303504,
            "upper": -0.853555928688156
          }
        },
        "dfResidual": 6,
        "tQuantile": 2.44691185114497,
        "objective": 44.8596199785342,
        "rss": 44.8596199785342,
        "minimumFitted": 1.91382447439558,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.66295608611036,
          "upper": -6.45415475091092,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 0.000191454730036646,
          "logIC50Difference": 1.22333345498049e-06,
          "objectiveDrcMinusNls": 3.11249280571246e-07
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.3550360028384,
          "bottom": 1.7870728842687,
          "logIC50": -6.55537501268994,
          "hill": -1.1293016658616
        },
        "objective": 44.8596199785342,
        "df": 6,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 44.8596199785342,
        "polishedObjective": 44.8596199785243,
        "relativeImprovement": 2.18898435004653e-13,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.3550342099374,
          "bottom": 1.7870741880519,
          "logIC50": -6.55537500875052,
          "hill": -1.12930180432631
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 44.8596199785342,
        "threshold": 89.6248673335813,
        "lower": -6.66293924942799,
        "upper": -6.45415595320434,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.997110824535915,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.54637124153464,
        "absoluteIC50_M": 2.84203065773115e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 2.84202932138696e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 42.2589,
        "objectiveFlat": 15526.7897489,
        "objectiveFull": 44.8596199785342,
        "weighted": false,
        "n": 10,
        "parametersFull": 4,
        "df1": 3,
        "df2": 6,
        "F": 690.239022815162,
        "p": 5.26985609242824e-08,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((15526.7897 - 44.85962) / 3) / (44.85962 / 6) = 690.239023; p = P(F(3, 6) > F) = 5.26986e-08 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 5.26985609242824e-08,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 4,
          "concentrationsAboveIC50": 6,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.593545790147607,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.14892080283755,
              "bendPoint_M": 7.09707177090981e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.96182922254234,
              "bendPoint_M": 1.09186960752202e-06,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 6,
          "concentrationsPredictedAbove50": 4,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.208783296223651,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.3550360028384,
          "bottom": 1.7870728842687,
          "logIC50": -6.55537501268994,
          "hill": -1.1293016658616
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 44.8596199785342,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.65877562179877,
          "upper": -6.45197440358112,
          "standardError": 0.0422575946331889,
          "dfResidual": 6,
          "tQuantile": 2.44691185114497,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.66293924942799,
          "upper": -6.45415595320434,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 690.239022815162,
          "p": 5.26985609242824e-08,
          "df1": 3,
          "df2": 6,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.55537501268994,
          "ic50_M": 2.78371639522759e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.54637124153464,
          "absoluteIC50_M": 2.84203065773115e-07
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C03",
      "description": "Hill -1, duplicates, low noise",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -7,
        "hill": -1,
        "ic50_M": 1e-07,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.01397454894968,
          "c": -0.727080680977157,
          "d": 99.3898370693305,
          "e": 1.02476156762797e-07
        },
        "standardErrors": {
          "b": 0.0223385214472058,
          "c": 0.515469452515934,
          "d": 0.440825899700505,
          "e": 2.36110529201723e-09
        },
        "wald": {
          "b": {
            "lower": 0.966618998956977,
            "upper": 1.06133009894238
          },
          "c": {
            "lower": -1.81982710495236,
            "upper": 0.36566574299805
          },
          "d": {
            "lower": 98.4553279085214,
            "upper": 100.32434623014
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 12.1440902273772,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.3898370693305,
          "bottom": -0.727080680977157,
          "logIC50": -6.98937717061708,
          "hill": -1.01397454894968
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -16.0936369144543,
        "lnIC50StandardError": 0.0230407662812158,
        "waldLogIC50": {
          "lower": -7.01059049070881,
          "upper": -6.9681649206951
        },
        "logIC50": -6.98937770570196,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 99.389867216593,
          "bottom": -0.727102326653816,
          "logIC50": -6.98937743561014,
          "hill": -1.01397254004121
        },
        "standardErrors": {
          "top": 0.439734637953634,
          "bottom": 0.515822094567061,
          "logIC50": 0.0100136660205851,
          "hill": 0.0222776769399014
        },
        "wald": {
          "top": {
            "lower": 98.457671427344,
            "upper": 100.322063005842
          },
          "bottom": {
            "lower": -1.82059631838194,
            "upper": 0.366391665074304
          },
          "logIC50": {
            "lower": -7.01060545927181,
            "upper": -6.96814941194847
          },
          "hill": {
            "lower": -1.06119910544044,
            "upper": -0.96674597464197
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 12.1440902205206,
        "rss": 12.1440902205206,
        "minimumFitted": 0.226086591206421,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -7.01055869599494,
          "upper": -6.96811907051148,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 2.977066675689e-05,
          "logIC50Difference": -2.64993062160102e-07,
          "objectiveDrcMinusNls": 6.85659884425149e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.389867216593,
          "bottom": -0.727102326653816,
          "logIC50": -6.98937743561014,
          "hill": -1.01397254004121
        },
        "objective": 12.1440902205206,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 12.1440902205206,
        "polishedObjective": 12.1440902205197,
        "relativeImprovement": 6.80171108186735e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.3898669105434,
          "bottom": -0.727101953397565,
          "logIC50": -6.98937743614586,
          "hill": -1.01397256320578
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 12.1440902205206,
        "threshold": 15.5550604057495,
        "lower": -7.01055870505942,
        "upper": -6.96811911435352,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99962116294637,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -7.00081975370473,
        "absoluteIC50_M": 9.98114227646764e-08,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.98114707953665e-08,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 52.6154,
        "objectiveFlat": 32056.2365908,
        "objectiveFull": 12.1440902205206,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 14072.8390160487,
        "p": 1.41610026602025e-27,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((32056.2366 - 12.1440902) / 3) / (12.1440902 / 16) = 14072.839; p = P(F(3, 16) > F) = 1.4161e-27 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.41610026602025e-27,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.661055623411254,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.6504330590214,
              "bendPoint_M": 2.23648989866949e-08,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -6.32832181219889,
              "bendPoint_M": 4.69546046057035e-07,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.0424395907058992,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.389867216593,
          "bottom": -0.727102326653816,
          "logIC50": -6.98937743561014,
          "hill": -1.01397254004121
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 12.1440902205206,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -7.01060545927181,
          "upper": -6.96814941194847,
          "standardError": 0.0100136660205851,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -7.01055870505942,
          "upper": -6.96811911435352,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 14072.8390160487,
          "p": 1.41610026602025e-27,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.98937743561014,
          "ic50_M": 1.02476094235034e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -7.00081975370473,
          "absoluteIC50_M": 9.98114227646764e-08
        }
      },
      "warnings": []
    },
    {
      "id": "C04",
      "description": "Hill -0.5 (shallow), half-log series of 12",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -0.5,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 0.5,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 24,
      "distinctConcentrations": 12,
      "drcLL4": {
        "estimates": {
          "b": 0.507644069181381,
          "c": 0.835354784817674,
          "d": 100.844759008922,
          "e": 8.52745346925541e-07
        },
        "standardErrors": {
          "b": 0.033523197256228,
          "c": 1.58255919888083,
          "d": 2.2369173200717,
          "e": 1.02171569567018e-07
        },
        "wald": {
          "b": {
            "lower": 0.437715905069406,
            "upper": 0.577572233293356
          },
          "c": {
            "lower": -2.46580585718208,
            "upper": 4.13651542681743
          },
          "d": {
            "lower": 96.1786312446969,
            "upper": 105.510886773148
          }
        },
        "dfResidual": 20,
        "tQuantile": 2.08596344726586,
        "rss": 89.7094729278925,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100.844759008922,
          "bottom": 0.835354784817674,
          "logIC50": -6.06918064167732,
          "hill": -0.507644069181381
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.9748145134742,
        "lnIC50StandardError": 0.119816519077378,
        "waldLogIC50": {
          "lower": -6.17772929909481,
          "upper": -5.96064035855185
        },
        "logIC50": -6.06918482882333,
        "dfResidual": 20
      },
      "nls": {
        "estimates": {
          "top": 100.844891942102,
          "bottom": 0.835389626302108,
          "logIC50": -6.06918576848469,
          "hill": -0.507643068356951
        },
        "standardErrors": {
          "top": 2.23321301636408,
          "bottom": 1.59272701911057,
          "logIC50": 0.0518617376600823,
          "hill": 0.0336548710133567
        },
        "wald": {
          "top": {
            "lower": 96.1864912200086,
            "upper": 105.503292664196
          },
          "bottom": {
            "lower": -2.48698071703526,
            "upper": 4.15775996963947
          },
          "logIC50": {
            "lower": -6.17736745755532,
            "upper": -5.96100407941407
          },
          "hill": {
            "lower": -0.577845899113261,
            "upper": -0.437440237600642
          }
        },
        "dfResidual": 20,
        "tQuantile": 2.08596344726586,
        "objective": 89.7094728833845,
        "rss": 89.7094728833845,
        "minimumFitted": 3.52778182181929,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.18275307813954,
          "upper": -5.9634644720379,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 4.17086070100073e-05,
          "logIC50Difference": -5.12680737063675e-06,
          "objectiveDrcMinusNls": 4.45080132749354e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 100.844891942102,
          "bottom": 0.835389626302108,
          "logIC50": -6.06918576848469,
          "hill": -0.507643068356951
        },
        "objective": 89.7094728833845,
        "df": 20,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 89.7094728833845,
        "polishedObjective": 89.7094728833804,
        "relativeImprovement": 4.59388260230417e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 100.84489300455,
          "bottom": 0.835388272079446,
          "logIC50": -6.06918576189899,
          "hill": -0.507643046743604
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 89.7094728833845,
        "threshold": 109.226860936931,
        "lower": -6.18274260419145,
        "upper": -5.96346253494483,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.996721949475715,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.04043579071128,
        "absoluteIC50_M": 9.110961454603e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.11100817721197e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 45.8322916666667,
        "objectiveFlat": 27366.7145209583,
        "objectiveFull": 89.7094728833845,
        "weighted": false,
        "n": 24,
        "parametersFull": 4,
        "df1": 3,
        "df2": 20,
        "F": 2027.06241019704,
        "p": 5.29329726263076e-25,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((27366.7145 - 89.7094729) / 3) / (89.7094729 / 20) = 2027.06241; p = P(F(3, 20) > F) = 5.2933e-25 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 12,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 5.29329726263076e-25,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 7,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 1.32040067393871,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.3895864424234,
              "bendPoint_M": 4.07768391050577e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -4.74878509454599,
              "bendPoint_M": 1.78326097461847e-05,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 7,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.219280069246622,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 100.844891942102,
          "bottom": 0.835389626302108,
          "logIC50": -6.06918576848469,
          "hill": -0.507643068356951
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 89.7094728833845,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.17736745755532,
          "upper": -5.96100407941407,
          "standardError": 0.0518617376600823,
          "dfResidual": 20,
          "tQuantile": 2.08596344726586,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.18274260419145,
          "upper": -5.96346253494483,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 2027.06241019704,
          "p": 5.29329726263076e-25,
          "df1": 3,
          "df2": 20,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.06918576848469,
          "ic50_M": 8.52735280402692e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.04043579071128,
          "absoluteIC50_M": 9.110961454603e-07
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C05",
      "description": "Hill -0.5, Bottom 10",
      "truth": {
        "top": 100,
        "bottom": 10,
        "logIC50": -5.5,
        "hill": -0.5,
        "ic50_M": 3.16227766016838e-06,
        "drcLL4": {
          "b": 0.5,
          "c": 10,
          "d": 100,
          "e": 3.16227766016838e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 36,
      "distinctConcentrations": 12,
      "drcLL4": {
        "estimates": {
          "b": 0.458537332265013,
          "c": 5.75530083607359,
          "d": 101.80115182622,
          "e": 3.49138890971945e-06
        },
        "standardErrors": {
          "b": 0.0632029553556318,
          "c": 4.45902127389139,
          "d": 3.75889814410066,
          "e": 8.5094386203129e-07
        },
        "wald": {
          "b": {
            "lower": 0.329797125095906,
            "upper": 0.587277539434119
          },
          "c": {
            "lower": -3.32742827591372,
            "upper": 14.8380299480609
          },
          "d": {
            "lower": 94.1445268618307,
            "upper": 109.457776790609
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "rss": 603.539338074247,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.80115182622,
          "bottom": 5.75530083607359,
          "logIC50": -5.45700177194271,
          "hill": -0.458537332265013
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -12.5652161756777,
        "lnIC50StandardError": 0.243727554823835,
        "waldLogIC50": {
          "lower": -5.67261249043975,
          "upper": -5.24139560759688
        },
        "logIC50": -5.45700404901831,
        "dfResidual": 32
      },
      "nls": {
        "estimates": {
          "top": 101.801426818408,
          "bottom": 5.75504273449301,
          "logIC50": -5.45700271361294,
          "hill": -0.458532513061419
        },
        "standardErrors": {
          "top": 3.70440892359995,
          "bottom": 4.47964195073625,
          "logIC50": 0.106388434085747,
          "hill": 0.062755767877746
        },
        "wald": {
          "top": {
            "lower": 94.2557927641164,
            "upper": 109.3470608727
          },
          "bottom": {
            "lower": -3.36968932172431,
            "upper": 14.8797747907103
          },
          "logIC50": {
            "lower": -5.67370886236071,
            "upper": -5.24029656486517
          },
          "hill": {
            "lower": -0.586361829146043,
            "upper": -0.330703196976796
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "objective": 603.539337960491,
        "rss": 603.539337960491,
        "minimumFitted": 12.4319248543421,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.6723249637722,
          "upper": -5.21827357493872,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 4.48458886741724e-05,
          "logIC50Difference": -9.4167023245717e-07,
          "objectiveDrcMinusNls": 1.13755731945275e-07
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.801426818408,
          "bottom": 5.75504273449301,
          "logIC50": -5.45700271361294,
          "hill": -0.458532513061419
        },
        "objective": 603.539337960491,
        "df": 32,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 603.539337960491,
        "polishedObjective": 603.53933796046,
        "relativeImprovement": 5.16125322352426e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.801422298787,
          "bottom": 5.75504608193281,
          "logIC50": -5.45700266508633,
          "hill": -0.458532584044348
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 603.539337960491,
        "threshold": 681.793823132712,
        "lower": -5.67229125998712,
        "upper": -5.21836204257782,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.98202649519756,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.30766119431932,
        "absoluteIC50_M": 4.92423539714825e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 4.92423391448774e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 56.3233333333333,
        "objectiveFlat": 33579.390586,
        "objectiveFull": 603.539337960491,
        "weighted": false,
        "n": 36,
        "parametersFull": 4,
        "df1": 3,
        "df2": 32,
        "F": 582.799481639501,
        "p": 5.43133006639254e-28,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((33579.3906 - 603.539338) / 3) / (603.539338 / 32) = 582.799482; p = P(F(3, 32) > F) = 5.43133e-28 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 12,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 5.43133006639254e-28,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 6,
          "concentrationsAboveIC50": 6,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 1.46182054812992,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.91882326174285,
              "bendPoint_M": 1.20552643542171e-07,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -3.99518216548302,
              "bendPoint_M": 0.000101115523469047,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.453929217409295,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.801426818408,
          "bottom": 5.75504273449301,
          "logIC50": -5.45700271361294,
          "hill": -0.458532513061419
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 603.539337960491,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.67370886236071,
          "upper": -5.24029656486517,
          "standardError": 0.106388434085747,
          "dfResidual": 32,
          "tQuantile": 2.0369333434601,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.67229125998712,
          "upper": -5.21836204257782,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 582.799481639501,
          "p": 5.43133006639254e-28,
          "df1": 3,
          "df2": 32,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.45700271361294,
          "ic50_M": 3.49138133943344e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.30766119431932,
          "absoluteIC50_M": 4.92423539714825e-06
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C06",
      "description": "Hill -0.5, 4-fold series",
      "truth": {
        "top": 95,
        "bottom": 5,
        "logIC50": -6.5,
        "hill": -0.5,
        "ic50_M": 3.16227766016838e-07,
        "drcLL4": {
          "b": 0.5,
          "c": 5,
          "d": 95,
          "e": 3.16227766016838e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.489453768603886,
          "c": 3.96460144800307,
          "d": 95.5213869608335,
          "e": 3.45202737138592e-07
        },
        "standardErrors": {
          "b": 0.0384649657013022,
          "c": 2.34647538720421,
          "d": 1.83817628594579,
          "e": 4.81461460020087e-08
        },
        "wald": {
          "b": {
            "lower": 0.407911683979331,
            "upper": 0.57099585322844
          },
          "c": {
            "lower": -1.00970415982338,
            "upper": 8.93890705582952
          },
          "d": {
            "lower": 91.6246273113542,
            "upper": 99.4181466103128
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 64.1732339349279,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 95.5213869608335,
          "bottom": 3.96460144800307,
          "logIC50": -6.46192576938941,
          "hill": -0.489453768603886
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -14.8791362519159,
        "lnIC50StandardError": 0.139472124023998,
        "waldLogIC50": {
          "lower": -6.59033361802768,
          "upper": -6.33351992135976
        },
        "logIC50": -6.46192676969372,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 95.5215903816177,
          "bottom": 3.96434933175708,
          "logIC50": -6.46192466539404,
          "hill": -0.489448696403292
        },
        "standardErrors": {
          "top": 1.80683165290162,
          "bottom": 2.35344501001362,
          "logIC50": 0.0609744996017541,
          "hill": 0.0380403071034125
        },
        "wald": {
          "top": {
            "lower": 91.6912783858309,
            "upper": 99.3519023774046
          },
          "bottom": {
            "lower": -1.02473121639661,
            "upper": 8.95342987991078
          },
          "logIC50": {
            "lower": -6.59118483021717,
            "upper": -6.33266450057092
          },
          "hill": {
            "lower": -0.57009054501582,
            "upper": -0.408806847790764
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 64.1732338650603,
        "rss": 64.1732338650603,
        "minimumFitted": 9.33997258931657,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.58814574112661,
          "upper": -6.32758438391248,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-05,
          "earlierAttempts": ["confint at tol 1e-06: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"]
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 6.35918261378298e-05,
          "logIC50Difference": 1.10399536357164e-06,
          "objectiveDrcMinusNls": 6.98676245747265e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 95.5215903816177,
          "bottom": 3.96434933175708,
          "logIC50": -6.46192466539404,
          "hill": -0.489448696403292
        },
        "objective": 64.1732338650603,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 64.1732338650603,
        "polishedObjective": 64.1732338650602,
        "relativeImprovement": 1.55011641170501e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 95.5215902731525,
          "bottom": 3.96434948324795,
          "logIC50": -6.46192466609726,
          "hill": -0.489448699006474
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 64.1732338650603,
        "threshold": 82.1978848210921,
        "lower": -6.5881449306217,
        "upper": -6.32760179030053,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.996560409121245,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.47188865007501,
        "absoluteIC50_M": 3.37373797742093e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 3.37373715055998e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 53.2611,
        "objectiveFlat": 18657.2287598,
        "objectiveFull": 64.1732338650603,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 1545.23867401634,
        "p": 6.53035685269458e-20,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((18657.2288 - 64.1732339) / 3) / (64.1732339 / 16) = 1545.23867; p = P(F(3, 16) > F) = 6.53036e-20 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 6.53035685269458e-20,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 1.36948418599225,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.8314088513863,
              "bendPoint_M": 1.47431793457793e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.09244047940179,
              "bendPoint_M": 8.08275696710191e-06,
              "concentrationsAtOrBeyond": 2,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.260543140321166,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 95.5215903816177,
          "bottom": 3.96434933175708,
          "logIC50": -6.46192466539404,
          "hill": -0.489448696403292
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 64.1732338650603,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.59118483021717,
          "upper": -6.33266450057092,
          "standardError": 0.0609744996017541,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.5881449306217,
          "upper": -6.32760179030053,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1545.23867401634,
          "p": 6.53035685269458e-20,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.46192466539404,
          "ic50_M": 3.45203614660001e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.47188865007501,
          "absoluteIC50_M": 3.37373797742093e-07
        }
      },
      "warnings": []
    },
    {
      "id": "C07",
      "description": "Hill -3 (steep), 2-fold series of 12",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -3,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 3,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 36,
      "distinctConcentrations": 12,
      "drcLL4": {
        "estimates": {
          "b": 3.05836412743751,
          "c": -0.773701023439875,
          "d": 98.6277747497446,
          "e": 1.00221806416788e-06
        },
        "standardErrors": {
          "b": 0.150017251974089,
          "c": 0.633081281898128,
          "d": 0.818140756917436,
          "e": 2.01983065400794e-08
        },
        "wald": {
          "b": {
            "lower": 2.75278898479723,
            "upper": 3.36393927007779
          },
          "c": {
            "lower": -2.06324539565864,
            "upper": 0.515843348778886
          },
          "d": {
            "lower": 96.9612765623358,
            "upper": 100.294272937153
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "rss": 206.206838668668,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 98.6277747497446,
          "bottom": -0.773701023439875,
          "logIC50": -5.99903777371714,
          "hill": -3.05836412743751
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.8132810727709,
        "lnIC50StandardError": 0.0201531073056508,
        "waldLogIC50": {
          "lower": -6.01685976825349,
          "upper": -5.98120372551256
        },
        "logIC50": -5.99903174688302,
        "dfResidual": 32
      },
      "nls": {
        "estimates": {
          "top": 98.6278015985682,
          "bottom": -0.773687450027187,
          "logIC50": -5.99903843656464,
          "hill": -3.0583639082611
        },
        "standardErrors": {
          "top": 0.823494507995378,
          "bottom": 0.633266359828088,
          "logIC50": 0.00872245101129942,
          "hill": 0.154537248555578
        },
        "wald": {
          "top": {
            "lower": 96.9503981770761,
            "upper": 100.30520502006
          },
          "bottom": {
            "lower": -2.06360881365262,
            "upper": 0.516233913598248
          },
          "logIC50": {
            "lower": -6.01680548786625,
            "upper": -5.98127138526303
          },
          "hill": {
            "lower": -3.37314598265054,
            "upper": -2.74358183387166
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "objective": 206.206838631496,
        "rss": 206.206838631496,
        "minimumFitted": -0.773610959870522,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.01679006729723,
          "upper": -5.98113419618236,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.75434855029983e-05,
          "logIC50Difference": -6.6284750044332e-07,
          "objectiveDrcMinusNls": 3.71726684988971e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 98.6278015985682,
          "bottom": -0.773687450027187,
          "logIC50": -5.99903843656464,
          "hill": -3.0583639082611
        },
        "objective": 206.206838631496,
        "df": 32,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 206.206838631496,
        "polishedObjective": 206.206838631495,
        "relativeImprovement": 2.20529713710963e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 98.6278016329003,
          "bottom": -0.773687428854537,
          "logIC50": -5.99903843748892,
          "hill": -3.05836390687486
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 206.206838631496,
        "threshold": 232.943471989362,
        "lower": -6.01679017823279,
        "upper": -5.98113424807846,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.997134745534895,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.00517049597145,
        "absoluteIC50_M": 9.88165083185768e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.88166327616189e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 39.4819722222222,
        "objectiveFlat": 71968.0716469722,
        "objectiveFull": 206.206838631496,
        "weighted": false,
        "n": 36,
        "parametersFull": 4,
        "df1": 3,
        "df2": 32,
        "F": 3712.09750544157,
        "p": 9.517248968319e-41,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((71968.0716 - 206.206839) / 3) / (206.206839 / 32) = 3712.09751; p = P(F(3, 32) > F) = 9.51725e-41 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 12,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 9.517248968319e-41,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 7,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.219166936860676,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.21820537342532,
              "bendPoint_M": 6.0505468291014e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.77987149970396,
              "bendPoint_M": 1.66007802342109e-06,
              "concentrationsAtOrBeyond": 6,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 7,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.0356559301543253,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 98.6278015985682,
          "bottom": -0.773687450027187,
          "logIC50": -5.99903843656464,
          "hill": -3.0583639082611
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 206.206838631496,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.01680548786625,
          "upper": -5.98127138526303,
          "standardError": 0.00872245101129942,
          "dfResidual": 32,
          "tQuantile": 2.0369333434601,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.01679017823279,
          "upper": -5.98113424807846,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 3712.09750544157,
          "p": 9.517248968319e-41,
          "df1": 3,
          "df2": 32,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.99903843656464,
          "ic50_M": 1.00221653452093e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.00517049597145,
          "absoluteIC50_M": 9.88165083185768e-07
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C08",
      "description": "Hill -3 on a 3-fold series (few points on the slope)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5.3,
        "hill": -3,
        "ic50_M": 5.01187233627272e-06,
        "drcLL4": {
          "b": 3,
          "c": 0,
          "d": 100,
          "e": 5.01187233627272e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 2.70797758723331,
          "c": -4.78056145851156,
          "d": 100.912073658779,
          "e": 5.62155378033931e-06
        },
        "standardErrors": {
          "b": 0.219673834538005,
          "c": 1.63671132100247,
          "d": 0.905932201070637,
          "e": 2.37266482856997e-07
        },
        "wald": {
          "b": {
            "lower": 2.24228986129594,
            "upper": 3.17366531317068
          },
          "c": {
            "lower": -8.25023446120011,
            "upper": -1.310888455823
          },
          "d": {
            "lower": 98.9915831849939,
            "upper": 102.832564132564
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 148.838193872597,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100.912073658779,
          "bottom": -4.78056145851156,
          "logIC50": -5.2501436301671,
          "hill": -2.70797758723331
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -12.0888487541301,
        "lnIC50StandardError": 0.0421960143001166,
        "waldLogIC50": {
          "lower": -5.2889686229209,
          "upper": -5.21127199004249
        },
        "logIC50": -5.2501203064817,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 100.912074809732,
          "bottom": -4.78055859487097,
          "logIC50": -5.25014370929863,
          "hill": -2.70797766425308
        },
        "standardErrors": {
          "top": 0.904165172331804,
          "bottom": 1.62555013380825,
          "logIC50": 0.018385908405823,
          "hill": 0.21088114591099
        },
        "wald": {
          "top": {
            "lower": 98.9953302695348,
            "upper": 102.82881934993
          },
          "bottom": {
            "lower": -8.2265709376809,
            "upper": -1.33454625206105
          },
          "logIC50": {
            "lower": -5.28912009395914,
            "upper": -5.21116732463813
          },
          "hill": {
            "lower": -3.15502572297564,
            "upper": -2.26092960553052
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 148.838193872409,
        "rss": 148.838193872409,
        "minimumFitted": -4.73705704894912,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.28896927998348,
          "upper": -5.21132107649234,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 5.99017627941171e-07,
          "logIC50Difference": -7.91315342141274e-08,
          "objectiveDrcMinusNls": 1.88038029591553e-10
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 100.912074809732,
          "bottom": -4.78055859487097,
          "logIC50": -5.25014370929863,
          "hill": -2.70797766425308
        },
        "objective": 148.838193872409,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 148.838193872409,
        "polishedObjective": 148.838193872408,
        "relativeImprovement": 1.90957097039007e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 100.912074806707,
          "bottom": -4.78055857393644,
          "logIC50": -5.25014370952164,
          "hill": -2.70797766753745
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 148.838193872409,
        "threshold": 190.643107414984,
        "lower": -5.28896948268277,
        "upper": -5.21132102654016,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99634825093157,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.2618888801419,
        "absoluteIC50_M": 5.47155941907294e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 5.47156026052079e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 67.97395,
        "objectiveFlat": 40758.05623095,
        "objectiveFull": 148.838193872409,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 1455.154020368,
        "p": 1.05402021778573e-19,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((40758.0562 - 148.838194) / 3) / (148.838194 / 16) = 1455.15402; p = P(F(3, 16) > F) = 1.05402e-19 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.05402021778573e-19,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 7,
          "concentrationsAboveIC50": 3,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.247525028890411,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -5.49766873818905,
              "bendPoint_M": 3.17929818276385e-06,
              "concentrationsAtOrBeyond": 6,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.00261868040822,
              "bendPoint_M": 9.93988407894742e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.0776484561426045,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 100.912074809732,
          "bottom": -4.78055859487097,
          "logIC50": -5.25014370929863,
          "hill": -2.70797766425308
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 148.838193872409,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.28912009395914,
          "upper": -5.21116732463813,
          "standardError": 0.018385908405823,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.28896948268277,
          "upper": -5.21132102654016,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1455.154020368,
          "p": 1.05402021778573e-19,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.25014370929863,
          "ic50_M": 5.62155275605244e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.2618888801419,
          "absoluteIC50_M": 5.47155941907294e-06
        }
      },
      "warnings": []
    },
    {
      "id": "C09",
      "description": "Hill -3, Bottom 15",
      "truth": {
        "top": 100,
        "bottom": 15,
        "logIC50": -7.2,
        "hill": -3,
        "ic50_M": 6.30957344480193e-08,
        "drcLL4": {
          "b": 3,
          "c": 15,
          "d": 100,
          "e": 6.30957344480193e-08
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 36,
      "distinctConcentrations": 12,
      "drcLL4": {
        "estimates": {
          "b": 3.21145215305973,
          "c": 15.1958896624444,
          "d": 99.5420732174166,
          "e": 6.27351959060637e-08
        },
        "standardErrors": {
          "b": 0.11686706381884,
          "c": 0.342846737203809,
          "d": 0.54162652619411,
          "e": 8.57908299656392e-10
        },
        "wald": {
          "b": {
            "lower": 2.97340173401486,
            "upper": 3.44950257210461
          },
          "c": {
            "lower": 14.4975337117374,
            "upper": 15.8942456131513
          },
          "d": {
            "lower": 98.4388160865093,
            "upper": 100.645330348324
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "rss": 69.9163059449958,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.5420732174166,
          "bottom": 15.1958896624444,
          "logIC50": -7.20248874147777,
          "hill": -3.21145215305973
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -16.5843650237666,
        "lnIC50StandardError": 0.013674254032292,
        "waldLogIC50": {
          "lower": -7.21459485614539,
          "upper": -7.19040157523684
        },
        "logIC50": -7.20249821569111,
        "dfResidual": 32
      },
      "nls": {
        "estimates": {
          "top": 99.5421036446912,
          "bottom": 15.1958996278532,
          "logIC50": -7.20248943573308,
          "hill": -3.21144894462742
        },
        "standardErrors": {
          "top": 0.542905051097626,
          "bottom": 0.342596437607789,
          "logIC50": 0.00595230634535607,
          "hill": 0.117136395306467
        },
        "wald": {
          "top": {
            "lower": 98.4362422437775,
            "upper": 100.647965045605
          },
          "bottom": {
            "lower": 14.4980535207392,
            "upper": 15.8937457349671
          },
          "logIC50": {
            "lower": -7.21461388699843,
            "upper": -7.19036498446774
          },
          "hill": {
            "lower": -3.45004797395988,
            "upper": -2.97284991529495
          }
        },
        "dfResidual": 32,
        "tQuantile": 2.0369333434601,
        "objective": 69.9163059150233,
        "rss": 69.9163059150233,
        "minimumFitted": 15.1959067544655,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -7.21464144660376,
          "upper": -7.19045094665771,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 9.99059666682585e-07,
          "logIC50Difference": -6.94255311017855e-07,
          "objectiveDrcMinusNls": 2.99724973729099e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.5421036446912,
          "bottom": 15.1958996278532,
          "logIC50": -7.20248943573308,
          "hill": -3.21144894462742
        },
        "objective": 69.9163059150233,
        "df": 32,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 69.9163059150233,
        "polishedObjective": 69.9163059150231,
        "relativeImprovement": 2.43906273866482e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.5421036429144,
          "bottom": 15.1958996410135,
          "logIC50": -7.20248943578377,
          "hill": -3.21144894563307
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 69.9163059150233,
        "threshold": 78.9816048614224,
        "lower": -7.21464141279969,
        "upper": -7.19045085122905,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99856309031075,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -7.15474026277832,
        "absoluteIC50_M": 7.00260673629771e-08,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 7.00261519780763e-08,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 44.5961388888889,
        "objectiveFlat": 48657.4114143056,
        "objectiveFull": 69.9163059150233,
        "weighted": false,
        "n": 36,
        "parametersFull": 4,
        "df1": 3,
        "df2": 32,
        "F": 7412.67158936291,
        "p": 1.52427857348119e-45,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((48657.4114 - 69.9163059) / 3) / (69.9163059 / 32) = 7412.67159; p = P(F(3, 32) > F) = 1.52428e-45 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 12,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.52427857348119e-45,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 4,
          "concentrationsAboveIC50": 8,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.208719572110961,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.41120900784404,
              "bendPoint_M": 3.87963610329971e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -6.99376986362212,
              "bendPoint_M": 1.01444880847246e-07,
              "concentrationsAtOrBeyond": 7,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 8,
          "concentrationsPredictedAbove50": 4,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.0241905615706361,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.5421036446912,
          "bottom": 15.1958996278532,
          "logIC50": -7.20248943573308,
          "hill": -3.21144894462742
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 69.9163059150233,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -7.21461388699843,
          "upper": -7.19036498446774,
          "standardError": 0.00595230634535607,
          "dfResidual": 32,
          "tQuantile": 2.0369333434601,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -7.21464141279969,
          "upper": -7.19045085122905,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 7412.67158936291,
          "p": 1.52427857348119e-45,
          "df1": 3,
          "df2": 32,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -7.20248943573308,
          "ic50_M": 6.27350956187933e-08,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -7.15474026277832,
          "absoluteIC50_M": 7.00260673629771e-08
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C10",
      "description": "Bottom 20 (partial inhibition)",
      "truth": {
        "top": 100,
        "bottom": 20,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 20,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.960633819083199,
          "c": 19.634059045161,
          "d": 101.027431497261,
          "e": 9.59396914691087e-07
        },
        "standardErrors": {
          "b": 0.0792295920981795,
          "c": 1.59538218283261,
          "d": 1.4231464631891,
          "e": 8.70393767514182e-08
        },
        "wald": {
          "b": {
            "lower": 0.797775060113725,
            "upper": 1.12349257805267
          },
          "c": {
            "lower": 16.3547040024623,
            "upper": 22.9134140878598
          },
          "d": {
            "lower": 98.1021120466753,
            "upper": 103.952750947847
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 272.278310162598,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.027431497261,
          "bottom": 19.634059045161,
          "logIC50": -6.01800168250843,
          "hill": -0.960633819083199
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.8569626702446,
        "lnIC50StandardError": 0.0907238257438651,
        "waldLogIC50": {
          "lower": -6.09899204488757,
          "upper": -5.93701280236556
        },
        "logIC50": -6.01800242362656,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 101.027460723074,
          "bottom": 19.6340527878394,
          "logIC50": -6.01800237601521,
          "hill": -0.960632172284655
        },
        "standardErrors": {
          "top": 1.41355814737727,
          "bottom": 1.61974274289542,
          "logIC50": 0.0394613158735947,
          "hill": 0.0799949298805482
        },
        "wald": {
          "top": {
            "lower": 98.1218503379069,
            "upper": 103.933071108242
          },
          "bottom": {
            "lower": 16.3046238967897,
            "upper": 22.9634816788891
          },
          "logIC50": {
            "lower": -6.09911627248097,
            "upper": -5.93688847954945
          },
          "hill": {
            "lower": -1.12506410559629,
            "upper": -0.796200238973016
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 272.278310154503,
        "rss": 272.278310154503,
        "minimumFitted": 20.5610039896221,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.09915226130488,
          "upper": -5.93640571513816,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.71428333175553e-06,
          "logIC50Difference": -6.9350678355562e-07,
          "objectiveDrcMinusNls": 8.09507127996767e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.027460723074,
          "bottom": 19.6340527878394,
          "logIC50": -6.01800237601521,
          "hill": -0.960632172284655
        },
        "objective": 272.278310154503,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 272.278310154503,
        "polishedObjective": 272.278310154503,
        "relativeImprovement": 8.35078179066889e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.027460721707,
          "bottom": 19.6340527891197,
          "logIC50": -6.01800237620952,
          "hill": -0.96063217327133
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 272.278310154503,
        "threshold": 316.52564333565,
        "lower": -6.09915158374385,
        "upper": -5.93640642817023,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.991266040366326,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.7833473947652,
        "absoluteIC50_M": 1.64684454367426e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 1.64684501944626e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 62.5104666666667,
        "objectiveFlat": 31174.6700894667,
        "objectiveFull": 272.278310154503,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 983.628584304292,
        "p": 7.17165402459381e-27,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((31174.6701 - 272.27831) / 3) / (272.27831 / 26) = 983.628584; p = P(F(3, 26) > F) = 7.17165e-27 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 7.17165402459381e-27,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.697761608363258,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.71576398437847,
              "bendPoint_M": 1.92413710954584e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.32024076765195,
              "bendPoint_M": 4.78364819078965e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 4,
          "concentrationsPredictedAbove50": 6,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.162745155573622,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.027460723074,
          "bottom": 19.6340527878394,
          "logIC50": -6.01800237601521,
          "hill": -0.960632172284655
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 272.278310154503,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.09911627248097,
          "upper": -5.93688847954945,
          "standardError": 0.0394613158735947,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.09915158374385,
          "upper": -5.93640642817023,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 983.628584304292,
          "p": 7.17165402459381e-27,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.01800237601521,
          "ic50_M": 9.59395382671305e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.7833473947652,
          "absoluteIC50_M": 1.64684454367426e-06
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C11",
      "description": "Bottom -10 (undershoot below the 0% control)",
      "truth": {
        "top": 100,
        "bottom": -10,
        "logIC50": -6,
        "hill": -1.2,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1.2,
          "c": -10,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.15777011450539,
          "c": -9.27220074704226,
          "d": 99.1493591028686,
          "e": 9.43469283478873e-07
        },
        "standardErrors": {
          "b": 0.0739448533522486,
          "c": 1.4630796647296,
          "d": 1.32268350018979,
          "e": 5.69572950839011e-08
        },
        "wald": {
          "b": {
            "lower": 1.00101402803382,
            "upper": 1.31452620097696
          },
          "c": {
            "lower": -12.3737910814854,
            "upper": -6.17061041259912
          },
          "d": {
            "lower": 96.3453953416237,
            "upper": 101.953322864113
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 127.389002923167,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.1493591028686,
          "bottom": -9.27220074704226,
          "logIC50": -6.0252722345905,
          "hill": -1.15777011450539
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.8737026828783,
        "lnIC50StandardError": 0.0603705781159745,
        "waldLogIC50": {
          "lower": -6.08085348678125,
          "upper": -5.9696915506995
        },
        "logIC50": -6.02527251874038,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 99.149373760412,
          "bottom": -9.27221072092852,
          "logIC50": -6.02527236279612,
          "hill": -1.15776891966752
        },
        "standardErrors": {
          "top": 1.31720611359862,
          "bottom": 1.47054021278337,
          "logIC50": 0.0262340259073702,
          "hill": 0.0740155932252424
        },
        "wald": {
          "top": {
            "lower": 96.3570215400276,
            "upper": 101.941725980796
          },
          "bottom": {
            "lower": -12.3896167107259,
            "upper": -6.15480473113109
          },
          "logIC50": {
            "lower": -6.08088601333707,
            "upper": -5.96965871225518
          },
          "hill": {
            "lower": -1.31467496797072,
            "upper": -1.00086287136433
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 127.389002920852,
        "rss": 127.389002920852,
        "minimumFitted": -8.78427852294949,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.0808980919842,
          "upper": -5.96949935142132,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.07567626347721e-06,
          "logIC50Difference": -1.28205625671285e-07,
          "objectiveDrcMinusNls": 2.31496244396112e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.149373760412,
          "bottom": -9.27221072092852,
          "logIC50": -6.02527236279612,
          "hill": -1.15776891966752
        },
        "objective": 127.389002920852,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 127.389002920852,
        "polishedObjective": 127.389002920852,
        "relativeImprovement": 2.23109599563023e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.1493737608748,
          "bottom": -9.27221072156726,
          "logIC50": -6.02527236280257,
          "hill": -1.15776891956856
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 127.389002920852,
        "threshold": 163.169376995711,
        "lower": -6.08089797666968,
        "upper": -5.96949962051755,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.996841364366462,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.09552225097106,
        "absoluteIC50_M": 8.02560440832286e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 8.02560721645278e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 47.69665,
        "objectiveFlat": 40330.38871855,
        "objectiveFull": 127.389002920852,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 1683.15940596987,
        "p": 3.30318759919967e-20,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((40330.3887 - 127.389003) / 3) / (127.389003 / 16) = 1683.15941; p = P(F(3, 16) > F) = 3.30319e-20 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.30318759919967e-20,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.578951670054608,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.60422403285073,
              "bendPoint_M": 2.48757376062415e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.44632069274152,
              "bendPoint_M": 3.57832108303756e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.111398356152126,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.149373760412,
          "bottom": -9.27221072092852,
          "logIC50": -6.02527236279612,
          "hill": -1.15776891966752
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 127.389002920852,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.08088601333707,
          "upper": -5.96965871225518,
          "standardError": 0.0262340259073702,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.08089797666968,
          "upper": -5.96949962051755,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1683.15940596987,
          "p": 3.30318759919967e-20,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.02527236279612,
          "ic50_M": 9.43469004962666e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.09552225097106,
          "absoluteIC50_M": 8.02560440832286e-07
        }
      },
      "warnings": []
    },
    {
      "id": "C12",
      "description": "Top 90, Bottom 40",
      "truth": {
        "top": 90,
        "bottom": 40,
        "logIC50": -5,
        "hill": -1,
        "ic50_M": 1e-05,
        "drcLL4": {
          "b": 1,
          "c": 40,
          "d": 90,
          "e": 1e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.06005888509509,
          "c": 40.7740413799582,
          "d": 90.6154398060303,
          "e": 9.96261183897721e-06
        },
        "standardErrors": {
          "b": 0.0901537262497584,
          "c": 0.931542158402711,
          "d": 0.843960466312764,
          "e": 8.45554018734687e-07
        },
        "wald": {
          "b": {
            "lower": 0.874745246785359,
            "upper": 1.24537252340482
          },
          "c": {
            "lower": 38.8592290500246,
            "upper": 42.6888537098919
          },
          "d": {
            "lower": 88.8806542224736,
            "upper": 92.3502253895869
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 109.81583772434,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 90.6154398060303,
          "bottom": 40.7740413799582,
          "logIC50": -5.00162679023543,
          "hill": -1.06005888509509
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -11.5166730854036,
        "lnIC50StandardError": 0.0848732190264485,
        "waldLogIC50": {
          "lower": -5.0773943257241,
          "upper": -4.92586081602488
        },
        "logIC50": -5.00162757087449,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 90.6154511971473,
          "bottom": 40.7740374668291,
          "logIC50": -5.0016271781394,
          "hill": -1.06005751214191
        },
        "standardErrors": {
          "top": 0.823299319635037,
          "bottom": 0.948780062618828,
          "logIC50": 0.0369951732148321,
          "hill": 0.0890548873806751
        },
        "wald": {
          "top": {
            "lower": 88.9231352088228,
            "upper": 92.3077671854717
          },
          "bottom": {
            "lower": 38.8237921173187,
            "upper": 42.7242828163395
          },
          "logIC50": {
            "lower": -5.07767184577018,
            "upper": -4.92558251050862
          },
          "hill": {
            "lower": -1.24311245480791,
            "upper": -0.877002569475906
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 109.815837722905,
        "rss": 109.815837722905,
        "minimumFitted": 41.1477022948946,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.07790099398061,
          "upper": -4.92573378621057,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.29516689833214e-06,
          "logIC50Difference": -3.87903974718995e-07,
          "objectiveDrcMinusNls": 1.43541001307312e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 90.6154511971473,
          "bottom": 40.7740374668291,
          "logIC50": -5.0016271781394,
          "hill": -1.06005751214191
        },
        "objective": 109.815837722905,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 109.815837722905,
        "polishedObjective": 109.815837722904,
        "relativeImprovement": 1.81168736803555e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 90.6154512102863,
          "bottom": 40.7740374480128,
          "logIC50": -5.001627178273,
          "hill": -1.06005750762271
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 109.815837722905,
        "threshold": 127.661761467381,
        "lower": -5.0779004347824,
        "upper": -4.92573441221242,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.991080119917898,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -4.39441522198969,
        "absoluteIC50_M": 4.03259658506997e-05,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 4.03259343107734e-05,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 67.2051666666667,
        "objectiveFlat": 12311.3580801667,
        "objectiveFull": 109.815837722905,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 962.945797502729,
        "p": 9.42981975722595e-27,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((12311.3581 - 109.815838) / 3) / (109.815838 / 26) = 962.945798; p = P(F(3, 26) > F) = 9.42982e-27 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 9.42981975722595e-27,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.632316871397351,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -5.63394404953675,
              "bendPoint_M": 2.32303605544705e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -4.36931030674205,
              "bendPoint_M": 4.27257498300364e-05,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.152166022569985,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 90.6154511971473,
          "bottom": 40.7740374668291,
          "logIC50": -5.0016271781394,
          "hill": -1.06005751214191
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 109.815837722905,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.07767184577018,
          "upper": -4.92558251050862,
          "standardError": 0.0369951732148321,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.0779004347824,
          "upper": -4.92573441221242,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 962.945797502729,
          "p": 9.42981975722595e-27,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.0016271781394,
          "ic50_M": 9.96260294055651e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -4.39441522198969,
          "absoluteIC50_M": 4.03259658506997e-05
        }
      },
      "warnings": []
    },
    {
      "id": "C13",
      "description": "No lower plateau: IC50 half a log below the top concentration",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -4.5,
        "hill": -1,
        "ic50_M": 3.16227766016838e-05,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 3.16227766016838e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.908222891607846,
          "c": -10.3209035665932,
          "d": 101.250051206912,
          "e": 3.72157750657555e-05
        },
        "standardErrors": {
          "b": 0.164574978688182,
          "c": 20.737964364299,
          "d": 1.38444213886618,
          "e": 1.75142954277576e-05
        },
        "wald": {
          "b": {
            "lower": 0.559339522167543,
            "upper": 1.25710626104815
          },
          "c": {
            "lower": -54.2834241175322,
            "upper": 33.6416169843457
          },
          "d": {
            "lower": 98.3151649802645,
            "upper": 104.18493743356
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 248.431777793376,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.250051206912,
          "bottom": -10.3209035665932,
          "logIC50": -4.42927293184407,
          "hill": -0.908222891607846
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -10.1985268988602,
        "lnIC50StandardError": 0.470952938641327,
        "waldLogIC50": {
          "lower": -4.86275298282702,
          "upper": -3.99557492860676
        },
        "logIC50": -4.42916395571689,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 101.250060101305,
          "bottom": -10.3211464622679,
          "logIC50": -4.42927053473361,
          "hill": -0.908220750591176
        },
        "standardErrors": {
          "top": 1.41518008703203,
          "bottom": 21.2253648291849,
          "logIC50": 0.208406765239152,
          "hill": 0.172861493160345
        },
        "wald": {
          "top": {
            "lower": 98.250012335453,
            "upper": 104.250107867156
          },
          "bottom": {
            "lower": -55.3169098415613,
            "upper": 34.6746169170255
          },
          "logIC50": {
            "lower": -4.87107314075765,
            "upper": -3.98746792870957
          },
          "hill": {
            "lower": -1.27467074597309,
            "upper": -0.541770755209262
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 248.431777790911,
        "rss": 248.431777790911,
        "minimumFitted": 21.9809957486843,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -4.71547965895861,
          "upper": -3.4232041487084,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 2.3534342036986e-05,
          "logIC50Difference": 2.39711045857405e-06,
          "objectiveDrcMinusNls": 2.46541276283097e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.250060101305,
          "bottom": -10.3211464622679,
          "logIC50": -4.42927053473361,
          "hill": -0.908220750591176
        },
        "objective": 248.431777790911,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 248.431777790911,
        "polishedObjective": 248.431777790907,
        "relativeImprovement": 1.64742457441285e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.250059686011,
          "bottom": -10.3211394051332,
          "logIC50": -4.4292706016865,
          "hill": -0.908220823210613
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 248.431777790911,
        "threshold": 318.210029740679,
        "lower": -4.71599111893992,
        "upper": -3.42441032440203,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.982068406881163,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -4.50719785367712,
        "absoluteIC50_M": 3.1102990400283e-05,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 3.11029638376366e-05,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 83.23675,
        "objectiveFlat": 13854.41751575,
        "objectiveFull": 248.431777790911,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 292.093297863805,
        "p": 3.54004949365083e-14,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((13854.4175 - 248.431778) / 3) / (248.431778 / 16) = 292.093298; p = P(F(3, 16) > F) = 3.54005e-14 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.54004949365083e-14,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 9,
          "concentrationsAboveIC50": 1,
          "fires": true
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.738027895908046,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -5.16729843064166,
              "bendPoint_M": 6.80301720585879e-06,
              "concentrationsAtOrBeyond": 7,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -3.69124263882556,
              "bendPoint_M": 0.000203590430720334,
              "concentrationsAtOrBeyond": 0,
              "fires": true
            }
          },
          "fires": true
        },
        "v": {
          "concentrationsPredictedBelow50": 2,
          "concentrationsPredictedAbove50": 8,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 1.29158079453789,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.250060101305,
          "bottom": -10.3211464622679,
          "logIC50": -4.42927053473361,
          "hill": -0.908220750591176
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 248.431777790911,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -4.87107314075765,
          "upper": -3.98746792870957,
          "standardError": 0.208406765239152,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -4.71599111893992,
          "upper": -3.42441032440203,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 292.093297863805,
          "p": 3.54004949365083e-14,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "iii",
          "reason": "IC50 not bracketed: only one concentration above it",
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -4.50719785367712,
          "absoluteIC50_M": 3.1102990400283e-05
        }
      },
      "warnings": []
    },
    {
      "id": "C14",
      "description": "No lower plateau, Hill -1.5, Bottom 10, 8 points",
      "truth": {
        "top": 100,
        "bottom": 10,
        "logIC50": -4.3,
        "hill": -1.5,
        "ic50_M": 5.01187233627273e-05,
        "drcLL4": {
          "b": 1.5,
          "c": 10,
          "d": 100,
          "e": 5.01187233627273e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 24,
      "distinctConcentrations": 8,
      "drcLL4": {
        "estimates": {
          "b": 1.32528989613874,
          "c": -3.42376598679554,
          "d": 99.615206395719,
          "e": 6.4412164989563e-05
        },
        "standardErrors": {
          "b": 0.22555566836706,
          "c": 21.4847303707993,
          "d": 0.780277593896129,
          "e": 2.27542817727078e-05
        },
        "wald": {
          "b": {
            "lower": 0.854789016601434,
            "upper": 1.79579077567605
          },
          "c": {
            "lower": -48.2401282146457,
            "upper": 41.3925962410546
          },
          "d": {
            "lower": 97.9875758561311,
            "upper": 101.242836935307
          }
        },
        "dfResidual": 20,
        "tQuantile": 2.08596344726586,
        "rss": 132.407080762765,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.615206395719,
          "bottom": -3.42376598679554,
          "logIC50": -4.19103210330925,
          "hill": -1.32528989613874
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -9.6497983128639,
        "lnIC50StandardError": 0.353996355494146,
        "waldLogIC50": {
          "lower": -4.51154739188476,
          "upper": -3.87016092562744
        },
        "logIC50": -4.1908541587561,
        "dfResidual": 20
      },
      "nls": {
        "estimates": {
          "top": 99.615213403484,
          "bottom": -3.4241306181461,
          "logIC50": -4.19102950092458,
          "hill": -1.32528590446269
        },
        "standardErrors": {
          "top": 0.786272451028685,
          "bottom": 21.9757655640508,
          "logIC50": 0.156882981486224,
          "hill": 0.231568682797786
        },
        "wald": {
          "top": {
            "lower": 97.975077811046,
            "upper": 101.255348995922
          },
          "bottom": {
            "lower": -49.26477431044,
            "upper": 42.4165130741478
          },
          "logIC50": {
            "lower": -4.51828166580293,
            "upper": -3.86377733604623
          },
          "hill": {
            "lower": -1.80832971231037,
            "upper": -0.842242096615002
          }
        },
        "dfResidual": 20,
        "tQuantile": 2.08596344726586,
        "objective": 132.407080760561,
        "rss": 132.407080760561,
        "minimumFitted": 33.490312943708,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -4.3834596089353,
          "upper": -3.43652020820775,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 0.000106500079726932,
          "logIC50Difference": 2.6023846722012e-06,
          "objectiveDrcMinusNls": 2.20367724068637e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.615213403484,
          "bottom": -3.4241306181461,
          "logIC50": -4.19102950092458,
          "hill": -1.32528590446269
        },
        "objective": 132.407080760561,
        "df": 20,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 132.407080760561,
        "polishedObjective": 132.407080760557,
        "relativeImprovement": 3.32713699026345e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.6152134312115,
          "bottom": -3.42414286476599,
          "logIC50": -4.1910294134235,
          "hill": -1.32528581780785
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 132.407080760561,
        "threshold": 161.21385325827,
        "lower": -4.38964961194861,
        "upper": -3.43811818126704,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.988833677129636,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -4.2152677424633,
        "absoluteIC50_M": 6.09161233672187e-05,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 6.09160758106057e-05,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 86.0375,
        "objectiveFlat": 11857.715588,
        "objectiveFull": 132.407080760561,
        "weighted": false,
        "n": 24,
        "parametersFull": 4,
        "df1": 3,
        "df2": 20,
        "F": 590.366640005854,
        "p": 1.10944078336797e-19,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((11857.7156 - 132.407081) / 3) / (132.407081 / 20) = 590.36664; p = P(F(3, 20) > F) = 1.10944e-19 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 8,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.10944078336797e-19,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 7,
          "concentrationsAboveIC50": 1,
          "fires": true
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.50577180917848,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -4.69680131010306,
              "bendPoint_M": 2.01001218365401e-05,
              "concentrationsAtOrBeyond": 6,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -3.6852576917461,
              "bendPoint_M": 0.000206415501118991,
              "concentrationsAtOrBeyond": 0,
              "fires": true
            }
          },
          "fires": true
        },
        "v": {
          "concentrationsPredictedBelow50": 1,
          "concentrationsPredictedAbove50": 7,
          "fires": true
        },
        "vi": {
          "profileWidthLog10": 0.951531430681576,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.615213403484,
          "bottom": -3.4241306181461,
          "logIC50": -4.19102950092458,
          "hill": -1.32528590446269
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 132.407080760561,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -4.51828166580293,
          "upper": -3.86377733604623,
          "standardError": 0.156882981486224,
          "dfResidual": 20,
          "tQuantile": 2.08596344726586,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -4.38964961194861,
          "upper": -3.43811818126704,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 590.366640005854,
          "p": 1.10944078336797e-19,
          "df1": 3,
          "df2": 20,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "iii",
          "reason": "IC50 not bracketed: only one concentration above it",
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": false,
          "withheldBy": "v",
          "reason": "below 50 percent only at 100 <c2><b5>M"
        }
      },
      "warnings": []
    },
    {
      "id": "C15",
      "description": "No upper plateau: IC50 near the lowest concentration",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -8.3,
        "hill": -1,
        "ic50_M": 5.01187233627271e-09,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 5.01187233627271e-09
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.16545509502716,
          "c": -0.598731354709045,
          "d": 68.5040379970818,
          "e": 1.06416244591969e-08
        },
        "standardErrors": {
          "b": 0.26350977944611,
          "c": 0.874579836814402,
          "d": 16.1939900754496,
          "e": 5.03033226641266e-09
        },
        "wald": {
          "b": {
            "lower": 0.606839317182729,
            "upper": 1.72407087287159
          },
          "c": {
            "lower": -2.45275778536396,
            "upper": 1.25529507594587
          },
          "d": {
            "lower": 34.1743126205998,
            "upper": 102.833763373564
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 129.482833416024,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 68.5040379970818,
          "bottom": -0.598731354709045,
          "logIC50": -7.97299207130646,
          "hill": -1.16545509502716
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -18.3596825736857,
        "lnIC50StandardError": 0.475903761358306,
        "waldLogIC50": {
          "lower": -8.41165589851172,
          "upper": -7.53536176398228
        },
        "logIC50": -7.973508831247,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 68.5306437437621,
          "bottom": -0.599079562389216,
          "logIC50": -7.97333398480237,
          "hill": -1.16506004688614
        },
        "standardErrors": {
          "top": 17.1486552931451,
          "bottom": 0.894087538795578,
          "logIC50": 0.216517626822645,
          "hill": 0.286824110617504
        },
        "wald": {
          "top": {
            "lower": 32.1771185133052,
            "upper": 104.884168974219
          },
          "bottom": {
            "lower": -2.49446047384965,
            "upper": 1.29630134907122
          },
          "logIC50": {
            "lower": -8.4323308492785,
            "upper": -7.51433712032623
          },
          "hill": {
            "lower": -1.77309999892861,
            "upper": -0.557020094843673
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 129.482811178895,
        "rss": 129.482811178895,
        "minimumFitted": -0.597455951558116,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -9.84394051236387,
          "upper": -7.71759143917191,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 0.000581575822666947,
          "logIC50Difference": -0.000341913495908841,
          "objectiveDrcMinusNls": 2.22371290874435e-05
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 68.5306437437621,
          "bottom": -0.599079562389216,
          "logIC50": -7.97333398480237,
          "hill": -1.16506004688614
        },
        "objective": 129.482811178895,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 129.482811178895,
        "polishedObjective": 129.482811178895,
        "relativeImprovement": 2.1950179465239e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 68.5306439066424,
          "bottom": -0.599079535414363,
          "logIC50": -7.97333398701331,
          "hill": -1.16506004465046
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 129.482811178895,
        "threshold": 165.851283449015,
        "lower": -9.87139048881269,
        "upper": -7.71313469536227,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.973770958374611,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -8.34778001545678,
        "absoluteIC50_M": 4.48972751918359e-09,
        "withinTestedRange": false,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 4.48906586363322e-09,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 8.53755,
        "objectiveFlat": 4936.61998895,
        "objectiveFull": 129.482811178895,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 198.003616964191,
        "p": 7.39067075037193e-13,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((4936.61999 - 129.482811) / 3) / (129.482811 / 16) = 198.003617; p = P(F(3, 16) > F) = 7.39067e-13 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 7.39067075037193e-13,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 1,
          "concentrationsAboveIC50": 9,
          "fires": true
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.575328500338092,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -8.54866248514046,
              "bendPoint_M": 2.82707620256637e-09,
              "concentrationsAtOrBeyond": 0,
              "fires": true
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -7.39800548446427,
              "bendPoint_M": 3.99939699112441e-08,
              "concentrationsAtOrBeyond": 8,
              "fires": false
            }
          },
          "fires": true
        },
        "v": {
          "concentrationsPredictedBelow50": 10,
          "concentrationsPredictedAbove50": 0,
          "fires": true
        },
        "vi": {
          "profileWidthLog10": 2.15825579345042,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": true
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 68.5306437437621,
          "bottom": -0.599079562389216,
          "logIC50": -7.97333398480237,
          "hill": -1.16506004688614
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 129.482811178895,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -8.4323308492785,
          "upper": -7.51433712032623,
          "standardError": 0.216517626822645,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -9.87139048881269,
          "upper": -7.71313469536227,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 198.003616964191,
          "p": 7.39067075037193e-13,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "iii",
          "reason": "IC50 not bracketed: only one concentration below it",
          "poorlyDetermined": true,
          "poorlyDeterminedReason": "poorly determined: profile interval 2.16 log units wide"
        },
        "absoluteIC50": {
          "shown": false,
          "withheldBy": "v",
          "reason": "above 50 percent at no tested concentration"
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C16",
      "description": "Triplicates with one excluded well (outlier near the IC50)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 1,
      "fixed": {},
      "weighting": "none",
      "n": 29,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.977221117509355,
          "c": -1.10313736463458,
          "d": 99.4356834379734,
          "e": 1.05985918289299e-06
        },
        "standardErrors": {
          "b": 0.0499870597882786,
          "c": 1.23422285816728,
          "d": 1.02556478959519,
          "e": 6.09365402622065e-08
        },
        "wald": {
          "b": {
            "lower": 0.874270840736611,
            "upper": 1.0801713942821
          },
          "c": {
            "lower": -3.64506692371946,
            "upper": 1.4387921944503
          },
          "d": {
            "lower": 97.3234932154558,
            "upper": 101.547873660491
          }
        },
        "dfResidual": 25,
        "tQuantile": 2.0595385527533,
        "rss": 144.994987815485,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.4356834379734,
          "bottom": -1.10313736463458,
          "logIC50": -5.97475183299473,
          "hill": -0.977221117509355
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.7573729923826,
        "lnIC50StandardError": 0.0574948745108833,
        "waldLogIC50": {
          "lower": -6.02617724975402,
          "upper": -5.92332510239915
        },
        "logIC50": -5.97475117607659,
        "dfResidual": 25
      },
      "nls": {
        "estimates": {
          "top": 99.4357075021827,
          "bottom": -1.10316002077455,
          "logIC50": -5.97475193755496,
          "hill": -0.977219485275384
        },
        "standardErrors": {
          "top": 1.0170054245796,
          "bottom": 1.22577202286162,
          "logIC50": 0.0250242278894109,
          "hill": 0.0489966823541883
        },
        "wald": {
          "top": {
            "lower": 97.3411456219018,
            "upper": 101.530269382464
          },
          "bottom": {
            "lower": -3.62768475874445,
            "upper": 1.42136471719534
          },
          "logIC50": {
            "lower": -6.02629029964609,
            "upper": -5.92321357546383
          },
          "hill": {
            "lower": -1.07813004154084,
            "upper": -0.876308929009926
          }
        },
        "dfResidual": 25,
        "tQuantile": 2.0595385527533,
        "objective": 144.994987809169,
        "rss": 144.994987809169,
        "minimumFitted": 0.0649733382447777,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.02590491095235,
          "upper": -5.92292172966007,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 2.05379136784364e-05,
          "logIC50Difference": -1.04560226255046e-07,
          "objectiveDrcMinusNls": 6.31644070381299e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.4357075021827,
          "bottom": -1.10316002077455,
          "logIC50": -5.97475193755496,
          "hill": -0.977219485275384
        },
        "objective": 144.994987809169,
        "df": 25,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 144.994987809169,
        "polishedObjective": 144.994987809166,
        "relativeImprovement": 1.97978750565424e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.4357070674475,
          "bottom": -1.10315931446399,
          "logIC50": -5.97475194002146,
          "hill": -0.977219517866534
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 144.994987809169,
        "threshold": 169.595991892573,
        "lower": -6.02590512446201,
        "upper": -5.92292181072272,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99694970548764,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.98949478938694,
        "absoluteIC50_M": 1.02448407187357e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 1.02448433107849e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 53.0169310344828,
        "objectiveFlat": 47534.7502418621,
        "objectiveFull": 144.994987809169,
        "weighted": false,
        "n": 29,
        "parametersFull": 4,
        "df1": 3,
        "df2": 25,
        "F": 2723.64330025576,
        "p": 1.46980464217381e-31,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((47534.7502 - 144.994988) / 3) / (144.994988 / 25) = 2723.6433; p = P(F(3, 25) > F) = 1.4698e-31 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.46980464217381e-31,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.685917810357559,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.66066974791252,
              "bendPoint_M": 2.18439036411446e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.2888341271974,
              "bendPoint_M": 5.14240020981151e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.102983313739297,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.4357075021827,
          "bottom": -1.10316002077455,
          "logIC50": -5.97475193755496,
          "hill": -0.977219485275384
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 144.994987809169,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.02629029964609,
          "upper": -5.92321357546383,
          "standardError": 0.0250242278894109,
          "dfResidual": 25,
          "tQuantile": 2.0595385527533,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.02590512446201,
          "upper": -5.92292181072272,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 2723.64330025576,
          "p": 1.46980464217381e-31,
          "df1": 3,
          "df2": 25,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.97475193755496,
          "ic50_M": 1.05985892772257e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.98949478938694,
          "absoluteIC50_M": 1.02448407187357e-06
        }
      },
      "warnings": []
    },
    {
      "id": "C17",
      "description": "Triplicates with one excluded well (outlier on the top plateau)",
      "truth": {
        "top": 100,
        "bottom": 5,
        "logIC50": -6.8,
        "hill": -1.3,
        "ic50_M": 1.58489319246111e-07,
        "drcLL4": {
          "b": 1.3,
          "c": 5,
          "d": 100,
          "e": 1.58489319246111e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 1,
      "fixed": {},
      "weighting": "none",
      "n": 29,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.21937280732905,
          "c": 4.57591720440599,
          "d": 101.890120034041,
          "e": 1.63918949198665e-07
        },
        "standardErrors": {
          "b": 0.0762827677790942,
          "c": 0.90347551536306,
          "d": 1.84001116251277,
          "e": 1.02013111261727e-08
        },
        "wald": {
          "b": {
            "lower": 1.06226550617728,
            "upper": 1.37648010848082
          },
          "c": {
            "lower": 2.71517454904711,
            "upper": 6.43665985976486
          },
          "d": {
            "lower": 98.1005461073493,
            "upper": 105.679693960732
          }
        },
        "dfResidual": 25,
        "tQuantile": 2.0595385527533,
        "rss": 215.716786392586,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.890120034041,
          "bottom": 4.57591720440599,
          "logIC50": -6.78537083863983,
          "hill": -1.21937280732905
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -15.6239021401954,
        "lnIC50StandardError": 0.0622398661680559,
        "waldLogIC50": {
          "lower": -6.84104469885382,
          "upper": -6.72970427171274
        },
        "logIC50": -6.78537448528328,
        "dfResidual": 25
      },
      "nls": {
        "estimates": {
          "top": 101.890299438551,
          "bottom": 4.57593832179437,
          "logIC50": -6.78537448577041,
          "hill": -1.219368331825
        },
        "standardErrors": {
          "top": 1.85712925421365,
          "bottom": 0.917449916023496,
          "logIC50": 0.0267561406903838,
          "hill": 0.080039103056566
        },
        "wald": {
          "top": {
            "lower": 98.0654701420524,
            "upper": 105.71512873505
          },
          "bottom": {
            "lower": 2.68641484952371,
            "upper": 6.46546179406504
          },
          "logIC50": {
            "lower": -6.84047978904514,
            "upper": -6.73026918249567
          },
          "hill": {
            "lower": -1.38421195029779,
            "upper": -1.05452471335221
          }
        },
        "dfResidual": 25,
        "tQuantile": 2.0595385527533,
        "objective": 215.716786233572,
        "rss": 215.716786233572,
        "minimumFitted": 4.61498689722913,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.84262839192627,
          "upper": -6.73077191906162,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 4.61489739481566e-06,
          "logIC50Difference": -3.64713057532384e-06,
          "objectiveDrcMinusNls": 1.59013438860711e-07
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.890299438551,
          "bottom": 4.57593832179437,
          "logIC50": -6.78537448577041,
          "hill": -1.219368331825
        },
        "objective": 215.716786233572,
        "df": 25,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 215.716786233572,
        "polishedObjective": 215.716786233572,
        "relativeImprovement": 3.9526422481971e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.890299484951,
          "bottom": 4.57593837273043,
          "logIC50": -6.78537448734507,
          "hill": -1.2193683312635
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 215.716786233572,
        "threshold": 252.317013725403,
        "lower": -6.84262719657129,
        "upper": -6.73077079519529,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.994787038195944,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.73797272007268,
        "absoluteIC50_M": 1.82821505068345e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 1.82822379064418e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 38.1848620689655,
        "objectiveFlat": 41380.8491874483,
        "objectiveFull": 215.716786233572,
        "weighted": false,
        "n": 29,
        "parametersFull": 4,
        "df1": 3,
        "df2": 25,
        "F": 1590.24606290345,
        "p": 1.19153753223168e-28,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((41380.8492 - 215.716786) / 3) / (215.716786 / 25) = 1590.24606; p = P(F(3, 25) > F) = 1.19154e-28 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.19153753223168e-28,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 4,
          "concentrationsAboveIC50": 6,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.549704492141125,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.33507897791153,
              "bendPoint_M": 4.62296943501259e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -6.23566999362928,
              "bendPoint_M": 5.81205889381297e-07,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 6,
          "concentrationsPredictedAbove50": 4,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.111856401376,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.890299438551,
          "bottom": 4.57593832179437,
          "logIC50": -6.78537448577041,
          "hill": -1.219368331825
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 215.716786233572,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.84047978904514,
          "upper": -6.73026918249567,
          "standardError": 0.0267561406903838,
          "dfResidual": 25,
          "tQuantile": 2.0595385527533,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.84262719657129,
          "upper": -6.73077079519529,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1590.24606290345,
          "p": 1.19153753223168e-28,
          "df1": 3,
          "df2": 25,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.78537448577041,
          "ic50_M": 1.63917572641222e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.73797272007268,
          "absoluteIC50_M": 1.82821505068345e-07
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C18",
      "description": "Quadruplicates with one excluded well, Hill -0.8",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5.5,
        "hill": -0.8,
        "ic50_M": 3.16227766016838e-06,
        "drcLL4": {
          "b": 0.8,
          "c": 0,
          "d": 100,
          "e": 3.16227766016838e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 1,
      "fixed": {},
      "weighting": "none",
      "n": 39,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.725925855579873,
          "c": -0.915891704642046,
          "d": 100.686072339893,
          "e": 3.53132333059978e-06
        },
        "standardErrors": {
          "b": 0.0645050852522359,
          "c": 3.70883360743479,
          "d": 1.4977497151242,
          "e": 4.74340934952058e-07
        },
        "wald": {
          "b": {
            "lower": 0.594973570596845,
            "upper": 0.856878140562902
          },
          "c": {
            "lower": -8.44522421565674,
            "upper": 6.61344080637264
          },
          "d": {
            "lower": 97.6454787686849,
            "upper": 103.726665911101
          }
        },
        "dfResidual": 35,
        "tQuantile": 2.03010792825034,
        "rss": 478.436266671588,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100.686072339893,
          "bottom": -0.915891704642046,
          "logIC50": -5.45206251628946,
          "hill": -0.725925855579873
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -12.5538284329929,
        "lnIC50StandardError": 0.134326268451476,
        "waldLogIC50": {
          "lower": -5.57048914047744,
          "upper": -5.33362768994052
        },
        "logIC50": -5.45205841520898,
        "dfResidual": 35
      },
      "nls": {
        "estimates": {
          "top": 100.686119892139,
          "bottom": -0.916014034594259,
          "logIC50": -5.45206126789718,
          "hill": -0.725923115421495
        },
        "standardErrors": {
          "top": 1.47459595893568,
          "bottom": 3.72332682835738,
          "logIC50": 0.0591392872207739,
          "hill": 0.0637299379797669
        },
        "wald": {
          "top": {
            "lower": 97.6925309449376,
            "upper": 103.67970883934
          },
          "bottom": {
            "lower": -8.47476934830978,
            "upper": 6.64274127912126
          },
          "logIC50": {
            "lower": -5.57212040375515,
            "upper": -5.33200213203921
          },
          "hill": {
            "lower": -0.855301767781123,
            "upper": -0.596544463061868
          }
        },
        "dfResidual": 35,
        "tQuantile": 2.03010792825034,
        "objective": 478.436266646526,
        "rss": 478.436266646526,
        "minimumFitted": 7.32675357546276,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.56028258276478,
          "upper": -5.31531315519153,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 0.000133563773526387,
          "logIC50Difference": 1.24839228288209e-06,
          "objectiveDrcMinusNls": 2.50616949415416e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 100.686119892139,
          "bottom": -0.916014034594259,
          "logIC50": -5.45206126789718,
          "hill": -0.725923115421495
        },
        "objective": 478.436266646526,
        "df": 35,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 478.436266646526,
        "polishedObjective": 478.436266646524,
        "relativeImprovement": 5.70292073475821e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 100.68611970009,
          "bottom": -0.916015070750632,
          "logIC50": -5.45206124435839,
          "hill": -0.72592310761912
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 478.436266646526,
        "threshold": 534.773342708262,
        "lower": -5.56029651555886,
        "upper": -5.31533765148345,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.989563910466002,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.45476864965794,
        "absoluteIC50_M": 3.50938770601692e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 3.50938478026939e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 64.9163076923077,
        "objectiveFlat": 45844.4003463077,
        "objectiveFull": 478.436266646526,
        "weighted": false,
        "n": 39,
        "parametersFull": 4,
        "df1": 3,
        "df2": 35,
        "F": 1106.24887331213,
        "p": 1.01242755144183e-34,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((45844.4003 - 478.436267) / 3) / (478.436267 / 35) = 1106.24887; p = P(F(3, 35) > F) = 1.01243e-34 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.01242755144183e-34,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 6,
          "concentrationsAboveIC50": 4,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.923365347292512,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.37542661518969,
              "bendPoint_M": 4.2128246684813e-07,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -4.52869592060467,
              "bendPoint_M": 2.96008429947552e-05,
              "concentrationsAtOrBeyond": 2,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 4,
          "concentrationsPredictedAbove50": 6,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.244958864075413,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 100.686119892139,
          "bottom": -0.916014034594259,
          "logIC50": -5.45206126789718,
          "hill": -0.725923115421495
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 478.436266646526,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.57212040375515,
          "upper": -5.33200213203921,
          "standardError": 0.0591392872207739,
          "dfResidual": 35,
          "tQuantile": 2.03010792825034,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.56029651555886,
          "upper": -5.31533765148345,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1106.24887331213,
          "p": 1.01242755144183e-34,
          "df1": 3,
          "df2": 35,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.45206126789718,
          "ic50_M": 3.53133348150732e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.45476864965794,
          "absoluteIC50_M": 3.50938770601692e-06
        }
      },
      "warnings": []
    },
    {
      "id": "C19",
      "description": "Rising (agonist) curve, Hill +1",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -7,
        "hill": 1,
        "ic50_M": 1e-07,
        "drcLL4": {
          "b": -1,
          "c": 0,
          "d": 100,
          "e": 1e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": -1.04924520236627,
          "c": 2.59625770958634,
          "d": 98.7384204018647,
          "e": 1.00153918727781e-07
        },
        "standardErrors": {
          "b": 0.0770714149423182,
          "c": 1.38152493367945,
          "d": 1.6087056390377,
          "e": 7.45237397459881e-09
        },
        "wald": {
          "b": {
            "lower": -1.20766776465806,
            "upper": -0.89082264007447
          },
          "c": {
            "lower": -0.243507461810912,
            "upper": 5.43602288098358
          },
          "d": {
            "lower": 95.4316786027119,
            "upper": 102.045162201018
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 305.327093665808,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 98.7384204018647,
          "bottom": 2.59625770958634,
          "logIC50": -6.99933205337434,
          "hill": 1.04924520236627
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -16.116558234801,
        "lnIC50StandardError": 0.0744100527700845,
        "waldLogIC50": {
          "lower": -7.06575854169439,
          "upper": -6.93290607559856
        },
        "logIC50": -6.99933230864648,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 98.738428844708,
          "bottom": 2.59624079493348,
          "logIC50": -6.99933228855033,
          "hill": 1.04924408737172
        },
        "standardErrors": {
          "top": 1.59798852920142,
          "bottom": 1.38183248261633,
          "logIC50": 0.0323151339091928,
          "hill": 0.0763824049172251
        },
        "wald": {
          "top": {
            "lower": 95.4537163803208,
            "upper": 102.023141309095
          },
          "bottom": {
            "lower": -0.244156552357365,
            "upper": 5.43663814222432
          },
          "logIC50": {
            "lower": -7.06575699761436,
            "upper": -6.9329075794863
          },
          "hill": {
            "lower": 0.892237805470021,
            "upper": 1.20625036927341
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 305.327093662471,
        "rss": 305.327093662471,
        "minimumFitted": 2.97074497318574,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -7.06552495566765,
          "upper": -6.93221700645192,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 6.51501305039123e-06,
          "logIC50Difference": -2.3517598979339e-07,
          "objectiveDrcMinusNls": 3.33642447003513e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 98.738428844708,
          "bottom": 2.59624079493348,
          "logIC50": -6.99933228855033,
          "hill": 1.04924408737172
        },
        "objective": 305.327093662471,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 305.327093662471,
        "polishedObjective": 305.327093662471,
        "relativeImprovement": 7.44688827695671e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 98.7384290178306,
          "bottom": 2.59624073179631,
          "logIC50": -6.99933228705072,
          "hill": 1.04924407737832
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 305.327093662471,
        "threshold": 354.945110003356,
        "lower": -7.06552465700872,
        "upper": -6.93221717576951,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.993284067998018,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -7.01082507817486,
        "absoluteIC50_M": 9.75382415715825e-08,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.75382800657945e-08,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 47.7088666666667,
        "objectiveFlat": 45463.1008134667,
        "objectiveFull": 305.327093662471,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 1281.79706407236,
        "p": 2.35866148441371e-28,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((45463.1008 - 305.327094) / 3) / (305.327094 / 26) = 1281.79706; p = P(F(3, 26) > F) = 2.35866e-28 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 2.35866148441371e-28,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.638833477973525,
          "plateaus": {
            "top": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -6.3604988105768,
              "bendPoint_M": 4.36014758133364e-07,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.63816576652385,
              "bendPoint_M": 2.30056354419289e-08,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.133307481239206,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 98.738428844708,
          "bottom": 2.59624079493348,
          "logIC50": -6.99933228855033,
          "hill": 1.04924408737172
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 305.327093662471,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -7.06575699761436,
          "upper": -6.9329075794863,
          "standardError": 0.0323151339091928,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -7.06552465700872,
          "upper": -6.93221717576951,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1281.79706407236,
          "p": 2.35866148441371e-28,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.99933228855033,
          "ic50_M": 1.00153864493174e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -7.01082507817486,
          "absoluteIC50_M": 9.75382415715825e-08
        }
      },
      "warnings": []
    },
    {
      "id": "C20",
      "description": "Rising curve, Hill +2, Bottom 10, Top 120",
      "truth": {
        "top": 120,
        "bottom": 10,
        "logIC50": -8,
        "hill": 2,
        "ic50_M": 1e-08,
        "drcLL4": {
          "b": -2,
          "c": 10,
          "d": 120,
          "e": 1e-08
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": -2.23140781805109,
          "c": 11.9065073015618,
          "d": 119.745131253691,
          "e": 9.70241312598817e-09
        },
        "standardErrors": {
          "b": 0.197219309756234,
          "c": 1.23981851560009,
          "d": 1.29973373771154,
          "e": 4.21944310997571e-10
        },
        "wald": {
          "b": {
            "lower": -2.64949407791208,
            "upper": -1.81332155819009
          },
          "c": {
            "lower": 9.27820946026855,
            "upper": 14.5348051428551
          },
          "d": {
            "lower": 116.98981881554,
            "upper": 122.500443691843
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 177.738286197931,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 119.745131253691,
          "bottom": 11.9065073015618,
          "logIC50": -8.01312023718087,
          "hill": 2.23140781805109
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -18.4509440024178,
        "lnIC50StandardError": 0.0434907016376986,
        "waldLogIC50": {
          "lower": -8.0531834535482,
          "upper": -7.97310287876369
        },
        "logIC50": -8.01314316615594,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 119.745129856525,
          "bottom": 11.9065035177588,
          "logIC50": -8.0131203554833,
          "hill": 2.23140718831615
        },
        "standardErrors": {
          "top": 1.30089144956498,
          "bottom": 1.23465705885563,
          "logIC50": 0.0188394130534081,
          "hill": 0.194669914171258
        },
        "wald": {
          "top": {
            "lower": 116.98736317888,
            "upper": 122.502896534169
          },
          "bottom": {
            "lower": 9.28914747596981,
            "upper": 14.5238595595478
          },
          "logIC50": {
            "lower": -8.05305812704944,
            "upper": -7.97318258391717
          },
          "hill": {
            "lower": 1.81872540566555,
            "upper": 2.64408897096674
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 177.738286197445,
        "rss": 177.738286197445,
        "minimumFitted": 11.9073805102402,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -8.05399774570673,
          "upper": -7.97392915427782,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 3.17792861925398e-07,
          "logIC50Difference": -1.18302430962558e-07,
          "objectiveDrcMinusNls": 4.85897544422187e-10
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 119.745129856525,
          "bottom": 11.9065035177588,
          "logIC50": -8.0131203554833,
          "hill": 2.23140718831615
        },
        "objective": 177.738286197445,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 177.738286197445,
        "polishedObjective": 177.738286197445,
        "relativeImprovement": 6.39630549803569e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 119.745129878507,
          "bottom": 11.9065035198455,
          "logIC50": -8.01312035443775,
          "hill": 2.23140719710842
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 177.738286197445,
        "threshold": 227.660510422092,
        "lower": -8.05399686633441,
        "upper": -7.9739284809419,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.996345566076874,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -8.1308321973966,
        "absoluteIC50_M": 7.39891098791337e-09,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 7.39891317356282e-09,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 62.81615,
        "objectiveFlat": 48636.33874255,
        "objectiveFull": 177.738286197445,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 1454.08102345178,
        "p": 1.06023445544632e-19,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((48636.3387 - 177.738286) / 3) / (177.738286 / 16) = 1454.08102; p = P(F(3, 16) > F) = 1.06023e-19 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.06023445544632e-19,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.300389930214684,
          "plateaus": {
            "top": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -7.71273042526862,
              "bendPoint_M": 1.93762431050381e-08,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -8.31351028569799,
              "bendPoint_M": 4.8583602440908e-09,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.0800683853925142,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 119.745129856525,
          "bottom": 11.9065035177588,
          "logIC50": -8.0131203554833,
          "hill": 2.23140718831615
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 177.738286197445,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -8.05305812704944,
          "upper": -7.97318258391717,
          "standardError": 0.0188394130534081,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -8.05399686633441,
          "upper": -7.9739284809419,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1454.08102345178,
          "p": 1.06023445544632e-19,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -8.0131203554833,
          "ic50_M": 9.70241048303749e-09,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -8.1308321973966,
          "absoluteIC50_M": 7.39891098791337e-09
        }
      },
      "warnings": []
    },
    {
      "id": "C21",
      "description": "Nanomolar potency on a 100 nM top concentration",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -9,
        "hill": -1,
        "ic50_M": 1e-09,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-09
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.05674858504585,
          "c": 1.08992211374172,
          "d": 99.3720800768941,
          "e": 9.11841547260443e-10
        },
        "standardErrors": {
          "b": 0.055983355776728,
          "c": 1.187534411553,
          "d": 1.07878094008103,
          "e": 5.13219742307144e-11
        },
        "wald": {
          "b": {
            "lower": 0.94167314917277,
            "upper": 1.17182402091893
          },
          "c": {
            "lower": -1.3510898286069,
            "upper": 3.53093405609034
          },
          "d": {
            "lower": 97.1546140967107,
            "upper": 101.589546057077
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 185.00837309579,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.3720800768941,
          "bottom": 1.08992211374172,
          "logIC50": -9.04008062343602,
          "hill": -1.05674858504585
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -20.8155560867308,
        "lnIC50StandardError": 0.0562847722887618,
        "waldLogIC50": {
          "lower": -9.09032684907242,
          "upper": -8.98983544335727
        },
        "logIC50": -9.04008114621484,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 99.3720955650497,
          "bottom": 1.08991905345378,
          "logIC50": -9.04008089329665,
          "hill": -1.0567477873222
        },
        "standardErrors": {
          "top": 1.0893453181603,
          "bottom": 1.2092231500979,
          "logIC50": 0.0243721255345381,
          "hill": 0.058377094012329
        },
        "wald": {
          "top": {
            "lower": 97.1329141947234,
            "upper": 101.611276935376
          },
          "bottom": {
            "lower": -1.39567472946091,
            "upper": 3.57551283636848
          },
          "logIC50": {
            "lower": -9.09017851481519,
            "upper": -8.9899832717781
          },
          "hill": {
            "lower": -1.17674362260696,
            "upper": -0.936751952037435
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 185.008373092616,
        "rss": 185.008373092616,
        "minimumFitted": 1.77163101577454,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -9.09031499051321,
          "upper": -8.98967575925344,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 2.80780424687482e-06,
          "logIC50Difference": -2.69860626289642e-07,
          "objectiveDrcMinusNls": 3.17390913551208e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.3720955650497,
          "bottom": 1.08991905345378,
          "logIC50": -9.04008089329665,
          "hill": -1.0567477873222
        },
        "objective": 185.008373092616,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 185.008373092616,
        "polishedObjective": 185.008373092496,
        "relativeImprovement": 6.52901612289449e-13,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.372097772534,
          "bottom": 1.08991601378438,
          "logIC50": -9.04008087644365,
          "hill": -1.05674756015471
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 185.008373092616,
        "threshold": 215.0736659207,
        "lower": -9.09031487540844,
        "upper": -8.98967597484896,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99611918589773,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -9.03621698233184,
        "absoluteIC50_M": 9.1998981134027e-10,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.19990158189364e-10,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 52.4217,
        "objectiveFlat": 47672.5677183,
        "objectiveFull": 185.008373092616,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 2224.54173710524,
        "p": 1.89171303515431e-31,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((47672.5677 - 185.008373) / 3) / (185.008373 / 26) = 2224.54174; p = P(F(3, 26) > F) = 1.89171e-31 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.89171303515431e-31,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.634297282303617,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -9.67437817560026,
              "bendPoint_M": 2.11651730846387e-10,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -8.40578361099303,
              "bendPoint_M": 3.92840621095741e-09,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.100638900559487,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.3720955650497,
          "bottom": 1.08991905345378,
          "logIC50": -9.04008089329665,
          "hill": -1.0567477873222
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 185.008373092616,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -9.09017851481519,
          "upper": -8.9899832717781,
          "standardError": 0.0243721255345381,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -9.09031487540844,
          "upper": -8.98967597484896,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 2224.54173710524,
          "p": 1.89171303515431e-31,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -9.04008089329665,
          "ic50_M": 9.11840980663205e-10,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -9.03621698233184,
          "absoluteIC50_M": 9.1998981134027e-10
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C22",
      "description": "Raw luminescence counts, not normalised",
      "truth": {
        "top": 50000,
        "bottom": 2000,
        "logIC50": -6.2,
        "hill": -1.1,
        "ic50_M": 6.30957344480193e-07,
        "drcLL4": {
          "b": 1.1,
          "c": 2000,
          "d": 50000,
          "e": 6.30957344480193e-07
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.27139323740093,
          "c": 1851.94083526119,
          "d": 49268.2734870436,
          "e": 7.13405080945541e-07
        },
        "standardErrors": {
          "b": 0.111607199282721,
          "c": 797.706767865031,
          "d": 791.054642415916,
          "e": 5.48953323039551e-08
        },
        "wald": {
          "b": {
            "lower": 1.03479654421024,
            "upper": 1.50798993059161
          },
          "c": {
            "lower": 160.878030839454,
            "upper": 3543.00363968293
          },
          "d": {
            "lower": 47591.3125586125,
            "upper": 50945.2344154746
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 46879717.7395591,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 49268.2734870436,
          "bottom": 1851.94083526119,
          "logIC50": -6.14666380189596,
          "hill": -1.27139323740093
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -14.1532171583693,
        "lnIC50StandardError": 0.0769488878624955,
        "waldLogIC50": {
          "lower": -6.21750812036341,
          "upper": -6.07582010575303
        },
        "logIC50": -6.14666411305822,
        "dfResidual": 16
      },
      "nls": {
        "estimates": {
          "top": 49268.2725466527,
          "bottom": 1851.96547062384,
          "logIC50": -6.14666452192314,
          "hill": -1.27139489454564
        },
        "standardErrors": {
          "top": 794.075685757882,
          "bottom": 794.32518880963,
          "logIC50": 0.033403356785798,
          "hill": 0.111542609447647
        },
        "wald": {
          "top": {
            "lower": 47584.9072924319,
            "upper": 50951.6378008736
          },
          "bottom": {
            "lower": 168.071293561383,
            "upper": 3535.8596476863
          },
          "logIC50": {
            "lower": -6.21747647498513,
            "upper": -6.07585256886115
          },
          "hill": {
            "lower": -1.50785466340267,
            "upper": -1.0349351256886
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "objective": 46879717.7364988,
        "rss": 46879717.7364988,
        "minimumFitted": 1940.24501671286,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.21759751288898,
          "upper": -6.07546589582935,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.33024566337893e-05,
          "logIC50Difference": -7.20027172995685e-07,
          "objectiveDrcMinusNls": 0.00306021422147751
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 49268.2725466527,
          "bottom": 1851.96547062384,
          "logIC50": -6.14666452192314,
          "hill": -1.27139489454564
        },
        "objective": 46879717.7364988,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 46879717.7364988,
        "polishedObjective": 46879717.7364988,
        "relativeImprovement": 1.74822696302955e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 49268.2725338638,
          "bottom": 1851.96547437834,
          "logIC50": -6.14666452132186,
          "hill": -1.27139489685944
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 46879717.7364988,
        "threshold": 60047053.9953272,
        "lower": -6.21759725816897,
        "upper": -6.07546640857957,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.99419428508762,
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 25563.9,
        "objectiveFlat": 8074753659.8,
        "objectiveFull": 46879717.7364988,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 913.301738113301,
        "p": 4.29803204573218e-18,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((8.07475366e+09 - 46879717.7) / 3) / (46879717.7 / 16) = 913.301738; p = P(F(3, 16) > F) = 4.29803e-18 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 4.29803204573218e-18,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.527210115798346,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.67387463772148,
              "bendPoint_M": 2.11897270394597e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.61945440612479,
              "bendPoint_M": 2.40184840976883e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "applies": false,
          "note": "the response is not on a percent-of-control scale, so no absolute IC50"
        },
        "vi": {
          "profileWidthLog10": 0.142130849589404,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 49268.2725466527,
          "bottom": 1851.96547062384,
          "logIC50": -6.14666452192314,
          "hill": -1.27139489454564
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 46879717.7364988,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.21747647498513,
          "upper": -6.07585256886115,
          "standardError": 0.033403356785798,
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.21759725816897,
          "upper": -6.07546640857957,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 913.301738113301,
          "p": 4.29803204573218e-18,
          "df1": 3,
          "df2": 16,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.14666452192314,
          "ic50_M": 7.13403898175234e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": null
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C23",
      "description": "High noise (SD 10)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.50405402776474,
          "c": 6.14212731003569,
          "d": 97.385961086589,
          "e": 8.5037446495684e-07
        },
        "standardErrors": {
          "b": 0.350400023398592,
          "c": 3.3517934778302,
          "d": 3.30959279597312,
          "e": 1.30194944149629e-07
        },
        "wald": {
          "b": {
            "lower": 0.783796464367784,
            "upper": 2.2243115911617
          },
          "c": {
            "lower": -0.747582855895472,
            "upper": 13.0318374759669
          },
          "d": {
            "lower": 90.5829956645459,
            "upper": 104.188926508632
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 2226.71222928223,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 97.385961086589,
          "bottom": 6.14212731003569,
          "logIC50": -6.07038978928302,
          "hill": -1.50405402776474
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.9775946937432,
        "lnIC50StandardError": 0.153104861946903,
        "waldLogIC50": {
          "lower": -6.20706973573348,
          "upper": -5.9337147558122
        },
        "logIC50": -6.07039224577284,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 97.3859838293495,
          "bottom": 6.14213391707799,
          "logIC50": -6.07039046759661,
          "hill": -1.50405174601032
        },
        "standardErrors": {
          "top": 3.14551660146034,
          "bottom": 3.31711174365014,
          "logIC50": 0.0668507121524871,
          "hill": 0.304953010183072
        },
        "wald": {
          "top": {
            "lower": 90.9202818553079,
            "upper": 103.851685803391
          },
          "bottom": {
            "lower": -0.676286923262858,
            "upper": 12.9605547574188
          },
          "logIC50": {
            "lower": -6.20780407442029,
            "upper": -5.93297686077293
          },
          "hill": {
            "lower": -2.13089163584438,
            "upper": -0.877211856176256
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 2226.71222927052,
        "rss": 2226.71222927052,
        "minimumFitted": 6.21226253554095,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.21331748744048,
          "upper": -5.93399807607023,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.51706945241051e-06,
          "logIC50Difference": -6.78313591073731e-07,
          "objectiveDrcMinusNls": 1.17106537800282e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 97.3859838293495,
          "bottom": 6.14213391707799,
          "logIC50": -6.07039046759661,
          "hill": -1.50405174601032
        },
        "objective": 2226.71222927052,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 2226.71222927052,
        "polishedObjective": 2226.71222927052,
        "relativeImprovement": 6.12671019957673e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 97.3859838167802,
          "bottom": 6.14213392087646,
          "logIC50": -6.07039046592051,
          "hill": -1.5040517443261
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 2226.71222927052,
        "threshold": 2588.57020411676,
        "lower": -6.21330609600022,
        "upper": -5.93400651312987,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.955013556143479,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.04804921182059,
        "absoluteIC50_M": 8.95263313572471e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 8.95264266643425e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 53.2289333333333,
        "objectiveFlat": 49497.4049598667,
        "objectiveFull": 2226.71222927052,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 183.983961471623,
        "p": 1.26601119741371e-17,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((49497.405 - 2226.71223) / 3) / (2226.71223 / 26) = 183.983961; p = P(F(3, 26) > F) = 1.26601e-17 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.26601119741371e-17,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.445657705166636,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.51604817276325,
              "bendPoint_M": 3.04755693011521e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.62473276242997,
              "bendPoint_M": 2.37283334926512e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.279299582870344,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 97.3859838293495,
          "bottom": 6.14213391707799,
          "logIC50": -6.07039046759661,
          "hill": -1.50405174601032
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 2226.71222927052,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.20780407442029,
          "upper": -5.93297686077293,
          "standardError": 0.0668507121524871,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.21330609600022,
          "upper": -5.93400651312987,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 183.983961471623,
          "p": 1.26601119741371e-17,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.07039046759661,
          "ic50_M": 8.50373136779461e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.04804921182059,
          "absoluteIC50_M": 8.95263313572471e-07
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C24",
      "description": "1/Y^2 weighting, proportional noise (CV 5%)",
      "truth": {
        "top": 100,
        "bottom": 10,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 10,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "1/Y^2",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "role": "start values for nls only: an unweighted fit, because drc cannot weight by the fitted curve",
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 97.4378416815488,
          "bottom": 9.76355813492074,
          "logIC50": -5.96315953480017,
          "hill": -0.975565943593871
        }
      },
      "nls": {
        "estimates": {
          "top": 96.9093383708917,
          "bottom": 10.3263794652519,
          "logIC50": -5.95771603411967,
          "hill": -1.02331638785196
        },
        "standardErrors": {
          "top": 1.71079215219013,
          "bottom": 0.395556048517319,
          "logIC50": 0.0299112173349981,
          "hill": 0.0488685747987764
        },
        "wald": {
          "top": {
            "lower": 93.3927547386657,
            "upper": 100.425922003118
          },
          "bottom": {
            "lower": 9.51330236289135,
            "upper": 11.1394565676125
          },
          "logIC50": {
            "lower": -6.0191994218974,
            "upper": -5.89623264634193
          },
          "hill": {
            "lower": -1.12376718197536,
            "upper": -0.92286559372855
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 0.0665961698971556,
        "rss": 152.353824287498,
        "minimumFitted": 11.1770890342397,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "~(y - (bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))))/(bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill)))",
        "objectiveIs": "sum(((y - f) / f)^2): 1/Y^2 weighting by the fitted curve",
        "covariance": "(J^T J)^-1 s^2 with J the Jacobian of the weighted residuals (y - f) / f, s^2 = objective / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.02241749780243,
          "upper": -5.89695537241835,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "irlsCrossCheck": {
          "estimates": {
            "top": 96.7435141545059,
            "bottom": 10.317829021618,
            "logIC50": -5.95704615321202,
            "hill": -1.0287437069121
          },
          "steps": 6,
          "objectiveAtFixedPoint": 0.0668264485916543
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls (weighted by the fitted curve)",
        "estimates": {
          "top": 96.9093383708917,
          "bottom": 10.3263794652519,
          "logIC50": -5.95771603411967,
          "hill": -1.02331638785196
        },
        "objective": 0.0665961698971556,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 0.0665961698971556,
        "polishedObjective": 0.0665961698971555,
        "relativeImprovement": 1.25032305875061e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 96.9093382754524,
          "bottom": 10.3263794570656,
          "logIC50": -5.95771603296313,
          "hill": -1.02331638821512
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 0.0665961698971556,
        "threshold": 0.0774185630446509,
        "lower": -6.02241593999354,
        "upper": -5.89695283164086,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.88661634954652,
        "absoluteIC50_M": 1.29832568963754e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": null,
        "drcEDCall": "not applicable: weighted curve, drc cannot weight by the fitted curve"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = c fitted by the full model's objective: c = sum(y^2) / sum(y), minimising sum(((y - c) / c)^2) (one parameter)",
        "constant": 78.1108872387998,
        "objectiveFlat": 8.12776092560679,
        "objectiveFull": 0.0665961698971556,
        "weighted": true,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 1049.06074914979,
        "p": 3.12753450359691e-27,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((8.12776093 - 0.0665961699) / 3) / (0.0665961699 / 26) = 1049.06075; p = P(F(3, 26) > F) = 3.12753e-27 (approximate for a nonlinear model)",
        "crossCheckMean": {
          "constant": 56.9486666666667,
          "objectiveFlat": 11.1480505922994,
          "F": 1442.11404062926,
          "p": 5.14859290162192e-29,
          "note": "the earlier reduced model, y = mean(y) with weighted residuals: superseded by the CSO's confirmation (item 8), kept as a cross-check"
        }
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.12753450359691e-27,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.655019559479393,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.61273559359906,
              "bendPoint_M": 2.43929545394481e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.30269647464027,
              "bendPoint_M": 4.98085071516372e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 4,
          "concentrationsPredictedAbove50": 6,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.125463108352686,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 96.9093383708917,
          "bottom": 10.3263794652519,
          "logIC50": -5.95771603411967,
          "hill": -1.02331638785196
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 0.0665961698971556,
        "objectiveIs": "sum(((y - f) / f)^2) (1/Y^2 weighting by the fitted curve)",
        "waldLogIC50": {
          "lower": -6.0191994218974,
          "upper": -5.89623264634193,
          "standardError": 0.0299112173349981,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.02241593999354,
          "upper": -5.89695283164086,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1049.06074914979,
          "p": 3.12753450359691e-27,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.95771603411967,
          "ic50_M": 1.10225979271117e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.88661634954652,
          "absoluteIC50_M": 1.29832568963754e-06
        }
      },
      "warnings": []
    },
    {
      "id": "C25",
      "description": "1/Y^2 weighting, proportional noise (CV 8%), Hill -2",
      "truth": {
        "top": 1000,
        "bottom": 50,
        "logIC50": -5.5,
        "hill": -2,
        "ic50_M": 3.16227766016838e-06,
        "drcLL4": {
          "b": 2,
          "c": 50,
          "d": 1000,
          "e": 3.16227766016838e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "1/Y^2",
      "n": 24,
      "distinctConcentrations": 12,
      "drcLL4": {
        "role": "start values for nls only: an unweighted fit, because drc cannot weight by the fitted curve",
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 991.409342916178,
          "bottom": 55.5318578740914,
          "logIC50": -5.47411320692083,
          "hill": -2.19530461953249
        }
      },
      "nls": {
        "estimates": {
          "top": 1005.20551189238,
          "bottom": 49.2183549981148,
          "logIC50": -5.48598258240165,
          "hill": -1.94694510964357
        },
        "standardErrors": {
          "top": 22.9475462304152,
          "bottom": 2.06587655393725,
          "logIC50": 0.0216378516962443,
          "hill": 0.0941085818956478
        },
        "wald": {
          "top": {
            "lower": 957.337769251291,
            "upper": 1053.07325453347
          },
          "bottom": {
            "lower": 44.9090120200381,
            "upper": 53.5276979761915
          },
          "logIC50": {
            "lower": -5.53111835011738,
            "upper": -5.44084681468593
          },
          "hill": {
            "lower": -2.14325217155191,
            "upper": -1.75063804773522
          }
        },
        "dfResidual": 20,
        "tQuantile": 2.08596344726586,
        "objective": 0.0940987655907584,
        "rss": 31413.0610995127,
        "minimumFitted": 50.4395089648379,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "~(y - (bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))))/(bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill)))",
        "objectiveIs": "sum(((y - f) / f)^2): 1/Y^2 weighting by the fitted curve",
        "covariance": "(J^T J)^-1 s^2 with J the Jacobian of the weighted residuals (y - f) / f, s^2 = objective / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.53115166356946,
          "upper": -5.44235129412737,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "irlsCrossCheck": {
          "estimates": {
            "top": 1002.76615220377,
            "bottom": 48.8214285133355,
            "logIC50": -5.48628043439297,
            "hill": -1.94509246125
          },
          "steps": 6,
          "objectiveAtFixedPoint": 0.0945503987366879
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls (weighted by the fitted curve)",
        "estimates": {
          "top": 1005.20551189238,
          "bottom": 49.2183549981148,
          "logIC50": -5.48598258240165,
          "hill": -1.94694510964357
        },
        "objective": 0.0940987655907584,
        "df": 20,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 0.0940987655907584,
        "polishedObjective": 0.0940987655907583,
        "relativeImprovement": 1.76977298956331e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 1005.20551181816,
          "bottom": 49.2183549404487,
          "logIC50": -5.48598258205429,
          "hill": -1.94694511076836
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 0.0940987655907584,
        "threshold": 0.114571097713163,
        "lower": -5.53115055500343,
        "upper": -5.44235084300572,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = c fitted by the full model's objective: c = sum(y^2) / sum(y), minimising sum(((y - c) / c)^2) (one parameter)",
        "constant": 868.443690542159,
        "objectiveFlat": 8.23395765423514,
        "objectiveFull": 0.0940987655907584,
        "weighted": true,
        "n": 24,
        "parametersFull": 4,
        "df1": 3,
        "df2": 20,
        "F": 576.68903076052,
        "p": 1.39863072466191e-19,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((8.23395765 - 0.0940987656) / 3) / (0.0940987656 / 20) = 576.689031; p = P(F(3, 20) > F) = 1.39863e-19 (approximate for a nonlinear model)",
        "crossCheckMean": {
          "constant": 570.496666666667,
          "objectiveFlat": 12.5342162203901,
          "F": 881.351799300054,
          "p": 2.09699923153185e-21,
          "note": "the earlier reduced model, y = mean(y) with weighted residuals: superseded by the CSO's confirmation (item 8), kept as a cross-check"
        }
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 12,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.39863072466191e-19,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 7,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.344278966191062,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -5.83026154859271,
              "bendPoint_M": 1.47821788122786e-06,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.14170361621059,
              "bendPoint_M": 7.21599766146702e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "applies": false,
          "note": "the response is not on a percent-of-control scale, so no absolute IC50"
        },
        "vi": {
          "profileWidthLog10": 0.0887997119977122,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 1005.20551189238,
          "bottom": 49.2183549981148,
          "logIC50": -5.48598258240165,
          "hill": -1.94694510964357
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 0.0940987655907584,
        "objectiveIs": "sum(((y - f) / f)^2) (1/Y^2 weighting by the fitted curve)",
        "waldLogIC50": {
          "lower": -5.53111835011738,
          "upper": -5.44084681468593,
          "standardError": 0.0216378516962443,
          "dfResidual": 20,
          "tQuantile": 2.08596344726586,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.53115055500343,
          "upper": -5.44235084300572,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 576.68903076052,
          "p": 1.39863072466191e-19,
          "df1": 3,
          "df2": 20,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.48598258240165,
          "ic50_M": 3.26600930404048e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": null
      },
      "warnings": []
    },
    {
      "id": "C26",
      "description": "Bottom fixed at 0 (three free parameters)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {
        "bottom": 0
      },
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.844261028729716,
          "d": 102.648058576176,
          "e": 9.18968838221395e-07
        },
        "standardErrors": {
          "b": 0.0627925422286726,
          "d": 2.29063465515105,
          "e": 1.01583962260782e-07
        },
        "wald": {
          "b": {
            "lower": 0.711780344963906,
            "upper": 0.976741712495526
          },
          "d": {
            "lower": 97.8152418976139,
            "upper": 107.480875254739
          }
        },
        "dfResidual": 17,
        "tQuantile": 2.10981557783332,
        "rss": 271.661922448659,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, 0, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 102.648058576176,
          "bottom": 0,
          "logIC50": -6.0366992150752,
          "hill": -0.844261028729716
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.900013913225,
        "lnIC50StandardError": 0.110541795870295,
        "waldLogIC50": {
          "lower": -6.13798671725802,
          "upper": -5.93541196452603
        },
        "logIC50": -6.03669934089203,
        "dfResidual": 17
      },
      "nls": {
        "estimates": {
          "top": 102.648094416569,
          "logIC50": -6.0366998824359,
          "hill": -0.84425971090686
        },
        "standardErrors": {
          "top": 2.27273642253057,
          "logIC50": 0.0474287125508042,
          "hill": 0.0629478339905614
        },
        "wald": {
          "top": {
            "lower": 97.8530397080048,
            "upper": 107.443149125133
          },
          "logIC50": {
            "lower": -6.13676571901216,
            "upper": -5.93663404585963
          },
          "hill": {
            "lower": -0.977068031651012,
            "upper": -0.711451390162708
          }
        },
        "dfResidual": 17,
        "tQuantile": 2.10981557783332,
        "objective": 271.661922441306,
        "rss": 271.661922441306,
        "minimumFitted": 1.92150046836457,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ 0L + (top - 0L)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.14304110879971,
          "upper": -5.93862155855091,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.56091873418177e-06,
          "logIC50Difference": -6.67360694706076e-07,
          "objectiveDrcMinusNls": 7.35303729015868e-09
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 102.648094416569,
          "bottom": 0,
          "logIC50": -6.0366998824359,
          "hill": -0.84425971090686
        },
        "objective": 271.661922441306,
        "df": 17,
        "freeParameters": ["top", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 271.661922441306,
        "polishedObjective": 271.661922441306,
        "relativeImprovement": 1.88318909455484e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 102.648094343299,
          "bottom": 0,
          "logIC50": -6.03669988162282,
          "hill": -0.8442597138914
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 271.661922441306,
        "threshold": 342.794547742103,
        "lower": -6.14303025171453,
        "upper": -5.93861860522103,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.991205980905479,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.01015277612491,
        "absoluteIC50_M": 9.76893508878133e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.76894129117083e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 53.4973,
        "objectiveFlat": 30891.6684762,
        "objectiveFull": 271.661922441306,
        "weighted": false,
        "n": 20,
        "parametersFull": 3,
        "df1": 2,
        "df2": 17,
        "F": 958.06601590689,
        "p": 3.35423075215891e-18,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((30891.6685 - 271.661922) / 2) / (271.661922 / 17) = 958.066016; p = P(F(2, 17) > F) = 3.35423e-18 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.35423075215891e-18,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 5,
          "concentrationsAboveIC50": 5,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.793940822852767,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.83064070528866,
              "bendPoint_M": 1.47692790025173e-07,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            },
            "bottom": {
              "free": false,
              "side": "high concentrations",
              "bendPointLog10": -5.24275905958313,
              "bendPoint_M": 5.71795772874658e-06,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 5,
          "concentrationsPredictedAbove50": 5,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.204411646493505,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 102.648094416569,
          "bottom": 0,
          "logIC50": -6.0366998824359,
          "hill": -0.84425971090686
        },
        "freeParameters": ["top", "logIC50", "hill"],
        "fixed": {
          "bottom": 0
        },
        "objective": 271.661922441306,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.13676571901216,
          "upper": -5.93663404585963,
          "standardError": 0.0474287125508042,
          "dfResidual": 17,
          "tQuantile": 2.10981557783332,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.14303025171453,
          "upper": -5.93861860522103,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 958.06601590689,
          "p": 3.35423075215891e-18,
          "df1": 2,
          "df2": 17,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -6.0366998824359,
          "ic50_M": 9.18967426084615e-07,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -6.01015277612491,
          "absoluteIC50_M": 9.76893508878133e-07
        }
      },
      "warnings": []
    },
    {
      "id": "C27",
      "description": "Top fixed at 100 and Bottom at 0 (two free parameters)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5,
        "hill": -1.5,
        "ic50_M": 1e-05,
        "drcLL4": {
          "b": 1.5,
          "c": 0,
          "d": 100,
          "e": 1e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {
        "top": 100,
        "bottom": 0
      },
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 1.59098321120205,
          "e": 1.01087903792084e-05
        },
        "standardErrors": {
          "b": 0.134769883085386,
          "e": 6.1279057410343e-07
        },
        "wald": {
          "b": {
            "lower": 1.31491962019104,
            "upper": 1.86704680221307
          }
        },
        "dfResidual": 28,
        "tQuantile": 2.04840714179524,
        "rss": 747.136914054436,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, 0, 100, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100,
          "bottom": 0,
          "logIC50": -4.9953008091038,
          "hill": -1.59098321120205
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -11.5021064902996,
        "lnIC50StandardError": 0.0606202984269808,
        "waldLogIC50": {
          "lower": -5.04922991897666,
          "upper": -4.94137283902474
        },
        "logIC50": -4.9953013790007,
        "dfResidual": 28
      },
      "nls": {
        "estimates": {
          "logIC50": -4.99530084023999,
          "hill": -1.59098301857363
        },
        "standardErrors": {
          "logIC50": 0.026279392577945,
          "hill": 0.137567939747729
        },
        "wald": {
          "logIC50": {
            "lower": -5.04913173567869,
            "upper": -4.94146994480128
          },
          "hill": {
            "lower": -1.87277816883494,
            "upper": -1.30918786831233
          }
        },
        "dfResidual": 28,
        "tQuantile": 2.04840714179524,
        "objective": 747.136914054348,
        "rss": 747.136914054348,
        "minimumFitted": 2.54277142241025,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ 0L + (100L - 0L)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.04942360107503,
          "upper": -4.94138343106703,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.21075079355395e-07,
          "logIC50Difference": -3.11361896265794e-08,
          "objectiveDrcMinusNls": 8.89031070983037e-11
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 100,
          "bottom": 0,
          "logIC50": -4.99530084023999,
          "hill": -1.59098301857363
        },
        "objective": 747.136914054348,
        "df": 28,
        "freeParameters": ["logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 747.136914054348,
        "polishedObjective": 747.136914054347,
        "relativeImprovement": 7.60816629342359e-16,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 100,
          "bottom": 0,
          "logIC50": -4.99530083881451,
          "hill": -1.59098303380051
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 747.136914054348,
        "threshold": 859.099965339214,
        "lower": -5.04942334285241,
        "upper": -4.94138361060183,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.982429021195832,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -4.99530084023999,
        "absoluteIC50_M": 1.01087896544715e-05,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 1.01087903792084e-05,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 74.3302666666667,
        "objectiveFlat": 42521.0753698667,
        "objectiveFull": 747.136914054348,
        "weighted": false,
        "n": 30,
        "parametersFull": 2,
        "df1": 1,
        "df2": 28,
        "F": 1565.53672393928,
        "p": 4.02919658060459e-26,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((42521.0754 - 747.136914) / 1) / (747.136914 / 28) = 1565.53672; p = P(F(1, 28) > F) = 4.0292e-26 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 4.02919658060459e-26,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 7,
          "concentrationsAboveIC50": 3,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.421306979240903,
          "plateaus": {
            "top": {
              "free": false,
              "side": "low concentrations",
              "bendPointLog10": -5.41660781948089,
              "bendPoint_M": 3.83170601304884e-06,
              "concentrationsAtOrBeyond": 7,
              "fires": false
            },
            "bottom": {
              "free": false,
              "side": "high concentrations",
              "bendPointLog10": -4.57399386099909,
              "bendPoint_M": 2.66689636236057e-05,
              "concentrationsAtOrBeyond": 2,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.108039732250582,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 100,
          "bottom": 0,
          "logIC50": -4.99530084023999,
          "hill": -1.59098301857363
        },
        "freeParameters": ["logIC50", "hill"],
        "fixed": {
          "top": 100,
          "bottom": 0
        },
        "objective": 747.136914054348,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.04913173567869,
          "upper": -4.94146994480128,
          "standardError": 0.026279392577945,
          "dfResidual": 28,
          "tQuantile": 2.04840714179524,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.04942334285241,
          "upper": -4.94138361060183,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1565.53672393928,
          "p": 4.02919658060459e-26,
          "df1": 1,
          "df2": 28,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -4.99530084023999,
          "ic50_M": 1.01087896544715e-05,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -4.99530084023999,
          "absoluteIC50_M": 1.01087896544715e-05
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C28",
      "description": "Exactly four distinct concentrations: the minimum that is fitted",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 12,
      "distinctConcentrations": 4,
      "drcLL4": {
        "estimates": {
          "b": 1.06949646338223,
          "c": 1.68993930101809,
          "d": 101.396377327026,
          "e": 9.39075977306045e-07
        },
        "standardErrors": {
          "b": 0.14525045106244,
          "c": 1.66188940680723,
          "d": 3.85891708532446,
          "e": 8.75079215256876e-08
        },
        "wald": {
          "b": {
            "lower": 0.734548322591975,
            "upper": 1.40444460417249
          },
          "c": {
            "lower": -2.14238454333137,
            "upper": 5.52226314536755
          },
          "d": {
            "lower": 92.4976985708575,
            "upper": 110.295056083194
          }
        },
        "dfResidual": 8,
        "tQuantile": 2.30600413520417,
        "rss": 42.6993720354334,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 101.396377327026,
          "bottom": 1.68993930101809,
          "logIC50": -6.02729926908648,
          "hill": -1.06949646338223
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.8783729288231,
        "lnIC50StandardError": 0.0931901878125516,
        "waldLogIC50": {
          "lower": -6.12062934401864,
          "upper": -5.933972217548
        },
        "logIC50": -6.02730078078332,
        "dfResidual": 8
      },
      "nls": {
        "estimates": {
          "top": 101.396535128943,
          "bottom": 1.68996898601668,
          "logIC50": -6.02730154111724,
          "hill": -1.0694908897582
        },
        "standardErrors": {
          "top": 3.8590666370956,
          "bottom": 1.66191254259967,
          "logIC50": 0.0404712964644486,
          "hill": 0.145253540922241
        },
        "wald": {
          "top": {
            "lower": 92.497511505772,
            "upper": 110.295558752114
          },
          "bottom": {
            "lower": -2.14240820956582,
            "upper": 5.52234618159918
          },
          "logIC50": {
            "lower": -6.12062851812133,
            "upper": -5.93397456411315
          },
          "hill": {
            "lower": -1.40444615577794,
            "upper": -0.734535623738468
          }
        },
        "dfResidual": 8,
        "tQuantile": 2.30600413520417,
        "objective": 42.699372,
        "rss": 42.699372,
        "minimumFitted": 2.36233333333333,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -6.16185693928488,
          "upper": -5.94922951007345,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 1.75657188188334e-05,
          "logIC50Difference": -2.27203075731097e-06,
          "objectiveDrcMinusNls": 3.54333451468847e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 101.396535128943,
          "bottom": 1.68996898601668,
          "logIC50": -6.02730154111724,
          "hill": -1.0694908897582
        },
        "objective": 42.699372,
        "df": 8,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 42.699372,
        "polishedObjective": 42.699372,
        "relativeImprovement": 0,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 101.396535128943,
          "bottom": 1.68996898601668,
          "logIC50": -6.02730154111724,
          "hill": -1.0694908897582
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 42.699372,
        "threshold": 71.0819385086283,
        "lower": -6.16185761419451,
        "upper": -5.94922597114675,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.997311719469135,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -6.00215263502955,
        "absoluteIC50_M": 9.95055638466905e-07,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.95057115571829e-07,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 38.5865833333333,
        "objectiveFlat": 15883.5253649167,
        "objectiveFull": 42.699372,
        "weighted": false,
        "n": 12,
        "parametersFull": 4,
        "df1": 3,
        "df2": 8,
        "F": 989.293300327174,
        "p": 1.28390064124543e-10,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((15883.5254 - 42.699372) / 3) / (42.699372 / 8) = 989.2933; p = P(F(3, 8) > F) = 1.2839e-10 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 4,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 1.28390064124543e-10,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 1,
          "concentrationsAboveIC50": 3,
          "fires": true
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.626739559913759,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.654041101031,
              "bendPoint_M": 2.21798650268259e-07,
              "concentrationsAtOrBeyond": 1,
              "fires": true
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.40056198120348,
              "bendPoint_M": 3.97592349239873e-06,
              "concentrationsAtOrBeyond": 2,
              "fires": false
            }
          },
          "fires": true
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 1,
          "fires": true
        },
        "vi": {
          "profileWidthLog10": 0.212631643047763,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 101.396535128943,
          "bottom": 1.68996898601668,
          "logIC50": -6.02730154111724,
          "hill": -1.0694908897582
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 42.699372,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -6.12062851812133,
          "upper": -5.93397456411315,
          "standardError": 0.0404712964644486,
          "dfResidual": 8,
          "tQuantile": 2.30600413520417,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -6.16185761419451,
          "upper": -5.94922597114675,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 989.293300327174,
          "p": 1.28390064124543e-10,
          "df1": 3,
          "df2": 8,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "iii",
          "reason": "IC50 not bracketed: only one concentration below it",
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": false,
          "withheldBy": "v",
          "reason": "above 50 percent only at 100 nM"
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C29",
      "description": "Three distinct concentrations: must refuse",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -6,
        "hill": -1,
        "ic50_M": 1e-06,
        "drcLL4": {
          "b": 1,
          "c": 0,
          "d": 100,
          "e": 1e-06
        }
      },
      "expectedRule": {
        "outcome": "refuse",
        "rule": "i",
        "reason": "fewer than four distinct concentrations (rule (i), CSO ruling, 6 October 2026); a rule, not an oracle value"
      },
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 9,
      "distinctConcentrations": 3,
      "status": "refused",
      "expected": {
        "status": "refused",
        "withheldBy": "i",
        "reason": "only 3 concentrations: at least four are needed"
      }
    },
    {
      "id": "C30",
      "description": "Flat: no response at any concentration",
      "truth": {
        "top": 100,
        "bottom": 100,
        "logIC50": null,
        "hill": null,
        "note": "Top equals Bottom: no IC50 and no Hill slope exist; every concentration has the same expected response",
        "drcLL4": null
      },
      "expectedRule": {
        "outcome": "not determinable",
        "rule": "ii",
        "reason": "the true curve is flat (Top = Bottom), so no IC50 exists; a fit still converges numerically, so rule (ii) (no response: flat-line F-test p >= 0.05, CSO ruling, 6 October 2026) is what withholds it. The design intent only: reference.R computes the test on the data, and a flat curve still gives p < 0.05 one time in 20."
      },
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 20,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": -0.163032326916907,
          "c": 94.9827560641562,
          "d": 100.805795253145,
          "e": 1.22698250127588e-08
        },
        "standardErrors": {
          "b": 0.796222731198634,
          "c": 7.74872800557002,
          "d": 9.59414304824454,
          "e": 5.45817733941434e-08
        },
        "wald": {
          "b": {
            "lower": -1.85094911414531,
            "upper": 1.5248844603115
          },
          "c": {
            "lower": 78.5561865029242,
            "upper": 111.409325625388
          },
          "d": {
            "lower": 80.4671205636844,
            "upper": 121.144469942605
          }
        },
        "dfResidual": 16,
        "tQuantile": 2.11990529922125,
        "rss": 123.083276182267,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100.805795253145,
          "bottom": 94.9827560641562,
          "logIC50": -7.91116163095964,
          "hill": 0.163032326916907
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -16.4016624512215,
        "lnIC50StandardError": 16.6398713699264,
        "waldLogIC50": {
          "lower": -22.4428682804914,
          "upper": 8.19656528728092
        },
        "logIC50": -7.12315149660524,
        "dfResidual": 16
      },
      "nls": {
        "error": "start drc, tol 1e-08: singular gradient | start drc, tol 1e-06: singular gradient",
        "starts": ["drc"]
      },
      "status": "fitted",
      "bestFit": {
        "source": "drc LL.4",
        "estimates": {
          "top": 100.805795253145,
          "bottom": 94.9827560641562,
          "logIC50": -7.91116163095964,
          "hill": 0.163032326916907
        },
        "objective": 123.083276182267,
        "df": 16,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 123.083276182267,
        "polishedObjective": 113.380949690476,
        "relativeImprovement": 0.0788273337591665,
        "minimumAttained": false,
        "polishedEstimates": {
          "top": 97.292166659263,
          "bottom": 99.3992857122825,
          "logIC50": -7.08030847261808,
          "hill": -67.6733313775982
        },
        "limitingModel": {
          "kind": "step",
          "description": "|Hill| -> infinity: a step between two adjacent concentrations, each side at the mean of its wells; the best of all splits",
          "between_M": [4.57247370827617e-08, 1.37174211248285e-07],
          "lowConcentrationLevel": 97.2921666666667,
          "highConcentrationLevel": 99.3992857142857,
          "objective": 113.380949690476
        },
        "objectiveInfimum": 113.380949690476
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 98.76715,
        "objectiveFlat": 132.02874255,
        "objectiveFull": 113.380949690476,
        "weighted": false,
        "n": 20,
        "parametersFull": 4,
        "df1": 3,
        "df2": 16,
        "F": 0.877174653434289,
        "p": 0.473575288140507,
        "alpha": 0.05,
        "noResponse": true,
        "working": "F = ((132.028743 - 113.38095) / 3) / (113.38095 / 16) = 0.877174653; p = P(F(3, 16) > F) = 0.473575 (approximate for a nonlinear model)",
        "pRangeAlongValley": [0.473575288140507, 0.763449235409811]
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 0.473575288140507,
          "fires": true
        },
        "iii": {
          "concentrationsBelowIC50": 3,
          "concentrationsAboveIC50": 7,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.00990482123362287,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -7.09021329385171,
              "bendPoint_M": 8.1243141096711e-08,
              "concentrationsAtOrBeyond": 3,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -7.07040365138446,
              "bendPoint_M": 8.50347322569676e-08,
              "concentrationsAtOrBeyond": 7,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 0,
          "concentrationsPredictedAbove50": 10,
          "fires": true
        },
        "vi": {
          "fires": null,
          "note": "not evaluated: with no finite minimum there is no profile"
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "no finite minimum",
        "minimumAttained": false,
        "noFiniteMinimum": "Least squares has no finite minimum on this curve: from the best fit nls and drc found, the objective keeps falling (123.083 -> 113.381 after polishing) toward the limit in minimumCheck.limitingModel (step, objective 113.381), which no finite 4PL reaches. Estimates, Wald and profile bounds depend on where an optimiser stops, so none is recorded. The rules decide the same at the best fit, at the polished point and at the infimum (minimumCheck).",
        "objectiveInfimum": 113.380949690476,
        "objectiveIs": "sum((y - f)^2)",
        "estimates": null,
        "waldLogIC50": null,
        "profileLogIC50": null,
        "flatLineFTest": {
          "F": 0.877174653434289,
          "p": 0.473575288140507,
          "df1": 3,
          "df2": 16,
          "noResponse": true,
          "at": "the infimum (the smallest p any fit can give); pRangeAlongValley in flatLineFTest"
        },
        "rulesAtBestPoint": {
          "ii": true,
          "iii": false,
          "iv": false,
          "v": true,
          "at": "the polished point, the best point found (rule (ii) at the infimum); the same outcomes hold at drc's fit"
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "ii",
          "reason": "no response: flat-line F-test p = 0.474 (at or above 0.05; approximate)",
          "poorlyDetermined": null,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": false,
          "withheldBy": "ii",
          "reason": "no response: flat-line F-test p = 0.474 (at or above 0.05; approximate)"
        },
        "gate": "The engine reports 'no finite minimum' and shows and exports no estimates, intervals or parameters (CSO confirmation, 6 October 2026, item 1). Assert that, withheldBy and shown exactly, and that the engine's objective is not below objectiveInfimum by more than 1e-6 relative; no estimates, bounds or ruleChecks counts are compared, since they depend on where an optimiser stops."
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C31",
      "description": "Shallow curve whose lower plateau lies beyond the highest concentration",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5,
        "hill": -0.5,
        "ic50_M": 1e-05,
        "drcLL4": {
          "b": 0.5,
          "c": 0,
          "d": 100,
          "e": 1e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.491449138957889,
          "c": -4.22180538637766,
          "d": 100.519573011823,
          "e": 1.15680015209461e-05
        },
        "standardErrors": {
          "b": 0.0506362721518586,
          "c": 8.69650948302084,
          "d": 1.50112134189033,
          "e": 4.03059056042043e-06
        },
        "wald": {
          "b": {
            "lower": 0.387364790886611,
            "upper": 0.595533487029167
          },
          "c": {
            "lower": -22.0977366421639,
            "upper": 13.6541258694086
          },
          "d": {
            "lower": 97.4339739025927,
            "upper": 103.605172121054
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 115.791208595325,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 100.519573011823,
          "bottom": -4.22180538637766,
          "logIC50": -4.93674166294905,
          "hill": -0.491449138957889
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -11.3670622901696,
        "lnIC50StandardError": 0.34857394574466,
        "waldLogIC50": {
          "lower": -5.24782616458244,
          "upper": -4.62547869155995
        },
        "logIC50": -4.9366524280712,
        "dfResidual": 26
      },
      "nls": {
        "estimates": {
          "top": 100.519908219097,
          "bottom": -4.22448293634349,
          "logIC50": -4.93669528349643,
          "hill": -0.491433779982894
        },
        "standardErrors": {
          "top": 1.49734453398656,
          "bottom": 8.43547608547172,
          "logIC50": 0.146388266013219,
          "hill": 0.0496182621798298
        },
        "wald": {
          "top": {
            "lower": 97.4420724496966,
            "upper": 103.597743988497
          },
          "bottom": {
            "lower": -21.5638523589986,
            "upper": 13.1148864863116
          },
          "logIC50": {
            "lower": -5.23760067375849,
            "upper": -4.63578989323438
          },
          "hill": {
            "lower": -0.593425578587835,
            "upper": -0.389441981377954
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "objective": 115.791208155546,
        "rss": 115.791208155546,
        "minimumFitted": 22.7285503857945,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-06,
        "earlierAttempts": ["start truth, tol 1e-08: step factor 5.82077e-11 reduced below 'minFactor' of 1e-10"],
        "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.17811246033967,
          "upper": -4.48028829675653,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 0.000634219183687049,
          "logIC50Difference": 4.63794526197603e-05,
          "objectiveDrcMinusNls": 4.39779498151438e-07
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 100.519908219097,
          "bottom": -4.22448293634349,
          "logIC50": -4.93669528349643,
          "hill": -0.491433779982894
        },
        "objective": 115.791208155546,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 115.791208155546,
        "polishedObjective": 115.791208155544,
        "relativeImprovement": 1.53410338116001e-14,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 100.519907329721,
          "bottom": -4.22447725459708,
          "logIC50": -4.93669537423238,
          "hill": -0.491433813712593
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 115.791208155546,
        "threshold": 134.608175852306,
        "lower": -5.1782745915428,
        "upper": -4.48039005193395,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.994239729573894,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -4.99923243052334,
        "absoluteIC50_M": 1.00176895679616e-05,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 1.00175361497109e-05,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 70.5299,
        "objectiveFlat": 20101.6965507,
        "objectiveFull": 115.791208155546,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 1495.89232545796,
        "p": 3.20800478615686e-29,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((20101.6966 - 115.791208) / 3) / (115.791208 / 26) = 1495.89233; p = P(F(3, 26) > F) = 3.208e-29 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 3.20800478615686e-29,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 8,
          "concentrationsAboveIC50": 2,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 1.36395233067243,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.30064761416887,
              "bendPoint_M": 5.004404268272e-07,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -3.572742952824,
              "bendPoint_M": 0.000267458895726149,
              "concentrationsAtOrBeyond": 0,
              "fires": true
            }
          },
          "fires": true
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.697884539608853,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 100.519908219097,
          "bottom": -4.22448293634349,
          "logIC50": -4.93669528349643,
          "hill": -0.491433779982894
        },
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "fixed": {},
        "objective": 115.791208155546,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.23760067375849,
          "upper": -4.63578989323438,
          "standardError": 0.146388266013219,
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.1782745915428,
          "upper": -4.48039005193395,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 1495.89232545796,
          "p": 3.20800478615686e-29,
          "df1": 3,
          "df2": 26,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "iv",
          "reason": "plateau unbracketed: no concentration at or beyond the bottom plateau's bend point (267 <c2><b5>M)",
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -4.99923243052334,
          "absoluteIC50_M": 1.00176895679616e-05
        }
      },
      "warnings": []
    },
    {
      "id": "C32",
      "description": "C31's wells with Bottom fixed at 0: a fixed plateau is exempt from rule (iv)",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5,
        "hill": -0.5,
        "ic50_M": 1e-05,
        "drcLL4": {
          "b": 0.5,
          "c": 0,
          "d": 100,
          "e": 1e-05
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {
        "bottom": 0
      },
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 0.516241181514435,
          "d": 99.9971285416774,
          "e": 9.79378301876689e-06
        },
        "standardErrors": {
          "b": 0.0188166888984402,
          "d": 1.0211462429489,
          "e": 6.69459894172317e-07
        },
        "wald": {
          "b": {
            "lower": 0.4776325250135,
            "upper": 0.554849838015371
          },
          "d": {
            "lower": 97.9019095186056,
            "upper": 102.092347564749
          }
        },
        "dfResidual": 27,
        "tQuantile": 2.05183051648029,
        "rss": 117.033637645964,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, 0, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.9971285416774,
          "bottom": 0,
          "logIC50": -5.00904952200415,
          "hill": -0.516241181514435
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -11.5337541626789,
        "lnIC50StandardError": 0.0683554769479219,
        "waldLogIC50": {
          "lower": -5.06995726315136,
          "upper": -4.94813431380886
        },
        "logIC50": -5.00904578848011,
        "dfResidual": 27
      },
      "nls": {
        "estimates": {
          "top": 99.9972020821569,
          "logIC50": -5.00905082433839,
          "hill": -0.516239403987466
        },
        "standardErrors": {
          "top": 1.02314071934487,
          "logIC50": 0.0296840682065415,
          "hill": 0.0189088202325019
        },
        "wald": {
          "top": {
            "lower": 97.8978907315515,
            "upper": 102.096513432762
          },
          "logIC50": {
            "lower": -5.06995750133785,
            "upper": -4.94814414733892
          },
          "hill": {
            "lower": -0.555037098371153,
            "upper": -0.477441709603779
          }
        },
        "dfResidual": 27,
        "tQuantile": 2.05183051648029,
        "objective": 117.033637607263,
        "rss": 117.033637607263,
        "minimumFitted": 23.1567708196461,
        "startedFrom": "truth",
        "convergenceTolerance": 1e-08,
        "earlierAttempts": [],
        "formula": "y ~ 0L + (top - 0L)/(1 + 10^((logIC50 - x) * hill))",
        "objectiveIs": "sum((y - f)^2)",
        "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
        "profileCrossCheck": {
          "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
          "lower": -5.07160951911439,
          "upper": -4.94941102862068,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "profiledAtTolerance": 1e-06,
          "earlierAttempts": []
        },
        "agreementWithDrc": {
          "maxRelativeDifference": 3.44321033040523e-06,
          "logIC50Difference": -1.30233423778492e-06,
          "objectiveDrcMinusNls": 3.87010032909529e-08
        }
      },
      "status": "fitted",
      "bestFit": {
        "source": "nls",
        "estimates": {
          "top": 99.9972020821569,
          "bottom": 0,
          "logIC50": -5.00905082433839,
          "hill": -0.516239403987466
        },
        "objective": 117.033637607263,
        "df": 27,
        "freeParameters": ["top", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 117.033637607263,
        "polishedObjective": 117.033637607262,
        "relativeImprovement": 2.06423157561875e-15,
        "minimumAttained": true,
        "polishedEstimates": {
          "top": 99.9972019397513,
          "bottom": 0,
          "logIC50": -5.00905082183601,
          "hill": -0.516239407672354
        }
      },
      "directProfileLogIC50": {
        "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
        "objectiveMin": 117.033637607263,
        "threshold": 135.28225262243,
        "lower": -5.07160856687033,
        "upper": -4.94940941448628,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "rSquared": 0.994177922380229,
      "absoluteIC50": {
        "exists": true,
        "logAbsoluteIC50": -5.00909790149949,
        "absoluteIC50_M": 9.79269207262448e-06,
        "withinTestedRange": true,
        "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
        "drcED": 9.79269354028082e-06,
        "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 70.5299,
        "objectiveFlat": 20101.6965507,
        "objectiveFull": 117.033637607263,
        "weighted": false,
        "n": 30,
        "parametersFull": 3,
        "df1": 2,
        "df2": 27,
        "F": 2305.25987948963,
        "p": 6.73833937633664e-31,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((20101.6966 - 117.033638) / 2) / (117.033638 / 27) = 2305.25988; p = P(F(2, 27) > F) = 6.73834e-31 (approximate for a nonlinear model)"
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 6.73833937633664e-31,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 7,
          "concentrationsAboveIC50": 3,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 1.29841357401518,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -6.30746439835356,
              "bendPoint_M": 4.92646726813903e-07,
              "concentrationsAtOrBeyond": 5,
              "fires": false
            },
            "bottom": {
              "free": false,
              "side": "high concentrations",
              "bendPointLog10": -3.71063725032321,
              "bendPoint_M": 0.000194698564576327,
              "concentrationsAtOrBeyond": 0,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 3,
          "concentrationsPredictedAbove50": 7,
          "fires": false
        },
        "vi": {
          "profileWidthLog10": 0.122199152384051,
          "lowerUnbounded": false,
          "upperUnbounded": false,
          "fires": false
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "a minimum",
        "minimumAttained": true,
        "estimates": {
          "top": 99.9972020821569,
          "bottom": 0,
          "logIC50": -5.00905082433839,
          "hill": -0.516239403987466
        },
        "freeParameters": ["top", "logIC50", "hill"],
        "fixed": {
          "bottom": 0
        },
        "objective": 117.033637607263,
        "objectiveIs": "sum((y - f)^2)",
        "waldLogIC50": {
          "lower": -5.06995750133785,
          "upper": -4.94814414733892,
          "standardError": 0.0296840682065415,
          "dfResidual": 27,
          "tQuantile": 2.05183051648029,
          "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
        },
        "waldNote": null,
        "profileLogIC50": {
          "lower": -5.07160856687033,
          "upper": -4.94940941448628,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "flatLineFTest": {
          "F": 2305.25987948963,
          "p": 6.73833937633664e-31,
          "df1": 2,
          "df2": 27,
          "noResponse": false
        },
        "relativeIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logIC50": -5.00905082433839,
          "ic50_M": 9.79375364984707e-06,
          "poorlyDetermined": false,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": true,
          "withheldBy": null,
          "reason": null,
          "logAbsoluteIC50": -5.00909790149949,
          "absoluteIC50_M": 9.79269207262448e-06
        }
      },
      "warnings": ["NaNs produced"]
    },
    {
      "id": "C33",
      "description": "Steep step between two tested concentrations: no point on the transition",
      "truth": {
        "top": 100,
        "bottom": 0,
        "logIC50": -5.67,
        "hill": -12,
        "ic50_M": 2.13796208950223e-06,
        "drcLL4": {
          "b": 12,
          "c": 0,
          "d": 100,
          "e": 2.13796208950223e-06
        }
      },
      "expectedRule": null,
      "excludedWells": 0,
      "fixed": {},
      "weighting": "none",
      "n": 30,
      "distinctConcentrations": 10,
      "drcLL4": {
        "estimates": {
          "b": 18.5392566606922,
          "c": -0.293492762168882,
          "d": 99.5924153657086,
          "e": 2.17080517992535e-06
        },
        "standardErrors": {
          "b": 60.09915677716,
          "c": 0.83621839336102,
          "d": 0.681517221954833,
          "e": 3.86646769941465e-06
        },
        "wald": {
          "b": {
            "lower": -104.996329332374,
            "upper": 142.074842653758
          },
          "c": {
            "lower": -2.01236428685711,
            "upper": 1.42537876251934
          },
          "d": {
            "lower": 98.1915366530384,
            "upper": 100.993294078379
          }
        },
        "dfResidual": 26,
        "tQuantile": 2.05552943864287,
        "rss": 217.134018100355,
        "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
        "inBriefParameterisation": {
          "top": 99.5924153657086,
          "bottom": -0.293492762168882,
          "logIC50": -5.66337915078783,
          "hill": -18.5392566606922
        },
        "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
      },
      "drcLL24": {
        "role": "cross-check of the Wald interval on log IC50 only",
        "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
        "lnIC50": -13.0430823594208,
        "lnIC50StandardError": 11.1542321408783,
        "waldLogIC50": {
          "lower": -15.6219785318247,
          "upper": 4.29290114041257
        },
        "logIC50": -5.66453869570608,
        "dfResidual": 26
      },
      "nls": {
        "error": "start truth, tol 1e-08: singular gradient | start truth, tol 1e-06: singular gradient | start drc, tol 1e-08: singular gradient | start drc, tol 1e-06: singular gradient",
        "starts": ["truth", "drc"]
      },
      "status": "fitted",
      "bestFit": {
        "source": "drc LL.4",
        "estimates": {
          "top": 99.5924153657086,
          "bottom": -0.293492762168882,
          "logIC50": -5.66337915078783,
          "hill": -18.5392566606922
        },
        "objective": 217.134018100355,
        "df": 26,
        "freeParameters": ["top", "bottom", "logIC50", "hill"],
        "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
      },
      "minimumCheck": {
        "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
        "startObjective": 217.134018100355,
        "polishedObjective": 217.118911194445,
        "relativeImprovement": 6.95741093114876e-05,
        "minimumAttained": false,
        "polishedEstimates": {
          "top": 99.5919444378434,
          "bottom": -0.292250022137283,
          "logIC50": -5.59538235607166,
          "hill": -95.4635759281741
        },
        "limitingModel": {
          "kind": "step",
          "description": "|Hill| -> infinity: a step between two adjacent concentrations, each side at the mean of its wells; the best of all splits",
          "between_M": [1.23456790123457e-06, 3.70370370370371e-06],
          "lowConcentrationLevel": 99.5919444444445,
          "highConcentrationLevel": -0.29225,
          "objective": 217.118911194445
        },
        "objectiveInfimum": 217.118911194445
      },
      "flatLineFTest": {
        "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
        "constant": 59.6382666666667,
        "objectiveFlat": 72050.4554698667,
        "objectiveFull": 217.118911194445,
        "weighted": false,
        "n": 30,
        "parametersFull": 4,
        "df1": 3,
        "df2": 26,
        "F": 2867.34849619319,
        "p": 7.0603427262666e-33,
        "alpha": 0.05,
        "noResponse": false,
        "working": "F = ((72050.4555 - 217.118911) / 3) / (217.118911 / 26) = 2867.3485; p = P(F(3, 26) > F) = 7.06034e-33 (approximate for a nonlinear model)",
        "pRangeAlongValley": [7.0603427262666e-33, 7.06673096923687e-33]
      },
      "ruleChecks": {
        "i": {
          "distinctConcentrations": 10,
          "anyConcentrationAtOrBelowZero": false,
          "fires": false
        },
        "ii": {
          "p": 7.0603427262666e-33,
          "fires": false
        },
        "iii": {
          "concentrationsBelowIC50": 6,
          "concentrationsAboveIC50": 4,
          "fires": false
        },
        "iv": {
          "k": 4.6805,
          "bendHalfWidthLog10": 0.00702144501776419,
          "plateaus": {
            "top": {
              "free": true,
              "side": "low concentrations",
              "bendPointLog10": -5.60240380108942,
              "bendPoint_M": 2.49802165510399e-06,
              "concentrationsAtOrBeyond": 6,
              "fires": false
            },
            "bottom": {
              "free": true,
              "side": "high concentrations",
              "bendPointLog10": -5.5883609110539,
              "bendPoint_M": 2.58011515046558e-06,
              "concentrationsAtOrBeyond": 4,
              "fires": false
            }
          },
          "fires": false
        },
        "v": {
          "concentrationsPredictedBelow50": 4,
          "concentrationsPredictedAbove50": 6,
          "fires": false
        },
        "vi": {
          "fires": null,
          "note": "not evaluated: with no finite minimum there is no profile"
        }
      },
      "expected": {
        "status": "fitted",
        "engineMustReport": "no finite minimum",
        "minimumAttained": false,
        "noFiniteMinimum": "Least squares has no finite minimum on this curve: from the best fit nls and drc found, the objective keeps falling (217.134 -> 217.119 after polishing) toward the limit in minimumCheck.limitingModel (step, objective 217.119), which no finite 4PL reaches. Estimates, Wald and profile bounds depend on where an optimiser stops, so none is recorded. The rules decide the same at the best fit, at the polished point and at the infimum (minimumCheck).",
        "objectiveInfimum": 217.118911194445,
        "objectiveIs": "sum((y - f)^2)",
        "estimates": null,
        "waldLogIC50": null,
        "profileLogIC50": null,
        "flatLineFTest": {
          "F": 2867.34849619319,
          "p": 7.0603427262666e-33,
          "df1": 3,
          "df2": 26,
          "noResponse": false,
          "at": "the infimum (the smallest p any fit can give); pRangeAlongValley in flatLineFTest"
        },
        "rulesAtBestPoint": {
          "ii": false,
          "iii": false,
          "iv": false,
          "v": false,
          "at": "the polished point, the best point found (rule (ii) at the infimum); the same outcomes hold at drc's fit"
        },
        "relativeIC50": {
          "shown": false,
          "withheldBy": "noFiniteMinimum",
          "reason": "IC50 between 1.23 <c2><b5>M and 3.7 <c2><b5>M",
          "poorlyDetermined": null,
          "poorlyDeterminedReason": null
        },
        "absoluteIC50": {
          "shown": false,
          "withheldBy": "noFiniteMinimum",
          "reason": "IC50 between 1.23 <c2><b5>M and 3.7 <c2><b5>M"
        },
        "gate": "The engine reports 'no finite minimum' and shows and exports no estimates, intervals or parameters (CSO confirmation, 6 October 2026, item 1). Assert that, withheldBy and shown exactly, and that the engine's objective is not below objectiveInfimum by more than 1e-6 relative; no estimates, bounds or ruleChecks counts are compared, since they depend on where an optimiser stops."
      },
      "warnings": ["NaNs produced"]
    }
  ],
  "mtt": {
    "normalisation": {
      "formula": "percent viability = 100 x (A570 - mean(kill)) / (mean(vehicle) - mean(kill))",
      "meanVehicle": 1.241875,
      "meanKill": 0.06,
      "meanBlank": 0.044,
      "nVehicle": 8,
      "nKill": 4,
      "nBlank": 4
    },
    "zPrime": {
      "positive": "vehicle (column 1)",
      "negative": "kill control (column 12, rows A-D)",
      "refused": false,
      "meanPositive": 1.241875,
      "meanNegative": 0.06,
      "sdPositive": 0.0722227457245984,
      "sdNegative": 0.013589211407093,
      "nPositive": 8,
      "nNegative": 4,
      "zPrime": 0.782180119390736,
      "belowHalf": false,
      "sd": "sample standard deviation (n - 1 denominator, R sd()); n shown",
      "working": "Z' = 1 - 3 (0.072223 + 0.013589) / |1.241875 - 0.060000| = 0.782180 (n = 8 and 4)",
      "crossCheckPopulationSd": 0.798641663109065
    },
    "compounds": [
      {
        "compound": "Compound A",
        "truth": {
          "top": 100,
          "bottom": 3,
          "logIC50": -5.69897000433602,
          "hill": -1.2,
          "ic50_M": 2e-06,
          "drcLL4": {
            "b": 1.2,
            "c": 3,
            "d": 100,
            "e": 2e-06
          }
        },
        "normalised": [
          {
            "well": "A2",
            "concentration_M": 0.0001,
            "A570": 0.109,
            "percentViability": 4.14595452141724
          },
          {
            "well": "A3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.123,
            "percentViability": 5.33051295610788
          },
          {
            "well": "A4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.212,
            "percentViability": 12.8609201480698
          },
          {
            "well": "A5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.48,
            "percentViability": 35.5367530407192
          },
          {
            "well": "A6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.942,
            "percentViability": 74.6271813855103
          },
          {
            "well": "A7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 1.026,
            "percentViability": 81.7345319936541
          },
          {
            "well": "A8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 1.312,
            "percentViability": 105.933368588049
          },
          {
            "well": "A9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.082,
            "percentViability": 86.4727657324167
          },
          {
            "well": "A10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.333,
            "percentViability": 107.710206240085
          },
          {
            "well": "A11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.245,
            "percentViability": 100.264410364886
          },
          {
            "well": "B2",
            "concentration_M": 0.0001,
            "A570": 0.099,
            "percentViability": 3.29984135378107
          },
          {
            "well": "B3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.135,
            "percentViability": 6.34584875727129
          },
          {
            "well": "B4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.208,
            "percentViability": 12.5224748810153
          },
          {
            "well": "B5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.451,
            "percentViability": 33.0830248545743
          },
          {
            "well": "B6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.874,
            "percentViability": 68.8736118455843
          },
          {
            "well": "B7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 1.05,
            "percentViability": 83.765203595981
          },
          {
            "well": "B8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 1.24,
            "percentViability": 99.8413537810682
          },
          {
            "well": "B9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.209,
            "percentViability": 97.2184029613961
          },
          {
            "well": "B10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.184,
            "percentViability": 95.1031200423056
          },
          {
            "well": "B11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.206,
            "percentViability": 96.9645690111052
          },
          {
            "well": "C2",
            "concentration_M": 0.0001,
            "A570": 0.099,
            "percentViability": 3.29984135378107
          },
          {
            "well": "C3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.156,
            "percentViability": 8.12268640930724
          },
          {
            "well": "C4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.219,
            "percentViability": 13.4531993654151
          },
          {
            "well": "C5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.445,
            "percentViability": 32.5753569539926
          },
          {
            "well": "C6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.833,
            "percentViability": 65.404547858276
          },
          {
            "well": "C7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 1.086,
            "percentViability": 86.8112109994712
          },
          {
            "well": "C8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 1.111,
            "percentViability": 88.9264939185616
          },
          {
            "well": "C9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.268,
            "percentViability": 102.210470650449
          },
          {
            "well": "C10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.209,
            "percentViability": 97.2184029613961
          },
          {
            "well": "C11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.206,
            "percentViability": 96.9645690111052
          }
        ],
        "n": 30,
        "distinctConcentrations": 10,
        "drcLL4": {
          "estimates": {
            "b": 1.28239129088364,
            "c": 3.03690981648155,
            "d": 98.2362738920311,
            "e": 2.15949796871926e-06
          },
          "standardErrors": {
            "b": 0.132953245724371,
            "c": 2.24709932851172,
            "d": 1.51052259114645,
            "e": 1.87359115820035e-07
          },
          "wald": {
            "b": {
              "lower": 1.00910198033407,
              "upper": 1.5556806014332
            },
            "c": {
              "lower": -1.58206900482891,
              "upper": 7.65588863779201
            },
            "d": {
              "lower": 95.1313502381944,
              "upper": 101.341197545868
            }
          },
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "rss": 565.537675203507,
          "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
          "inBriefParameterisation": {
            "top": 98.2362738920311,
            "bottom": 3.03690981648155,
            "logIC50": -5.66564720012513,
            "hill": -1.28239129088364
          },
          "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
        },
        "drcLL24": {
          "role": "cross-check of the Wald interval on log IC50 only",
          "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
          "lnIC50": -13.0456365081878,
          "lnIC50StandardError": 0.0867613877420516,
          "waldLogIC50": {
            "lower": -5.74310028109927,
            "upper": -5.58819561574386
          },
          "logIC50": -5.66564794842157,
          "dfResidual": 26
        },
        "nls": {
          "estimates": {
            "top": 98.2362803419013,
            "bottom": 3.03690162518932,
            "logIC50": -5.66564722103455,
            "hill": -1.28239029833953
          },
          "standardErrors": {
            "top": 1.48422483024837,
            "bottom": 2.25281282244369,
            "logIC50": 0.03812447684077,
            "hill": 0.128192734538626
          },
          "wald": {
            "top": {
              "lower": 95.185412509761,
              "upper": 101.287148174042
            },
            "bottom": {
              "lower": -1.59382145109582,
              "upper": 7.66762470147446
            },
            "logIC50": {
              "lower": -5.74401320551361,
              "upper": -5.58728123655549
            },
            "hill": {
              "lower": -1.54589423800381,
              "upper": -1.01888635867525
            }
          },
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "objective": 565.537675202529,
          "rss": 565.537675202529,
          "minimumFitted": 3.72787387146746,
          "startedFrom": "truth",
          "convergenceTolerance": 1e-06,
          "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
          "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
          "objectiveIs": "sum((y - f)^2)",
          "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
          "profileCrossCheck": {
            "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
            "lower": -5.74272437089087,
            "upper": -5.58672435929725,
            "lowerUnbounded": false,
            "upperUnbounded": false,
            "profiledAtTolerance": 1e-06,
            "earlierAttempts": []
          },
          "agreementWithDrc": {
            "maxRelativeDifference": 2.69724579404475e-06,
            "logIC50Difference": -2.09094181968794e-08,
            "objectiveDrcMinusNls": 9.77365743892733e-10
          }
        },
        "status": "fitted",
        "bestFit": {
          "source": "nls",
          "estimates": {
            "top": 98.2362803419013,
            "bottom": 3.03690162518932,
            "logIC50": -5.66564722103455,
            "hill": -1.28239029833953
          },
          "objective": 565.537675202529,
          "df": 26,
          "freeParameters": ["top", "bottom", "logIC50", "hill"],
          "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
        },
        "minimumCheck": {
          "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
          "startObjective": 565.537675202529,
          "polishedObjective": 565.537675202509,
          "relativeImprovement": 3.55813081233178e-14,
          "minimumAttained": true,
          "polishedEstimates": {
            "top": 98.2362794104697,
            "bottom": 3.03690202740698,
            "logIC50": -5.66564720549404,
            "hill": -1.28239040593344
          }
        },
        "directProfileLogIC50": {
          "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
          "objectiveMin": 565.537675202529,
          "threshold": 657.441925405117,
          "lower": -5.74272371096611,
          "upper": -5.58672565330451,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "rSquared": 0.987851484447233,
        "absoluteIC50": {
          "exists": true,
          "logAbsoluteIC50": -5.6565883027437,
          "absoluteIC50_M": 2.20501575690542e-06,
          "withinTestedRange": true,
          "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
          "drcED": 2.20501589746051e-06,
          "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
        },
        "flatLineFTest": {
          "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
          "constant": 60.2206945178918,
          "objectiveFlat": 46551.9982870422,
          "objectiveFull": 565.537675202529,
          "weighted": false,
          "n": 30,
          "parametersFull": 4,
          "df1": 3,
          "df2": 26,
          "F": 704.72639185335,
          "p": 5.22372744087219e-25,
          "alpha": 0.05,
          "noResponse": false,
          "working": "F = ((46551.9983 - 565.537675) / 3) / (565.537675 / 26) = 704.726392; p = P(F(3, 26) > F) = 5.22373e-25 (approximate for a nonlinear model)"
        },
        "ruleChecks": {
          "i": {
            "distinctConcentrations": 10,
            "anyConcentrationAtOrBelowZero": false,
            "fires": false
          },
          "ii": {
            "p": 5.22372744087219e-25,
            "fires": false
          },
          "iii": {
            "concentrationsBelowIC50": 6,
            "concentrationsAboveIC50": 4,
            "fires": false
          },
          "iv": {
            "k": 4.6805,
            "bendHalfWidthLog10": 0.522689738410173,
            "plateaus": {
              "top": {
                "free": true,
                "side": "low concentrations",
                "bendPointLog10": -6.18833695944473,
                "bendPoint_M": 6.48131367678641e-07,
                "concentrationsAtOrBeyond": 5,
                "fires": false
              },
              "bottom": {
                "free": true,
                "side": "high concentrations",
                "bendPointLog10": -5.14295748262438,
                "bendPoint_M": 7.19519415416779e-06,
                "concentrationsAtOrBeyond": 3,
                "fires": false
              }
            },
            "fires": false
          },
          "v": {
            "concentrationsPredictedBelow50": 4,
            "concentrationsPredictedAbove50": 6,
            "fires": false
          },
          "vi": {
            "profileWidthLog10": 0.155998057661596,
            "lowerUnbounded": false,
            "upperUnbounded": false,
            "fires": false
          }
        },
        "expected": {
          "status": "fitted",
          "engineMustReport": "a minimum",
          "minimumAttained": true,
          "estimates": {
            "top": 98.2362803419013,
            "bottom": 3.03690162518932,
            "logIC50": -5.66564722103455,
            "hill": -1.28239029833953
          },
          "freeParameters": ["top", "bottom", "logIC50", "hill"],
          "fixed": {},
          "objective": 565.537675202529,
          "objectiveIs": "sum((y - f)^2)",
          "waldLogIC50": {
            "lower": -5.74401320551361,
            "upper": -5.58728123655549,
            "standardError": 0.03812447684077,
            "dfResidual": 26,
            "tQuantile": 2.05552943864287,
            "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
          },
          "waldNote": null,
          "profileLogIC50": {
            "lower": -5.74272371096611,
            "upper": -5.58672565330451,
            "lowerUnbounded": false,
            "upperUnbounded": false
          },
          "flatLineFTest": {
            "F": 704.72639185335,
            "p": 5.22372744087219e-25,
            "df1": 3,
            "df2": 26,
            "noResponse": false
          },
          "relativeIC50": {
            "shown": true,
            "withheldBy": null,
            "reason": null,
            "logIC50": -5.66564722103455,
            "ic50_M": 2.15949786474869e-06,
            "poorlyDetermined": false,
            "poorlyDeterminedReason": null
          },
          "absoluteIC50": {
            "shown": true,
            "withheldBy": null,
            "reason": null,
            "logAbsoluteIC50": -5.6565883027437,
            "absoluteIC50_M": 2.20501575690542e-06
          }
        },
        "warnings": []
      },
      {
        "compound": "Compound B",
        "truth": {
          "top": 100,
          "bottom": 15,
          "logIC50": -6.82390874094432,
          "hill": -0.9,
          "ic50_M": 1.5e-07,
          "drcLL4": {
            "b": 0.9,
            "c": 15,
            "d": 100,
            "e": 1.5e-07
          }
        },
        "normalised": [
          {
            "well": "D2",
            "concentration_M": 0.0001,
            "A570": 0.254,
            "percentViability": 16.4145954521417
          },
          {
            "well": "D3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.273,
            "percentViability": 18.0222104706504
          },
          {
            "well": "D4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.241,
            "percentViability": 15.3146483342147
          },
          {
            "well": "D5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.293,
            "percentViability": 19.7144368059228
          },
          {
            "well": "D6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.321,
            "percentViability": 22.0835536753041
          },
          {
            "well": "D7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 0.522,
            "percentViability": 39.0904283447911
          },
          {
            "well": "D8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 0.799,
            "percentViability": 62.5277630883131
          },
          {
            "well": "D9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 0.928,
            "percentViability": 73.4426229508197
          },
          {
            "well": "D10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.222,
            "percentViability": 98.3183500793231
          },
          {
            "well": "D11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.113,
            "percentViability": 89.0957165520888
          },
          {
            "well": "E2",
            "concentration_M": 0.0001,
            "A570": 0.241,
            "percentViability": 15.3146483342147
          },
          {
            "well": "E3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.25,
            "percentViability": 16.0761501850873
          },
          {
            "well": "E4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.275,
            "percentViability": 18.1914331041777
          },
          {
            "well": "E5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.316,
            "percentViability": 21.660497091486
          },
          {
            "well": "E6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.397,
            "percentViability": 28.514013749339
          },
          {
            "well": "E7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 0.567,
            "percentViability": 42.8979375991539
          },
          {
            "well": "E8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 0.795,
            "percentViability": 62.1893178212586
          },
          {
            "well": "E9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.016,
            "percentViability": 80.888418826018
          },
          {
            "well": "E10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.122,
            "percentViability": 89.8572184029614
          },
          {
            "well": "E11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.173,
            "percentViability": 94.1723955579059
          },
          {
            "well": "F2",
            "concentration_M": 0.0001,
            "A570": 0.207,
            "percentViability": 12.4378635642517
          },
          {
            "well": "F3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.262,
            "percentViability": 17.0914859862507
          },
          {
            "well": "F4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.273,
            "percentViability": 18.0222104706504
          },
          {
            "well": "F5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 0.263,
            "percentViability": 17.1760973030143
          },
          {
            "well": "F6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 0.378,
            "percentViability": 26.9063987308302
          },
          {
            "well": "F7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 0.57,
            "percentViability": 43.1517715494447
          },
          {
            "well": "F8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 0.786,
            "percentViability": 61.427815970386
          },
          {
            "well": "F9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.003,
            "percentViability": 79.7884717080909
          },
          {
            "well": "F10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.177,
            "percentViability": 94.5108408249603
          },
          {
            "well": "F11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.165,
            "percentViability": 93.4955050237969
          }
        ],
        "n": 30,
        "distinctConcentrations": 10,
        "drcLL4": {
          "estimates": {
            "b": 0.979116456875057,
            "c": 15.5383877424753,
            "d": 96.7887088901816,
            "e": 1.83909277433763e-07
          },
          "standardErrors": {
            "b": 0.0754854743598375,
            "c": 1.05090782796202,
            "d": 1.96508648665464,
            "e": 1.65479548633765e-08
          },
          "wald": {
            "b": {
              "lower": 0.82395384213849,
              "upper": 1.13427907161163
            },
            "c": {
              "lower": 13.3782157647992,
              "upper": 17.6985597201515
            },
            "d": {
              "lower": 92.7494157673837,
              "upper": 100.82800201298
            }
          },
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "rss": 227.534177231551,
          "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
          "inBriefParameterisation": {
            "top": 96.7887088901816,
            "bottom": 15.5383877424753,
            "logIC50": -6.73539636191656,
            "hill": -0.979116456875057
          },
          "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
        },
        "drcLL24": {
          "role": "cross-check of the Wald interval on log IC50 only",
          "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
          "lnIC50": -15.50882690304,
          "lnIC50StandardError": 0.0899802526320988,
          "waldLogIC50": {
            "lower": -6.81572377454037,
            "upper": -6.65507211502554
          },
          "logIC50": -6.73539794478295,
          "dfResidual": 26
        },
        "nls": {
          "estimates": {
            "top": 96.7887786167533,
            "bottom": 15.5383891117148,
            "logIC50": -6.73539796787547,
            "hill": -0.979114748158713
          },
          "standardErrors": {
            "top": 2.01204036510191,
            "bottom": 1.06004935115616,
            "logIC50": 0.0392876020298065,
            "hill": 0.0785036693677742
          },
          "wald": {
            "top": {
              "lower": 92.6529704145485,
              "upper": 100.924586818958
            },
            "bottom": {
              "lower": 13.359426463999,
              "upper": 17.7173517594306
            },
            "logIC50": {
              "lower": -6.81615479042142,
              "upper": -6.65464114532951
            },
            "hill": {
              "lower": -1.14048135158566,
              "upper": -0.817748144731766
            }
          },
          "dfResidual": 26,
          "tQuantile": 2.05552943864287,
          "objective": 227.534177214001,
          "rss": 227.534177214001,
          "minimumFitted": 15.7084666333452,
          "startedFrom": "truth",
          "convergenceTolerance": 1e-06,
          "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
          "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
          "objectiveIs": "sum((y - f)^2)",
          "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
          "profileCrossCheck": {
            "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
            "lower": -6.81907141611621,
            "upper": -6.65706456915438,
            "lowerUnbounded": false,
            "upperUnbounded": false,
            "profiledAtTolerance": 1e-06,
            "earlierAttempts": []
          },
          "agreementWithDrc": {
            "maxRelativeDifference": 1.74516150008647e-06,
            "logIC50Difference": -1.60595890186244e-06,
            "objectiveDrcMinusNls": 1.75498655607953e-08
          }
        },
        "status": "fitted",
        "bestFit": {
          "source": "nls",
          "estimates": {
            "top": 96.7887786167533,
            "bottom": 15.5383891117148,
            "logIC50": -6.73539796787547,
            "hill": -0.979114748158713
          },
          "objective": 227.534177214001,
          "df": 26,
          "freeParameters": ["top", "bottom", "logIC50", "hill"],
          "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
        },
        "minimumCheck": {
          "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
          "startObjective": 227.534177214001,
          "polishedObjective": 227.534177213899,
          "relativeImprovement": 4.47683982449648e-13,
          "minimumAttained": true,
          "polishedEstimates": {
            "top": 96.7887837478263,
            "bottom": 15.5383873186002,
            "logIC50": -6.7353980273425,
            "hill": -0.97911449396135
          }
        },
        "directProfileLogIC50": {
          "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
          "objectiveMin": 227.534177214001,
          "threshold": 264.510242415717,
          "lower": -6.81906612356248,
          "upper": -6.65706268480167,
          "lowerUnbounded": false,
          "upperUnbounded": false
        },
        "rSquared": 0.992074091461632,
        "absoluteIC50": {
          "exists": true,
          "logAbsoluteIC50": -6.5997589794424,
          "absoluteIC50_M": 2.51328084087626e-07,
          "withinTestedRange": true,
          "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
          "drcED": 2.51328483749891e-07,
          "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
        },
        "flatLineFTest": {
          "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
          "constant": 46.2598272518949,
          "objectiveFlat": 28707.6460840466,
          "objectiveFull": 227.534177214001,
          "weighted": false,
          "n": 30,
          "parametersFull": 4,
          "df1": 3,
          "df2": 26,
          "F": 1084.79367604514,
          "p": 2.03084101207475e-27,
          "alpha": 0.05,
          "noResponse": false,
          "working": "F = ((28707.6461 - 227.534177) / 3) / (227.534177 / 26) = 1084.79368; p = P(F(3, 26) > F) = 2.03084e-27 (approximate for a nonlinear model)"
        },
        "ruleChecks": {
          "i": {
            "distinctConcentrations": 10,
            "anyConcentrationAtOrBelowZero": false,
            "fires": false
          },
          "ii": {
            "p": 2.03084101207475e-27,
            "fires": false
          },
          "iii": {
            "concentrationsBelowIC50": 4,
            "concentrationsAboveIC50": 6,
            "fires": false
          },
          "iv": {
            "k": 4.6805,
            "bendHalfWidthLog10": 0.684590085931561,
            "plateaus": {
              "top": {
                "free": true,
                "side": "low concentrations",
                "bendPointLog10": -7.41998805380703,
                "bendPoint_M": 3.80199854381971e-08,
                "concentrationsAtOrBeyond": 2,
                "fires": false
              },
              "bottom": {
                "free": true,
                "side": "high concentrations",
                "bendPointLog10": -6.05080788194391,
                "bendPoint_M": 8.89594559147584e-07,
                "concentrationsAtOrBeyond": 5,
                "fires": false
              }
            },
            "fires": false
          },
          "v": {
            "concentrationsPredictedBelow50": 6,
            "concentrationsPredictedAbove50": 4,
            "fires": false
          },
          "vi": {
            "profileWidthLog10": 0.162003438760811,
            "lowerUnbounded": false,
            "upperUnbounded": false,
            "fires": false
          }
        },
        "expected": {
          "status": "fitted",
          "engineMustReport": "a minimum",
          "minimumAttained": true,
          "estimates": {
            "top": 96.7887786167533,
            "bottom": 15.5383891117148,
            "logIC50": -6.73539796787547,
            "hill": -0.979114748158713
          },
          "freeParameters": ["top", "bottom", "logIC50", "hill"],
          "fixed": {},
          "objective": 227.534177214001,
          "objectiveIs": "sum((y - f)^2)",
          "waldLogIC50": {
            "lower": -6.81615479042142,
            "upper": -6.65464114532951,
            "standardError": 0.0392876020298065,
            "dfResidual": 26,
            "tQuantile": 2.05552943864287,
            "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
          },
          "waldNote": null,
          "profileLogIC50": {
            "lower": -6.81906612356248,
            "upper": -6.65706268480167,
            "lowerUnbounded": false,
            "upperUnbounded": false
          },
          "flatLineFTest": {
            "F": 1084.79367604514,
            "p": 2.03084101207475e-27,
            "df1": 3,
            "df2": 26,
            "noResponse": false
          },
          "relativeIC50": {
            "shown": true,
            "withheldBy": null,
            "reason": null,
            "logIC50": -6.73539796787547,
            "ic50_M": 1.83908597364806e-07,
            "poorlyDetermined": false,
            "poorlyDeterminedReason": null
          },
          "absoluteIC50": {
            "shown": true,
            "withheldBy": null,
            "reason": null,
            "logAbsoluteIC50": -6.5997589794424,
            "absoluteIC50_M": 2.51328084087626e-07
          }
        },
        "warnings": ["NaNs produced"]
      },
      {
        "compound": "Compound C",
        "truth": {
          "top": 100,
          "bottom": 0,
          "logIC50": -4.22184874961636,
          "hill": -1,
          "ic50_M": 6e-05,
          "drcLL4": {
            "b": 1,
            "c": 0,
            "d": 100,
            "e": 6e-05
          }
        },
        "normalised": [
          {
            "well": "G2",
            "concentration_M": 0.0001,
            "A570": 0.505,
            "percentViability": 37.6520359598096
          },
          {
            "well": "G3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.876,
            "percentViability": 69.0428344791116
          },
          {
            "well": "G4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 0.982,
            "percentViability": 78.011634056055
          },
          {
            "well": "G5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 1.132,
            "percentViability": 90.7033315705976
          },
          {
            "well": "G6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 1.196,
            "percentViability": 96.1184558434691
          },
          {
            "well": "G7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 1.132,
            "percentViability": 90.7033315705976
          },
          {
            "well": "G8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 1.248,
            "percentViability": 100.518244315177
          },
          {
            "well": "G9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.309,
            "percentViability": 105.679534637758
          },
          {
            "well": "G10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.234,
            "percentViability": 99.3336858804865
          },
          {
            "well": "G11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.278,
            "percentViability": 103.056583818086
          },
          {
            "well": "H2",
            "concentration_M": 0.0001,
            "A570": 0.573,
            "percentViability": 43.4056054997356
          },
          {
            "well": "H3",
            "concentration_M": 3.33333333333333e-05,
            "A570": 0.898,
            "percentViability": 70.9042834479112
          },
          {
            "well": "H4",
            "concentration_M": 1.11111111111111e-05,
            "A570": 1.101,
            "percentViability": 88.0803807509254
          },
          {
            "well": "H5",
            "concentration_M": 3.7037037037037e-06,
            "A570": 1.152,
            "percentViability": 92.3955579058699
          },
          {
            "well": "H6",
            "concentration_M": 1.23456790123457e-06,
            "A570": 1.234,
            "percentViability": 99.3336858804865
          },
          {
            "well": "H7",
            "concentration_M": 4.11522633744856e-07,
            "A570": 1.31,
            "percentViability": 105.764145954521
          },
          {
            "well": "H8",
            "concentration_M": 1.37174211248285e-07,
            "A570": 1.158,
            "percentViability": 92.9032258064516
          },
          {
            "well": "H9",
            "concentration_M": 4.57247370827618e-08,
            "A570": 1.249,
            "percentViability": 100.602855631941
          },
          {
            "well": "H10",
            "concentration_M": 1.52415790275873e-08,
            "A570": 1.354,
            "percentViability": 109.487043892121
          },
          {
            "well": "H11",
            "concentration_M": 5.08052634252909e-09,
            "A570": 1.307,
            "percentViability": 105.510312004231
          }
        ],
        "n": 20,
        "distinctConcentrations": 10,
        "drcLL4": {
          "estimates": {
            "b": 0.607888953731586,
            "c": -191.700591474271,
            "d": 102.513381286781,
            "e": 0.000905726593686792
          },
          "standardErrors": {
            "b": 0.106684132310568,
            "c": 248.333544493811,
            "d": 1.83936944647271,
            "e": 0.00180625550326114
          },
          "wald": {
            "b": {
              "lower": 0.381728696303591,
              "upper": 0.834049211159581
            },
            "c": {
              "lower": -718.144188421099,
              "upper": 334.743005472557
            },
            "d": {
              "lower": 98.6140922499774,
              "upper": 106.412670323584
            }
          },
          "dfResidual": 16,
          "tQuantile": 2.11990529922125,
          "rss": 365.664283029819,
          "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
          "inBriefParameterisation": {
            "top": 102.513381286781,
            "bottom": -191.700591474271,
            "logIC50": -3.0430028804389,
            "hill": -0.607888953731586
          },
          "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
        },
        "drcLL24": {
          "role": "cross-check of the Wald interval on log IC50 only",
          "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
          "lnIC50": -4.0058972197774,
          "lnIC50StandardError": 5.4733149683785,
          "waldLogIC50": {
            "lower": -6.77881858657128,
            "upper": 3.29934047132947
          },
          "logIC50": -1.7397390576209,
          "dfResidual": 16
        },
        "nls": {
          "error": "start truth, tol 1e-08: number of iterations exceeded maximum of 1000 | start truth, tol 1e-06: number of iterations exceeded maximum of 1000 | start drc, tol 1e-08: number of iterations exceeded maximum of 1000 | start drc, tol 1e-06: number of iterations exceeded maximum of 1000",
          "starts": ["truth", "drc"]
        },
        "status": "fitted",
        "bestFit": {
          "source": "drc LL.4",
          "estimates": {
            "top": 102.513381286781,
            "bottom": -191.700591474271,
            "logIC50": -3.0430028804389,
            "hill": -0.607888953731586
          },
          "objective": 365.664283029819,
          "df": 16,
          "freeParameters": ["top", "bottom", "logIC50", "hill"],
          "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
        },
        "minimumCheck": {
          "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
          "startObjective": 365.664283029819,
          "polishedObjective": 352.18230255538,
          "relativeImprovement": 0.0368698314276955,
          "minimumAttained": false,
          "polishedEstimates": {
            "top": 103.087922845625,
            "bottom": -3194125.70164625,
            "logIC50": 5.02842037498604,
            "hill": -0.522011543963622
          },
          "limitingModel": {
            "kind": "power law",
            "description": "IC50 beyond the tested range with the far plateau at infinity: y -> near + B 10^(k x) (the 4PL's limit), fitted by nls",
            "parameters": {
              "near": 103.090060892243,
              "B": -7572.05238342669,
              "k": 0.521946300857155
            },
            "objective": 352.181332364656
          },
          "objectiveInfimum": 352.181332364656
        },
        "flatLineFTest": {
          "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
          "constant": 88.9603384452671,
          "objectiveFlat": 7576.01085718456,
          "objectiveFull": 352.181332364656,
          "weighted": false,
          "n": 20,
          "parametersFull": 4,
          "df1": 3,
          "df2": 16,
          "F": 109.395607485373,
          "p": 7.12834624796413e-11,
          "alpha": 0.05,
          "noResponse": false,
          "working": "F = ((7576.01086 - 352.181332) / 3) / (352.181332 / 16) = 109.395607; p = P(F(3, 16) > F) = 7.12835e-11 (approximate for a nonlinear model)",
          "pRangeAlongValley": [7.12834624796413e-11, 9.6196604869389e-11]
        },
        "ruleChecks": {
          "i": {
            "distinctConcentrations": 10,
            "anyConcentrationAtOrBelowZero": false,
            "fires": false
          },
          "ii": {
            "p": 7.12834624796413e-11,
            "fires": false
          },
          "iii": {
            "concentrationsBelowIC50": 10,
            "concentrationsAboveIC50": 0,
            "fires": true
          },
          "iv": {
            "k": 4.6805,
            "bendHalfWidthLog10": 1.28405637256471,
            "plateaus": {
              "top": {
                "free": true,
                "side": "low concentrations",
                "bendPointLog10": 3.74436400242133,
                "bendPoint_M": 5550.90765449152,
                "concentrationsAtOrBeyond": 10,
                "fires": false
              },
              "bottom": {
                "free": true,
                "side": "high concentrations",
                "bendPointLog10": 6.31247674755075,
                "bendPoint_M": 2053415.08214469,
                "concentrationsAtOrBeyond": 0,
                "fires": true
              }
            },
            "fires": true
          },
          "v": {
            "concentrationsPredictedBelow50": 1,
            "concentrationsPredictedAbove50": 9,
            "fires": true
          },
          "vi": {
            "fires": null,
            "note": "not evaluated: with no finite minimum there is no profile"
          }
        },
        "expected": {
          "status": "fitted",
          "engineMustReport": "no finite minimum",
          "minimumAttained": false,
          "noFiniteMinimum": "Least squares has no finite minimum on this curve: from the best fit nls and drc found, the objective keeps falling (365.664 -> 352.182 after polishing) toward the limit in minimumCheck.limitingModel (power law, objective 352.181), which no finite 4PL reaches. Estimates, Wald and profile bounds depend on where an optimiser stops, so none is recorded. The rules decide the same at the best fit, at the polished point and at the infimum (minimumCheck).",
          "objectiveInfimum": 352.181332364656,
          "objectiveIs": "sum((y - f)^2)",
          "estimates": null,
          "waldLogIC50": null,
          "profileLogIC50": null,
          "flatLineFTest": {
            "F": 109.395607485373,
            "p": 7.12834624796413e-11,
            "df1": 3,
            "df2": 16,
            "noResponse": false,
            "at": "the infimum (the smallest p any fit can give); pRangeAlongValley in flatLineFTest"
          },
          "rulesAtBestPoint": {
            "ii": false,
            "iii": true,
            "iv": true,
            "v": true,
            "at": "the polished point, the best point found (rule (ii) at the infimum); the same outcomes hold at drc's fit"
          },
          "relativeIC50": {
            "shown": false,
            "withheldBy": "iii",
            "reason": "IC50 beyond the highest concentration",
            "poorlyDetermined": null,
            "poorlyDeterminedReason": null
          },
          "absoluteIC50": {
            "shown": false,
            "withheldBy": "v",
            "reason": "below 50 percent only at 100 <c2><b5>M"
          },
          "gate": "The engine reports 'no finite minimum' and shows and exports no estimates, intervals or parameters (CSO confirmation, 6 October 2026, item 1). Assert that, withheldBy and shown exactly, and that the engine's objective is not below objectiveInfimum by more than 1e-6 relative; no estimates, bounds or ruleChecks counts are compared, since they depend on where an optimiser stops."
        },
        "warnings": []
      }
    ]
  },
  "zPrime": [
    {
      "id": "Z01",
      "label": "excellent separation",
      "populationZPrimeOfGenerator": 0.82,
      "refused": false,
      "meanPositive": 100.431625,
      "meanNegative": 0.6880625,
      "sdPositive": 2.09587165239986,
      "sdNegative": 3.44151178929164,
      "nPositive": 16,
      "nNegative": 16,
      "zPrime": 0.833451403692599,
      "belowHalf": false,
      "sd": "sample standard deviation (n - 1 denominator, R sd()); n shown",
      "working": "Z' = 1 - 3 (2.095872 + 3.441512) / |100.431625 - 0.688063| = 0.833451 (n = 16 and 16)",
      "crossCheckPopulationSd": 0.838740015041804
    },
    {
      "id": "Z02",
      "label": "marginal: below the 0.5 convention",
      "populationZPrimeOfGenerator": 0.266666666666667,
      "refused": false,
      "meanPositive": 102.6554375,
      "meanNegative": 8.233375,
      "sdPositive": 9.29073948954011,
      "sdNegative": 8.49683562176728,
      "nPositive": 16,
      "nNegative": 16,
      "zPrime": 0.434848975747356,
      "belowHalf": true,
      "sd": "sample standard deviation (n - 1 denominator, R sd()); n shown",
      "working": "Z' = 1 - 3 (9.290739 + 8.496836) / |102.655438 - 8.233375| = 0.434849 (n = 16 and 16)",
      "crossCheckPopulationSd": 0.452794873744362
    },
    {
      "id": "Z03",
      "label": "overlapping controls: negative Z'",
      "populationZPrimeOfGenerator": -1.4,
      "refused": false,
      "meanPositive": 48.56975,
      "meanNegative": 19.581875,
      "sdPositive": 11.006154971954,
      "sdNegative": 11.493229148068,
      "nPositive": 16,
      "nNegative": 16,
      "zPrime": -1.3284960474014,
      "belowHalf": true,
      "sd": "sample standard deviation (n - 1 denominator, R sd()); n shown",
      "working": "Z' = 1 - 3 (11.006155 + 11.493229) / |48.569750 - 19.581875| = -1.328496 (n = 16 and 16)",
      "crossCheckPopulationSd": -1.25455660332385
    },
    {
      "id": "Z04",
      "label": "one negative-control well: Z' refused (a sample SD needs two)",
      "populationZPrimeOfGenerator": 0.82,
      "refused": true,
      "nPositive": 16,
      "nNegative": 1,
      "zPrime": null,
      "reason": "Z' needs at least two wells in each control (sample SD, n - 1): 16 positive, 1 negative"
    }
  ],
  "fTests": [
    {
      "curve": "C01",
      "comparison": "Hill fixed at -1 (3 free) against Hill free (4 free); true Hill -1",
      "reducedModel": {
        "fixed": {
          "hill": -1
        },
        "rss": 168.317361937825,
        "df": 27,
        "parameters": 3,
        "from": "nls"
      },
      "fullModel": {
        "fixed": {},
        "rss": 163.430466735332,
        "df": 26,
        "parameters": 4,
        "from": "nls"
      },
      "F": 0.777451584168722,
      "p": 0.386000731595843,
      "alpha": 0.05,
      "preferFull": false,
      "working": "F = ((168.317362 - 163.430467) / (27 - 26)) / (163.430467 / 26) = 0.777452; p = P(F(1, 26) > F) = 0.386001",
      "drcAnova": {
        "F": 0.777451583187598,
        "p": 0.386000731891221,
        "rssReduced": 168.317361940166,
        "rssFull": 163.430466743594,
        "call": "anova(reduced_drc_fit, full_drc_fit)"
      }
    },
    {
      "curve": "C07",
      "comparison": "Hill fixed at -1 against Hill free; true Hill -3",
      "reducedModel": {
        "fixed": {
          "hill": -1
        },
        "rss": 3846.34188351296,
        "df": 33,
        "parameters": 3,
        "from": "nls"
      },
      "fullModel": {
        "fixed": {},
        "rss": 206.206838631496,
        "df": 32,
        "parameters": 4,
        "from": "nls"
      },
      "F": 564.890680683834,
      "p": 6.68805720062637e-22,
      "alpha": 0.05,
      "preferFull": true,
      "working": "F = ((3846.341884 - 206.206839) / (33 - 32)) / (206.206839 / 32) = 564.890681; p = P(F(1, 32) > F) = 6.68806e-22",
      "drcAnova": {
        "F": 564.890680585376,
        "p": 0,
        "rssReduced": 3846.34188357189,
        "rssFull": 206.206838668669,
        "call": "anova(reduced_drc_fit, full_drc_fit)"
      }
    },
    {
      "curve": "C04",
      "comparison": "Hill fixed at -1 against Hill free; true Hill -0.5",
      "reducedModel": {
        "fixed": {
          "hill": -1
        },
        "rss": 651.790814300759,
        "df": 21,
        "parameters": 3,
        "from": "nls"
      },
      "fullModel": {
        "fixed": {},
        "rss": 89.7094728833959,
        "df": 20,
        "parameters": 4,
        "from": "nls"
      },
      "F": 125.311480126063,
      "p": 4.59571583065905e-10,
      "alpha": 0.05,
      "preferFull": true,
      "working": "F = ((651.790814 - 89.709473) / (21 - 20)) / (89.709473 / 20) = 125.311480; p = P(F(1, 20) > F) = 4.59572e-10",
      "drcAnova": {
        "F": 125.311480054267,
        "p": 4.59571602995368e-10,
        "rssReduced": 651.790814302015,
        "rssFull": 89.7094729278926,
        "call": "anova(reduced_drc_fit, full_drc_fit)"
      }
    },
    {
      "curve": "C10",
      "comparison": "Bottom fixed at 0 against Bottom free; true Bottom 20",
      "reducedModel": {
        "fixed": {
          "bottom": 0
        },
        "rss": 874.176951756051,
        "df": 27,
        "parameters": 3,
        "from": "nls"
      },
      "fullModel": {
        "fixed": {},
        "rss": 272.278310154503,
        "df": 26,
        "parameters": 4,
        "from": "nls"
      },
      "F": 57.4756199741363,
      "p": 4.77443982958419e-08,
      "alpha": 0.05,
      "preferFull": true,
      "working": "F = ((874.176952 - 272.278310) / (27 - 26)) / (272.278310 / 26) = 57.475620; p = P(F(1, 26) > F) = 4.77444e-08",
      "drcAnova": {
        "F": 57.4756199819259,
        "p": 4.77443982127568e-08,
        "rssReduced": 874.176951863616,
        "rssFull": 272.278310162598,
        "call": "anova(reduced_drc_fit, full_drc_fit)"
      }
    },
    {
      "curve": "C30",
      "comparison": "Flat line (y = mean) against the 4PL at drc's fit; true curve flat. drc's fit is not a minimum on C30 (curves[C30].minimumCheck); rule (ii) uses curves[C30].flatLineFTest, taken at the infimum",
      "reducedModel": {
        "fixed": "flat line: y = mean, one parameter",
        "rss": 132.02874255,
        "df": 19,
        "parameters": 1,
        "from": "mean of y (hand)"
      },
      "fullModel": {
        "fixed": {},
        "rss": 123.083276182267,
        "df": 16,
        "parameters": 4,
        "from": "drc LL.4"
      },
      "F": 0.387616867547388,
      "p": 0.763449235409811,
      "alpha": 0.05,
      "preferFull": false,
      "working": "F = ((132.028743 - 123.083276) / (19 - 16)) / (123.083276 / 16) = 0.387617; p = P(F(3, 16) > F) = 0.763449",
      "drcAnova": null
    },
    {
      "curve": "C01",
      "comparison": "Flat line (y = mean) against the 4PL; true curve Hill -1, IC50 1 uM",
      "reducedModel": {
        "fixed": "flat line: y = mean, one parameter",
        "rss": 47873.4454889667,
        "df": 29,
        "parameters": 1,
        "from": "mean of y (hand)"
      },
      "fullModel": {
        "fixed": {},
        "rss": 163.430466735332,
        "df": 26,
        "parameters": 4,
        "from": "nls"
      },
      "F": 2530.04721285512,
      "p": 3.57314954879994e-32,
      "alpha": 0.05,
      "preferFull": true,
      "working": "F = ((47873.445489 - 163.430467) / (29 - 26)) / (163.430467 / 26) = 2530.047213; p = P(F(3, 26) > F) = 3.57315e-32",
      "drcAnova": null
    }
  ]
}
