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.
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.
| Section | What is compared | Size |
|---|---|---|
| A | The reference implementation against matrix-exponential solutions computed separately in Python (SciPy), for single doses, dose trains and steady state. | 71 checks |
| B | Published 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 |
| C | Mathematical properties the solution must satisfy, such as mass balance, superposition and the steady-state limit. | 171 checks |
| D | The 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 |
| E | The 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.
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 dose | Level after | Loading dose not entered | Loading dose entered |
|---|---|---|---|
| 2,000 mg | Dose 2 | +27% | 0% |
| 2,000 mg | Dose 3 | +16% | 0% |
| 2,000 mg | Dose 5 | +7% | 0% |
| 2,500 mg | Dose 2 | +39% | 0% |
| 2,500 mg | Dose 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.
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 entered | Band shown | Coverage (target 90%) | Below / above band | At last trough | At last peak |
|---|---|---|---|---|---|
| No levels | 500 of 500 | 88.0% (±2.4) | 5.5% / 6.5% | 88.2% | 89.8% |
| One level after dose 5 | 492 of 500 | 91.0% (±1.7) | 3.4% / 5.6% | 93.3% | 91.7% |
| Loading dose, one level after dose 3 | 494 of 500 | 90.4% (±1.7) | 2.9% / 6.7% | 91.5% | 88.5% |
| Peak and trough at steady state | 500 of 500 | 90.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 entered | Band shown | Coverage (target 90%) | Below / above band | At last trough | At last peak |
|---|---|---|---|---|---|
| No levels | 499 of 500 | 92.6% (±1.9) | 3.5% / 3.9% | 96.2% | 93.6% |
| One level after dose 5 | 495 of 500 | 87.4% (±2.0) | 4.5% / 8.1% | 87.1% | 85.5% |
| Loading dose, one level after dose 3 | 491 of 500 | 89.2% (±1.9) | 2.9% / 7.8% | 86.8% | 86.2% |
| Peak and trough at steady state | 500 of 500 | 81.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.
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.