External validation benchmarks
This note records the current cross-tool benchmark fixtures that are bundled
with the repository and exercised by tests/external_validation/.
For the broader support classification across estimators and workflows, see
validation_matrix.md.
Validated estimator envelope
The table below is the quickest summary of what currently has empirical external validation in-tree. Treat it as a release-facing support summary, not as a claim of blanket parity with commercial tools.
Estimator family |
Empirical external anchors in-tree |
Current interpretation |
|---|---|---|
FO / FOCE / FOCEI |
|
strongest cross-tool evidence in the repository |
SAEM |
|
credible on current benchmark slices, but not yet broad enough for blanket parity claims |
BAYES(Laplace) |
|
useful weak-prior Bayesian summary path; still an approximation, not full MCMC parity |
BAYES(NUTS) |
internal statistical validation, bounded synthetic benchmark, and second-tier empirical theophylline benchmark |
real implementation, but currently a second-tier empirical path rather than a primary release-gated benchmark surface |
IMP / IMPMAP |
theophylline and warfarin PK empirical basin checks; analytic Gaussian-reference tests |
numerically credible on the current empirical slices, but still narrower than FO/FOCEI validation; benchmark budgets matter materially |
Nonparametric |
Pharmpy |
credible on one real dataset now, but still thin relative to FO/FOCEI coverage |
When adding new claims to README or migration docs, prefer the wording in this table over generic statements like “validated” or “production-ready”.
Monolix: theophylline SAEM
Reference source: public Monolix theophylline project parameters exposed by
monolix2rx’s conversion article/README.Fixture:
tests/external_validation/reference/monolix_theophylline_saem.jsonTest:
tests/external_validation/test_vs_monolix.pyComparison mode: OpenPKPD fits the Boeckmann theophylline dataset with
ADVAN2+ SAEM after converting dose to the Monolix project convention (AMT / WT, i.e. mg/kg).
The dose normalization step is now tested explicitly: using the raw NONMEM-style
AMT values without conversion produces materially worse agreement with the
public Monolix fixed effects, so the benchmark guards both the estimator and the
benchmark setup itself.
Reference values on the natural scale are approximately:
Parameter |
Monolix reference |
|---|---|
|
1.533 h⁻¹ |
|
0.0402 L/h/kg |
|
0.4555 L/kg |
Current OpenPKPD results land within a few percent of those public Monolix
values with a fixed seed and a moderate SAEM schedule (200 + 100 iterations).
Advanced estimators: empirical benchmark notes
SAEM
Anchors: public Monolix theophylline SAEM reference;
nlmixr2warfarin PK SAEM reference; reducednlmixr2warfarin PK/PD mixed-endpoint basin; Grasela & Donn (1985) neonatal phenobarbital FO NONMEM referenceTests:
tests/external_validation/test_vs_monolix.py,tests/external_validation/test_saem_reference.py,tests/external_validation/test_vs_nlmixr2.pyCurrent interpretation: SAEM now has three external anchors — Monolix theophylline, nlmixr2 warfarin PK (
TestWarfarinSAEMvsNlmixr2: KA, V, and σ within 30% of the reference and CL now within the same tracked acceptance envelope after the current direct M-step update), and Grasela & Donn (1985) phenobarbital (TestPhenobarbitalSAEMvsLiterature: CL/kg within 35%, V/kg within 25%, half-life within 40% of the published FO NONMEM values). Broader PBPK-style empirical coverage is still missing.Reduced mixed-endpoint benchmark (2026-03-31):
TestSAEMWarfarinPKPDReducedVsNlmixr2now validates a short-schedule SAEM run on the 4-subject reduced warfarin PK/PD mixed-endpoint fixture withjit="llc"and a20 + 10iteration schedulemeasured run time on the current local machine is about
3.5sstructural terms stay essentially on top of the bundled reduced
nlmixr2reference basin, whilePK_PROP_ERRremains the loosest tracked term at about+16%under the short speed-gating schedulethis promotes SAEM into the reduced mixed-endpoint external-validation surface, while still leaving broader mixed-endpoint and PBPK-style breadth as open work
BAYES(Laplace)
Anchors:
nlmixr2FOCEI basins for theophylline and warfarin PK, the reducednlmixr2warfarin PK/PD mixed-endpoint basin, plus theNONMEM402 two-compartment IV empirical basinTests:
tests/external_validation/test_bayes_empirical_reference.py,tests/external_validation/test_bayes_nonmem_402_diagnostics.pyCurrent interpretation: the weak-prior Laplace path stays near validated empirical basins and produces stable posterior summaries, but it remains a Gaussian approximation rather than a full MCMC benchmark.
Reduced mixed-endpoint benchmark (2026-03-31):
TestWarfarinPKPDReducedBayesLaplaceEmpiricalnow validates the 4-subject reduced warfarin PK/PD mixed-endpoint path against the bundlednlmixr2reference basin withjit="llc",maxeval=1,n_samples=10, andn_parallel=4measured run time on the current local machine is about
3.7sthe covariance path now stays on
optimizer_inverse_hessianrather than falling back to the265-probe finite-difference Hessian pathmeasured relative errors on the promoted slice are very small:
KTR +0.02%,KA +0.02%,CL +0.06%,V -0.18%,EC50 -0.02%,KOUT -0.05%,E0 +0.07%,PK_PROP_ERR +0.01%,PK_ADD_ERR +0.20%,PD_ADD_ERR +0.04%this closes the earlier “reduced mixed-endpoint Laplace is still too slow to promote” note; the current reduced warfarin PK/PD Laplace path is now a real external benchmark rather than only a profiling target
Measured benchmark expansion (2026-03-29):
the
NONMEM402 BAYES(Laplace) benchmark passes on the current local 402 fixture (4 passedin129.43s)this adds a second model family beyond the 1-compartment oral PK empirical slices and makes BAYES(Laplace) less dependent on one narrow benchmark shape
Warfarin BAYES(Laplace) benchmark (2026-03-30):
TestWarfarinBayesLaplaceEmpiricalvalidates BAYES(Laplace) against thenlmixr2FOCEI basin on 32-subject warfarin PK: OFV ≈ −219 (real, not a penalty sentinel), KA within 20%, CL within 15%, and V within 15% of the nlmixr2 reference (KA −9.4%,CL +0.4%,V −8.2%on the measured run)runtime ≈ 20 s; the
test_ofv_is_finite_and_not_penaltyguard checks bothnp.isfinite(ofv)andofv < 1e6to catch any recurrence of the warm-start OFV sentinel bug that was fixed in the same pass (see note below)FOCE warm-start corruption fix (2026-03-30): a three-part fix in
foce.pyeliminates the η̂ warm-start contamination that caused the FOCE outer optimizer to emit a1e10penalty OFV when the search passed through a near-singular Ω region and the cached η̂ values became stale. The fix adds a cold-start retry inobjective(), a η̂ reset before final OFV evaluation in_run_single(), and a η̂ reset before best-iterate re-evaluation in_maybe_promote_best_iterate().
BAYES(NUTS)
Anchors: exact Gaussian-reference tests, bounded synthetic runtime / diagnostic probes on small oral-PK workloads, and an empirical theophylline benchmark against the
nlmixr2FOCEI basinTests:
tests/external_validation/test_advanced_estimators_reference.py,tests/external_validation/test_bayes_empirical_reference.py,tests/unit/estimation/test_nuts.py,tests/unit/estimation/test_bayes.pyCurrent interpretation: the built-in NUTS backend is real and scientifically useful, but today it is a second-tier empirical path. It is not yet broad or cheap enough to serve as a primary release-gated cross-tool benchmark on realistic population models.
Measured probes (2026-03-29):
on the bounded synthetic 6-subject oral-PK workload with
n_samples=12,tune=8, andn_chains=2, the compiled symbolic path took about8.53s, withused_analytic_theta_gradient=trueandused_fd_gradient=falseon both chainson the empirical theophylline benchmark with
n_samples=24,tune=16, andn_chains=2, built-inBAYES(NUTS)took about28.08s, landed close to thenlmixr2FOCEI basin (KA/CL/Vrelative errors about1.33% / 0.50% / 1.16%), and reduced maxR-hatto about1.19OMEGAandSIGMAremained fixed at their starting values, which is the current documented theta-only contractpractical recommendation: use
BAYES(Laplace)for fast weak-prior Bayesian summaries and preferPyMCor another stronger backend for primary MCMC workflows when full posterior credibility matters
IMP
Anchors:
nlmixr2FOCEI basins for theophylline and warfarin PK plus exact Gaussian marginal references for the IMP objectiveTests:
tests/external_validation/test_imp_empirical_reference.py,tests/external_validation/test_saem_reference.pyCurrent interpretation: IMP now has both analytic validation and a two-dataset empirical sanity envelope. It is no longer “toy only”, but its empirical coverage is still thinner than the core FO/FOCEI path.
Measured benchmark envelope (2026-03-29):
theophylline reaches the validated
nlmixr2basin with a fixed-seed budget ofisample=150, maxeval=12the earlier short budget
isample=40, maxeval=4is numerically stable but does not reliably converge into the acceptance envelopewarfarin is now release-gated through the MAP-style path:
IMPMAP(isample=60, maxeval=12)converges and stays in the validated basin forKA/CL/Vraw
IMPremains more basin-sensitive on warfarin and is not the recommended practical path theremeasured recommendation-test runtime for the warfarin comparison (
raw IMPplusIMPMAP) is about259 son the current test machine, so the warm-started path should be treated as a higher-confidence, higher-cost validation surface rather than a quick smoke checkReduced mixed-endpoint probe (2026-03-31):
reduced 4-subject warfarin PK/PD
IMPMAP(isample=30, maxeval=4, jit="llc")converges in about50.8sand lands close to the bundled reducednlmixr2basinhowever, the current run emits repeated native
CVODES mxstepwarnings, and disabling the narrow native warfarin PK/PD seam caused the same probe to time out at90sinterpretation: this is strong evidence that the mixed-endpoint IMPMAP path is scientifically plausible, but it is not yet quiet or cheap enough to promote into the stable external-validation matrix beside the reduced
BAYES(Laplace)andSAEMtests
Nonparametric
Anchors: Pharmpy’s bundled
phenoempirical dataset and fit results;nlmixr2FOCEI basin for Boeckmann theophylline (12-subject oral PK); plus exact EM-weight references for the core NPML optimizerTests:
tests/external_validation/test_vs_pharmpy.py,tests/external_validation/test_advanced_estimators_reference.pyCurrent interpretation: the nonparametric path is no longer validated only on exact toy likelihood matrices. On Pharmpy’s empirical phenobarbital dataset it converges, preserves a non-degenerate support distribution, and keeps the fixed-effects / residual-scale surface close to the Pharmpy benchmark basin.
Measured benchmark envelope (2026-03-29):
NONPARAMETRIC(base_method="FOCEI", maxeval=300, max_iter=80)on Pharmpy’sphenodataset converged successfullyfixed effects landed near the Pharmpy fit:
POP_CL=0.00469994,POP_VC=0.985239,COVAPGR=0.157775residual variance remained close to the Pharmpy reference:
sigma=0.013416vs0.013241the final support distribution did not collapse:
59support points retained, largest weight about0.086, and27support points above1%massthis is a real empirical operational benchmark, but it is still anchored to Pharmpy’s FOCEI basin rather than a separate external nonparametric reference implementation
Theophylline oral NPML benchmark (2026-03-30):
TestTheophyllineNonparametricEmpiricalvalidates NPML on the Boeckmann theophylline dataset (12 subjects, oral) against thenlmixr2FOCEI basin: CL within 20% (−0.1%on the measured run), V within 20% (+0.2%), KA physiologically plausible (1.47 h⁻¹ vs nlmixr2 1.44 h⁻¹)provides a second nonparametric dataset anchor (oral PK vs the IV-type pheno dataset) and confirms support-point non-collapse on a different absorption route
PKNCA / Phoenix-style NCA: theophylline
Reference source: the rendered PKNCA vignette Computing NCA Parameters for Theophylline plus Phoenix WinNonlin formula documentation.
Fixture:
tests/external_validation/reference/pknca_theophylline_summary.jsonTest:
tests/external_validation/test_vs_pknca.pyComparison mode: OpenPKPD runs
NCAEngine(auc_method="linear-up-log-down", exclude_cmax=True)on the Boeckmann theophylline profiles and compares the summary statistics against the vignette’s published output.
Benchmarked summary targets include:
Interval |
Metric |
Reference |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Current OpenPKPD results match the public PKNCA summary closely. Separately,
OpenPKPD now has dedicated unit coverage for interpolated user-supplied
t_last cutoffs, which is a stricter boundary-handling check than the public
vignette summary surface itself.
WinNonlin-backed NCA: Indometh
Reference source: Han (2018), Validation of Noncompartmental Analysis Performed by NonCompart R package, Appendix A (Indometh tables validated against Phoenix WinNonlin).
Fixture:
tests/external_validation/reference/winnonlin_indometh_nca.jsonData:
tests/external_validation/data/indometh.csvTest:
tests/external_validation/test_vs_winnonlin_indometh.pyComparison mode: the repository now exercises four public Indometh surfaces:
a zero-start comparison that prepends an explicit zero-concentration row at dose time and checks the shared dense-profile core endpoints
an IV bolus comparison that back-extrapolates
C0, includes the0 → first samplecontribution in AUC/AUMC, and checksC0,AUClast,AUMClast,AUCinf,AUMCinf,CL,Vz, andMRTagainst the published WinNonlin tablesan IV infusion (0.25 h) comparison that checks the published exposure, terminal, AUMC, and infusion-adjusted
MRTendpointsan extravascular comparison that checks the published zero-start exposure, AUMC, and
MRTendpoints
This gives exact or near-exact parity for the asserted dense-profile Indometh endpoints on all 6 subjects across the published linear and log tables.
IV bolus implementation note
To match the published IV bolus tables, OpenPKPD now:
reconstructs missing
C0from the first two positive observations using log-linear back-extrapolationuses that reconstructed
C0in AUC/AUMC aggregation and terminal-regression window selectionuses the exact exponential-decline AUMC segment formula for log-down intervals, which is required for exact log-bolus
AUMClast/MRTparity
WinNonlin status
Phoenix WinNonlin itself is proprietary, so the repository does not bundle a redistributable Phoenix project/output file. Instead, the benchmark uses:
Phoenix documentation for parameter formulas and terminal-phase conventions
PKNCA’s public theophylline vignette as an executable open surrogate for the same lin-up/log-down workflow family
Han (2018)’s public NonCompart validation paper, which republishes WinNonlin-backed Indometh reference tables
This gives public, reviewable parity evidence without introducing license or reproducibility problems.
nlmixr2 FOCEI: theophylline and warfarin
Reference source: nlmixr2 v5.0.0 FOCEI fits generated by the bundled R scripts in
tests/external_validation/nlmixr2/.Fixtures:
tests/external_validation/nlmixr2/reference/theophylline_foce.json,warfarin_pk_foce.json,warfarin_pkpd_foce.json.Test:
tests/external_validation/test_vs_nlmixr2.py
Theophylline 1-compartment FOCEI
Parameter |
nlmixr2 v5.0 |
OpenPKPD |
Δ% |
|---|---|---|---|
KA (h⁻¹) |
1.438 |
~1.44 |
<1% ✅ |
CL (L/h) |
2.793 |
~2.79 |
<1% ✅ |
V (L) |
32.193 |
~32.2 |
<1% ✅ |
IIV KA |
0.413 |
~0.41 |
~1% ✅ |
IIV CL |
0.0604 |
~0.060 |
<1% ✅ |
Prop. σ² |
0.0242 |
~0.024 |
<1% ✅ |
Warfarin PK 1-compartment FOCEI
Parameter |
nlmixr2 v5.0 |
OpenPKPD |
Δ% |
|---|---|---|---|
KA (h⁻¹) |
0.648 |
~0.65 |
<2% ✅ |
CL (L/h) |
0.136 |
~0.14 |
<3% ✅ |
V (L) |
8.168 |
~8.2 |
<1% ✅ |
Prop. σ² |
0.0505 |
~0.050 |
<1% ✅ |
OFV |
474.61 |
~474 |
<0.2% ✅ |
Assessment: Excellent agreement with nlmixr2 on both datasets. Parameter estimates and OFV are within 5% across all metrics.
NONMEM 7.x: multi-compartment and covariate models
Reference source: NONMEM 7.4.3/7.5.0 output files (
temp/nonmem/*.res), from the Bauer (2019) NONMEM tutorial dataset.Fixtures:
tests/external_validation/reference/nonmem_402_focei.json,nonmem_504_focei.json,nonmem_504f_focei.json.Test:
tests/external_validation/test_vs_nonmem.py
OFV convention
NONMEM reports OFV without N·log(2π). OpenPKPD now matches that convention for the validated FOCE/FOCEI paths, but raw OFV parity can still differ on some benchmarks because the tools do not necessarily report identical approximated objectives after interaction/Hessian corrections. For run 402, parameter parity is therefore the primary acceptance surface.
Run 402 — Two-Compartment IV (ADVAN3 TRANS4), 30 subjects
Parameter |
NONMEM 7.4.3 |
OpenPKPD |
Status |
|---|---|---|---|
V1 (L) |
9.76 |
~9.76 |
✅ |
CL (L/h) |
3.88 |
~3.88 |
✅ |
V2 (L) |
30.8 |
~30.8 |
✅ |
Q (L/h) |
8.77 |
~8.77 |
✅ |
OFV |
196.0 |
tool-dependent offset |
⚠️ convention/approximation |
Current interpretation: OpenPKPD now reaches the NONMEM-like parameter basin on run 402. The remaining benchmark note is about raw OFV comparability, not the previous V2/Q-swapped local minimum.
Run 504 — 1-Compartment + Covariates (ADVAN1 TRANS2), 60 subjects
Parameter |
NONMEM 7.5.0 |
OpenPKPD |
Δ% |
|---|---|---|---|
CL (L/h) |
3.031 |
3.057 |
+0.8% ✅ |
V (L) |
32.384 |
32.740 |
+1.1% ✅ |
CL~WT exp |
0.660 |
0.670 |
+1.6% ✅ |
V~WT exp |
1.322 |
1.323 |
+0.1% ✅ |
CL~AGE exp |
−0.534 |
−0.537 |
+0.5% ✅ |
OFV |
1058.3 |
1271.0 |
+20.1% ⚠️ |
Current interpretation: the maintained Python-API FOCEI benchmark now lands
very close to the NONMEM 7.5.0 parameter basin on the full 60-subject
covariate-rich dataset, even at maxeval=1, when started from physiologic
covariate priors (WT^0.8, V~WT^0.8, CL~AGE≈-0.5, sex multipliers near
0.9–0.95). The remaining issue on this case is a raw OFV gap, not parameter
recovery.
Important scope note: the older control-stream stress case (temp/nonmem/504.ctl)
still uses rougher cold starts and remains useful as a parser/runtime benchmark
for difficult covariate landscapes. That is a different support question from
the maintained API benchmark above.
Run 504f — Fixed covariate exponents
NONMEM 7.5.0 |
OpenPKPD |
Δ% |
|
|---|---|---|---|
OFV |
1065.4 |
1179.2 |
+10.7% ⚠️ |
CL~AGE exp |
−0.529 |
−0.099 |
−81% ❌ |
Phenobarbital — Neonatal Population PK (1-Compartment FO)
Reference source: Grasela & Donn (1985). NONMEM FO analysis of 59 preterm neonates.
Fixture:
tests/external_validation/reference/grasela1985_phenobarbital_fo.jsonData:
tests/external_validation/data/phenobarbital_simulated.csv(simulated with published parameters; seed=42)Test:
tests/external_validation/test_phenobarbital.pyExample control stream:
examples/control_streams/12_phenobarbital_fo.ctl
Published NONMEM FO estimates (Grasela & Donn 1985):
Parameter |
Published |
Units |
|---|---|---|
CL |
0.0047 |
L/h/kg |
V |
0.96 |
L/kg |
BSV CL |
~19% |
CV% |
BSV V |
~16% |
CV% |
t½ |
~141 |
h |
This dataset demonstrates weight-based allometric scaling and is the classic example from NONMEM Users Guide Part V. OpenPKPD should recover the simulation-truth parameters within ±30% on the simulated dataset.
New Example Control Streams
Four new annotated control stream examples have been added:
File |
Description |
Reference |
|---|---|---|
|
Warfarin 1-cmt oral FOCEI |
nlmixr2 v5.0 |
|
2-cmt IV FOCEI with init guidance |
NONMEM 7.4.3 Run 402 |
|
Neonatal phenobarbital FO |
Grasela & Donn 1985 |
|
1-cmt + WT/AGE/SEX covariates |
NONMEM 7.5.0 Run 504 |
Priority Improvement Areas
P1 — Two-Compartment FOCEI parity (Run 402) — Improved
The old V2/Q-swapped local-minimum failure mode is no longer the defining behavior on this benchmark. The current remaining gap is documenting and defending the residual OFV difference after OpenPKPD reaches the correct basin.
Implemented in v0.3:
FOCEMethod(n_starts=N, perturbation_scale=σ, seed=S)runs N independent starts from perturbed initial values and returns the best OFV.perturbation_scalesets the Gaussian σ in the transformed (log/logit) parameter space; σ=1.0 ≈ factor-of-e perturbation.
Operational guidance for 402: provide near-correct initial values. For a 2-compartment IV model, ensure V2 > V1 and Q ≈ CL:
$THETA
(0, 9.8) ; V1
(0, 3.7) ; CL
(0, 30.0) ; V2 — initialise near peripheral volume (>> central)
(0, 9.0) ; Q — initialise near inter-compartmental CL
This lands in the validated basin reliably. Multi-start still helps on models with shallower alternative basins, but 402 is no longer primarily tracked as a “stuck local minimum” case.
P2 — Covariate Exponent Estimation (Run 504/504f) — Refined
Run 504 is no longer primarily a “can OpenPKPD recover the covariate basin?” problem. The maintained Python-API FOCEI benchmark now reaches the NONMEM parameter basin tightly on the full 60-subject dataset.
What remains difficult is narrower:
cold-start control-stream execution for
504.ctl/504f.ctlraw OFV comparability on the same converged basin
broader coverage of covariate-rich datasets beyond this single NONMEM family
Operational guidance still stands:
initialize covariate exponents near physiological priors
tighten
GTOLon flatter covariate landscapesuse multi-start when exploring unfamiliar covariate structures
P3 — Block OMEGA with Covariates — Medium
Block OMEGA for correlated IIV in the presence of multiple power-law covariates produces inflated IIV estimates. Likely requires profile likelihood or adaptive OMEGA update step size. No fix yet.
Current conclusions
Monolix SAEM: OpenPKPD is numerically consistent with the public Monolix theophylline project after matching dose units.
nlmixr2 SAEM (warfarin): KA, V, and σ are within 30% of the nlmixr2 reference. CL has a documented ~28% systematic gap (tracked in
test_cl_documented_gap_from_nlmixr2); root cause under investigation.SAEM (phenobarbital, Grasela 1985): CL/kg within 35%, V/kg within 25%, and half-life within 40% of the published FO NONMEM reference values.
BAYES(Laplace) (warfarin): OFV ≈ −219 (not a penalty value); KA −9.4%, CL +0.4%, V −8.2% from the nlmixr2 FOCEI basin. FOCE warm-start corruption fix eliminates the previous 1e10 OFV sentinel.
Nonparametric (theophylline NPML): CL −0.1%, V +0.2%, KA +1.9% from the nlmixr2 FOCEI basin on the 12-subject Boeckmann theophylline dataset.
PKNCA / Phoenix-style NCA: OpenPKPD reproduces the published theophylline summary metrics very closely, and the repository now separately tests interpolated user-specified cutoff handling in the NCA unit suite.
WinNonlin-backed Indometh NCA: OpenPKPD now matches the published Indometh zero-start, IV bolus, IV infusion shared-endpoint, and extravascular reference tables for both linear and log rules.
nlmixr2 FOCEI: Excellent agreement (< 5% on all parameters) for theophylline and warfarin 1-compartment models.
NONMEM 2-compartment (Run 402): OpenPKPD now reaches the correct NONMEM-like parameter basin. The remaining note is a raw OFV offset due to differing Hessian-correction conventions, not a local-minimum failure.
NONMEM covariate model (Run 504): maintained FOCEI benchmark now reaches the NONMEM parameter basin closely on the full 60-subject dataset; the remaining note is an OFV gap rather than parameter recovery.
NONMEM covariate model cold-start stress cases (Run 504/504f control streams): still useful runner-level benchmarks for difficult covariate initialization and raw OFV comparability.
References
Boeckmann AJ, Sheiner LB, Beal SL (1992). NONMEM Users Guide — Part V.
Grasela TH Jr, Donn SM (1985). Dev Pharmacol Ther, 8(6):374-83.
Bauer RJ (2019). NONMEM Tutorial Part II. CPT Pharmacometrics Syst Pharmacol, 8(8):538-556. [PMC6709422]
Schoemaker R et al. (2019). nlmixr: An R package for nonlinear mixed-effects model building. CPT Pharmacometrics Syst Pharmacol, 8(9):641-654. [PMC6930853]
Han S (2018). Validation of Noncompartmental Analysis Performed by NonCompart. Transl Clin Pharmacol, 26(1):10-17.
Bae KS, Yim DS (2016). FOCEI and the R implementation. Transl Clin Pharmacol, 24(4):161.