Evidence and methods

Software checks

Three developer-run checks: the calculator’s arithmetic against an independently written reference calculation, its handling of a loading dose, and how often its 90% band contains the true concentration in synthetic patients. They test whether the software does what it describes. They do not show how accurately it predicts levels in real patients.

Calculator version 2026-09-25.1. All results on this page were run on this version.

Independent reference calculationDoes the code compute what the equations say?
Developer-run · 255 passed, 0 failed

A second implementation of the two-compartment equations was written from the differential equations, without importing any calculator code. It is first checked against solutions computed separately in Python, then the calculator’s own functions are compared with it. Agreement must be within one part in a million wherever both sides are exact.

SectionWhat is comparedSize
AThe reference implementation against matrix-exponential solutions computed separately in Python (SciPy), for single doses, dose trains and steady state.71 checks
BPublished reference values for a typical adult (35 y, 70 kg, SCr 0.83 mg/dL; 1,000 mg q12h over 1.75 h).6 checks
CMathematical properties the solution must satisfy, such as mass balance, superposition and the steady-state limit.171 checks
DThe calculator's own code against the reference: the Colin 2019 prior, the reference regimen, every fixture case (including slow elimination, q18h/q36h and 0.5–4 h infusions), 20 random adult regimens and the analytic AUC.6 groups
EThe loading-dose history against the reference: 40 random schedules (loading dose, infusion times, a shortened gap to the first maintenance dose, 2–7 doses), comparing concentrations, AUC, the dose-N trough and AUC, and the fit's predicted level.40 regimens

Result on version 2026-09-25.1: 255 checks passed and no value differed from the reference by more than one part in a million. The same developer wrote both implementations, so a shared misreading of the model would not be caught; the comparison with Tucuxi uses a separately built program for that reason. Its Vancomyzer side was re-run on version 2026-09-25.1 and reproduces the published comparison exactly.

Loading-dose handlingLevels drawn after a loading dose.
Developer-run · synthetic

In the 1- and 2-level workflows, dose 1 can be entered as a loading dose with its own amount, infusion time and gap to the first maintenance dose. The fit to the measured levels then uses the doses actually given. If a loading dose is recorded as a maintenance dose instead, the extra drug is read as slow clearance and exposure is overestimated.

Example: a 60-year-old, 80 kg adult (SCr 1.0 mg/dL) on 1,000 mg every 12 h over 2 h, with one trough 11.5 h after the stated dose. Error in the calculated steady-state AUC₂₄ against the true value:

Loading doseLevel afterLoading dose not enteredLoading dose entered
2,000 mgDose 2+27%0%
2,000 mgDose 3+16%0%
2,000 mgDose 5+7%0%
2,500 mgDose 2+39%0%
2,500 mgDose 3+23%0%

This patient matches the population model exactly, so entering the loading dose recovers the true value. In patients who differ from the model, one level still leaves the estimate pulled toward the population model; the automated tests check that entering the loading dose gives the same accuracy as for the same patient without one, and that leaving it out adds a consistent overestimate. A loading dose equal to the maintenance dose reproduces the equal-dose result exactly. Held, missed or changed maintenance doses are still refused rather than guessed.

Uncertainty band coverageDoes the 90% band contain the truth 90% of the time?
Developer-run · synthetic · not yet validated in patients

500 synthetic adults per row, each given a true set of PK parameters. Levels were simulated from that truth with assay error and entered into the calculator the way a clinician would. Coverage is the share of plotted time points at which the true concentration lies inside the band (± 95% interval, accounting for repeated points in the same patient). Run on version 2026-09-25.1, 2026-09-25.

When patients match the calculator’s assumptions

Tests the machinery. Every row should be close to 90%.

Levels enteredBand shownCoverage (target 90%)Below / above bandAt last troughAt last peak
No levels500 of 50088.0% (±2.4)5.5% / 6.5%88.2%89.8%
One level after dose 5492 of 50091.0% (±1.7)3.4% / 5.6%93.3%91.7%
Loading dose, one level after dose 3494 of 50090.4% (±1.7)2.9% / 6.7%91.5%88.5%
Peak and trough at steady state500 of 50090.3% (±1.8)2.9% / 6.8%91.6%92.0%

When patients follow Colin 2019’s published variability

A stress test: the published between-patient variability (CV 27.9% CL, 27.3% V1, 97.9% V2) and 21.5% residual error, while the calculator keeps its own settings.

Levels enteredBand shownCoverage (target 90%)Below / above bandAt last troughAt last peak
No levels499 of 50092.6% (±1.9)3.5% / 3.9%96.2%93.6%
One level after dose 5495 of 50087.4% (±2.0)4.5% / 8.1%87.1%85.5%
Loading dose, one level after dose 3491 of 50089.2% (±1.9)2.9% / 7.8%86.8%86.2%
Peak and trough at steady state500 of 50081.8% (±2.5)8.3% / 9.9%80.4%84.8%

Reading. Under its own assumptions the band is calibrated. Before any level it is somewhat wide if the published variability is right. With a peak and a trough it is too narrow, mainly because the fit assumes a 15% assay error where the published model reports 21.5% (the error-model difference alone gives 84.7%; the variability difference alone 87.1%). This is why the chart labels the band “model-based; not yet validated”. Only measured patient levels can show which assumptions hold; coverage of a held-out level is a pre-specified endpoint of the planned validation study.

What these checks do not showRead with the evidence page.

All three are written and run by the developer. None uses patient data, and none shows that Colin 2019 describes a particular population. See Evidence and methods for the full list of checks and the pending independent clinical validation.