Validation notes

This page summarizes the current literature-backed validation scope for the simulation-diagnostic workflows that already have dedicated regression or integration coverage.

NPDE

OpenPKPD’s NPDE implementation is currently validated against the core behavior described in the canonical NPDE references:

  • Brendel K, Comets E, Laffont C, Laveille C, Mentré F (2006), Metrics for external model evaluation with an application to the population pharmacokinetics of gliclazide

  • Comets E, Brendel K, Mentré F (2008), Computing normalised prediction distribution errors to evaluate nonlinear mixed-effect models: the npde add-on package for R

Current OpenPKPD checks cover:

  • calibration under a correctly specified simulation model

  • stability of NPDE mean/variance across small scenario grids

  • strong separation under clear scale misspecification across multiple seeds

  • regression drift detection via tests/regression/reference_runs/diagnostic_npde.json

These checks live primarily in:

  • tests/unit/simulation/test_npde.py

  • tests/regression/test_diagnostics_regression.py

VPC / pcVPC principles

OpenPKPD’s VPC validation currently tracks the core expectations from the standard VPC and prediction-corrected VPC literature:

  • Karlsson MO, Holford N (2008), A tutorial on visual predictive checks

  • Bergstrand M, Hooker AC, Wallin JE, Karlsson MO (2011), Prediction-corrected visual predictive checks for diagnosing nonlinear mixed-effects models

Current OpenPKPD checks cover:

  • regression stability of observed vs simulated percentile summaries

  • coverage-style checks for observed median percentiles against simulated bands

  • sensitivity to clear clearance misspecification across multiple seeds

These checks live primarily in:

  • tests/integration/test_vpc_pipeline.py

  • tests/regression/test_diagnostics_regression.py

NCA

OpenPKPD’s dense-profile NCA checks currently align with common industry NCA parameter definitions, public PKNCA summaries, and analytic one-compartment reference behavior.

Reference anchors currently used for D2 are:

  • Certara Phoenix WinNonlin NCA parameter formulas (AUClast, Lambda_z, AUCINF, CL/F, Vz/F, MRT definitions)

  • PKNCA usage and defaults documentation for standard interval selection and lin-up/log-down calculation conventions

  • Han S (2018), Validation of Noncompartmental Analysis Performed by NonCompart R package, for published WinNonlin-backed Indometh reference tables

  • Gabrielsson & Weiner’s standard NCA textbook conventions for derived PK endpoints

Current OpenPKPD checks cover:

  • exact or near-exact agreement with closed-form IV bolus monoexponential reference values for AUC, half-life, clearance, volume, and MRT

  • oral theophylline benchmark checks against public PKNCA summaries for AUClast(0-24), Cmax, Tmax, half-life, and AUCinf.obs using the linear-up-log-down method family

  • published Indometh zero-start core benchmark checks for , Lambda_z, , Cmax, Tmax, AUClast, AUCinf, CL, and Vz against WinNonlin-backed tables

  • published Indometh IV bolus benchmark checks for back-extrapolated C0, AUClast, AUMClast, AUCinf, AUMCinf, CL, Vz, and MRT against WinNonlin-backed tables

  • published Indometh IV infusion benchmark checks for , Lambda_z, , Cmax, Tmax, AUClast, AUMClast, AUCinf, AUMCinf, CL, Vz, and infusion-adjusted MRT against WinNonlin-backed tables

  • published Indometh extravascular benchmark checks for the zero-start, AUMC, and MRT endpoints against WinNonlin-backed tables

  • oral one-compartment theophylline-like benchmark checks for AUCinf, Tmax, half-life, Lambda_z, CL/F, and Vz/F

  • deterministic regression drift detection via tests/regression/reference_runs/diagnostic_nca.json

These checks live primarily in:

  • tests/unit/nca/test_nca.py

  • tests/external_validation/test_vs_pknca.py

  • tests/external_validation/test_vs_winnonlin_indometh.py

  • tests/regression/test_diagnostics_regression.py

SAEM / Monolix parity

OpenPKPD now includes a public-theophylline SAEM parity check against Monolix project parameters exposed through the monolix2rx conversion examples.

Reference anchors currently used are:

  • public Monolix theophylline dataset/project documentation

  • monolix2rx conversion outputs that expose the final Monolix fixed effects for the bundled theophylline project

Current OpenPKPD checks cover:

  • SAEM recovery of the public Monolix theophylline ka, Cl, and V population parameters after matching Monolix’s mg/kg dose convention

  • continued stochastic-averaging stability checks on the same theophylline fit

These checks live primarily in:

  • tests/external_validation/test_vs_monolix.py

  • tests/external_validation/test_saem_reference.py

What these validation milestones do and do not claim

The current D1/D2 milestone work should be read as method-level external-reference validation, not full external parity certification.

What is covered now:

  • literature-aligned expectations for NPDE calibration and misspecification sensitivity

  • literature-aligned expectations for VPC percentile-band behavior and misspecification sensitivity

  • analytic and reference-workflow-aligned expectations for core dense-profile NCA endpoints

  • public cross-tool parity checks for Monolix SAEM, PKNCA/Phoenix-style NCA, and WinNonlin-backed Indometh NCA tables

  • explicit provenance links in the diagnostic regression baselines

What is not yet covered:

  • cross-software parity against proprietary WinNonlin executable outputs or a full vendor validation suite distributed with the software

  • broad cross-software parity against NONMEM / PsN / vpc / npde outputs on the same external dataset

  • formal acceptance envelopes derived from regulatory or consortium reference suites

Those broader comparisons remain future work for later validation milestones.

For the concrete benchmark cases and current findings, see docs/user_guide/external_validation_benchmarks.md.

For a method-by-method support summary that covers estimation, analysis, and workflow surfaces, see validation_matrix.md.