vancomycin tdm · how-to and mathematics

From a patient to a dose — and every equation in between.

A walkthrough of the real calculator, followed by a complete account of the mathematics and the population models it uses, each tied to the paper it came from. Every screenshot is a synthetic demo patient, never a real one. This is orientation, not clinical advice — the tool is decision support, and every number it produces still wants a clinician's judgement.

Five words first

AUC24
The total drug exposure over a day — the area under the concentration-time curve. Vancomycin's efficacy and its kidney toxicity both track exposure rather than any single concentration, which is why the 2020 guideline made this the target and retired trough-only dosing.
Trough
The lowest concentration, just before the next dose. Still worth measuring — it is what an assay actually returns — but it is no longer a target. Many different exposure profiles can produce an identical trough.
Clearance (CL)
Volume of blood cleared of drug per hour. It sets the exposure: at steady state, AUC24 = daily dose ÷ CL.
Volume of distribution (V)
The apparent volume the drug spreads into. It sets how high the peak goes and how fast the level swings between doses.
Bayesian / MAP
A method that starts from what is typical for a population, then bends towards this patient as their own measured levels arrive. With one level it moves partway; with more, further. It never ignores the data, and never fully abandons the prior.

The walkthrough

01

Open the tool

The vancomycin calculator as it opens, inputs on the left and results on the right. The vancomycin calculator as it opens, inputs on the left and results on the right.

Inputs on the left, answers on the right. Two modules across the top: Trough-Based for deterministic dosing, and AUC Precision for Bayesian fitting once you have levels. Saved profiles work in both — save from either and loading fills both, so a patient is entered once. Nothing leaves the browser: there is no server and no network call.

02

Describe the patient

Patient demographics and renal function filled in, with derived weights and creatinine clearance shown. Patient demographics and renal function filled in, with derived weights and creatinine clearance shown.

Age, sex, height, weight and creatinine. Sex has no default — the tool will not calculate until it is chosen, because it changes both the creatinine clearance and the ideal body weight. The tool derives ideal and adjusted body weight and shows the creatinine clearance it will use, naming the weight basis so you can see which one it chose. The creatinine is used exactly as entered — it is never rounded up. If cystatin C is available, entering it surfaces a creatinine/cystatin discordance check, which is the honest answer to the low-muscle-mass problem that rounding was invented to paper over.

03

Read a starting dose

The trough-based module showing an empiric regimen. The trough-based module showing an empiric regimen.

A starting regimen from population pharmacokinetics before any level exists. The answer leads — the regimen, then its AUC24 — with the curve beside it and the working one step away underneath. Choose the clearance and volume models on the left; the panel underneath them states the provenance of whichever you pick. The tool marks the exposure as roughly ±30% at this stage — that is what "no levels yet" means, and it says so rather than implying precision it does not have.

04

Enter the actual course

The AUC Precision module with a dose history and a measured level entered. The AUC Precision module with a dose history and a measured level entered.

Enter what the patient actually received — every dose, its infusion duration, and the real administration time — then the measured level and when it was drawn. Times matter more than people expect: the fit is only as good as the timestamps. Rows that are started but incomplete are reported rather than silently dropped.

05

Fit this patient

The Bayesian result: the patient's course on a timeline, the recommended regimen with its AUC range and confidence, and the curve beneath on the same axis. The Bayesian result: the patient's course on a timeline, the recommended regimen with its AUC range and confidence, and the curve beneath on the same axis.

The fit. It opens on the patient's course — each dose a bar as wide as its infusion, the measured level a dot — with the recommendation at its end: the regimen, its AUC24 and the range it is likely to fall in, one word for how far to trust it, and the one next step. The curve beneath shares the course's time axis. Below, a line each, is the evidence: why this dose, the regimen the patient is on, how the models agree, how the fit meets the measurement, and the whole dose-by-interval exposure matrix. This example's course holds a genuine q12h → q8h transition, detected from the two most recent intervals rather than from whichever interval appeared most often. If you know the intended order, set it in Current intended regimen; that steers the projection and never alters the data the fit consumes.

06

Read the profile

The concentration-time profile with the individual fit, population prediction and the measured level. The concentration-time profile with the individual fit, population prediction and the measured level.

Model and measurement are drawn in different colours. The solid purple line is this patient's fit; the thin grey dashed line is what the population model predicted before their levels were known. The gap between them is what the measurement bought you. The lavender band around the fit is the 80% range simulated for this model and number of levels. Measured levels are black dots with their value, each with a small purple ring where the fit puts that moment — the distance between the two is how far the fit misses the measurement; doses are short marks on the time axis, with their amounts and intervals on the course strip above. Past "now" the fit continues as a dashed prediction over a faintly shaded field. Point anywhere on the curve or the strip to read the fitted concentration at that instant, the clock time, and how long it has been since the last dose.

Every time is a date and a time

Doses and levels are entered as full timestamps everywhere in the tool — never a bare clock reading. This is not tidiness; it is the difference between a correct answer and a confidently wrong one.

Two-level sampling routinely spans midnight. A dose at 10:22 and a level at 10:38 the next morning are 24.3 hours apart, but from clock readings alone that is indistinguishable from 16 minutes. Earlier versions of this tool resolved the ambiguity by assuming the same day and adding 24 hours only when the result went negative, which folds every interval into the range 0–24 h.

That has two consequences, and the quieter one is the dangerous one. When the second level wraps below the first, the solver refuses and says so. But when both levels fall on a later day they shift by the same 24 hours, the log-linear slope between them is unchanged, and the elimination rate still comes out right — while the back-extrapolation to the peak, which uses the absolute time, is a full day early. Volume of distribution then comes out several-fold wrong with nothing on screen to suggest it. A dose at 08:00 with levels at 12:00 and 18:00 the next day gave a Vd of 75 L where the truth was 13 L.

Each field now carries its own date, and the tool prints the elapsed interval back to you — 1d 0.3h (total 24.3h) after dose start — so you can confirm it read the timestamps the way you meant them before you trust anything downstream. A level dated before its dose is reported as an error rather than silently absorbed.

Haemodialysis sessions

For a patient on intermittent haemodialysis, choose Goti 2018 · HD and log each session — past and planned — as a start date, a start time and a length in hours.

The sessions do not change the fit. Goti-HD carries dialysis as a yes/no covariate (clearance ×0.7, central volume ×0.5) for the whole course, because the study had no session times. What the sessions do is place every level against dialysis: during a session, soon after one (while drug is still returning from the tissues — within three distribution half-lives of the fitted model), pre-HD (within 12 hours before a session), or interdialytic. A level drawn during or soon after a session is flagged: the averaged model cannot see that timing, and fits it as if clearance were constant. A pre-HD level avoids the problem.

Levels are never adjusted. There is no "rebound factor" and no back-calculation to a pre-dialysis value — both would put a number into the fit that nobody measured.

With a planned session entered, the result reads the fitted curve at its start — the predicted pre-HD level — and says what it assumes: no further dose, or the planned dose rows you entered. It is compared with a pre-dialysis range of 15–20 mg/L. Sessions appear as grey bands on the course strip, the curve and the printed report.

Dosing on haemodialysis

For Goti 2018 · HD the answer is not a q-interval regimen — HD maintenance is given with each session. Before the first level the result is the empiric table from the 2020 consensus guideline (Rybak et al., Rec 13): loading and maintenance doses for the patient's actual body weight, after or during dialysis, for high- and low-permeability dialysers — both rows, because the dialyser is not assumed. Loading is capped at 3,000 mg (Rec 11).

Beside an HD answer the Regimens grid stays closed, after the Haemodialysis section: its q-interval cells are steady-state references, not an HD schedule. There is no weight-based guideline regimen and no q-interval projection, and the model advice names Goti-HD, the only model here that carries dialysis. To try a post-HD dose, enter it as a planned dose row; the answer reads it.

Once a level exists, the dose follows the next session and is sized at the start of the session after it, on the fitted curve with every dose entered: of no dose and each 250 mg step, the one whose pre-HD level lands closest to the middle of 15–20 mg/L (17.5; Rec 14), ties to the smaller dose; no dose if every step reads above 20; otherwise the closest, flagged. Aiming at the middle rather than the bottom of the band keeps a pre-HD level of 15 — about AUC 380 on VancoPK's published arithmetic — from becoming the usual answer. A planned dose you have already entered is read and reported, never silently replaced. A recurring schedule (Mon·Wed·Fri, Tue·Thu·Sat, or every N days) adds the sessions in one step. A dose given during a session is flagged — 20–40% of it is removed by the dialyser — and the Trough module refuses a patient on dialysis and sends them here.

When the schedule is unknown

In the ED, after a transfer, with AKI on HD or while nephrology decides, the next sessions are often unknown. With fewer than two upcoming sessions logged the answer is a one-time dose: after the one session still ahead if there is one, otherwise now, sized for a pre-HD level of about 17.5 mg/L at an assumed next session 24, 48 or 72 hours after the last session began — start to start, as a thrice-weekly schedule runs; 48 by default, changed with one tap, and always named as a clock time ("3 Oct 13:42, 48 h after session 1 began"). With no session logged it counts from the dose. A table shows each dose against all three, so you can see what happens if dialysis comes sooner or later; a session that would already be over is greyed out.

Give at sets when you can actually give the dose (a date and a 24-hour time; "1700" is read as 17:00). It moves the dose, never the assumed next session — so a later dose has fewer hours to cover and usually comes out smaller. If the assumed next session would start before a dose could be infused and distributed, the dose is placed after that session instead.

Creatinine on dialysis. A SCr drawn after a session reads low — dialysis removes creatinine too — and makes clearance look better than it is. When dated SCr readings span a logged session, the fit uses that session's pre-dialysis reading (drawn within 12 h before it), if it is the higher one, and says so; otherwise the post-dialysis value is flagged, not replaced. With only the single SCr field, enter a pre-dialysis value.

  • A missed post-HD dose is flagged — "No dose entered after session N" — unless a dose was given during that session or one is entered after it, given or planned.
  • A measured pre-HD level above 20 mg/L means no dose now and a recheck before the next session — for the dose after the session that level came before, never a later one. With a schedule logged, the dose is still sized from the fit and the same level is shown as a caution above it.
  • The model averages dialysis over time. If the next session is delayed or cancelled, real levels will run higher than shown — the answer says so every time.

Cross-checked against VancoPK's published haemodialysis method (Fewel): within one 250 mg step in 70% of 162 fictional cases. Ours reads lower at short gaps, where VancoPK removes 35% at the session just past, and higher at long ones, where the averaged clearance runs on with no session; VancoPK still doses at a pre-HD level of 22–25 where this tool holds. Not clinically validated on local HD patients.

Patients on peritoneal dialysis

For IV vancomycin in a patient on peritoneal dialysis, use Trough-based · Peritoneal dialysis. It doses by level, not by a population model. It says what to give, whether to give it today, and when to draw the next level, from this patient's own levels and their cycler schedule.

Why no model. No population model has been validated for IV vancomycin in PD. The one adult PD model (Hartinger 2023) covers CAPD with intraperitoneal dosing at a single centre. The 2022 ISPD peritonitis guideline gives no IV vancomycin dose, and no guideline gives an AUC target for PD. So AUC Precision refuses a patient ticked as on PD and links here.

The decline is measured, not assumed. Each level is read against the one before it (or against the first dose, when no vancomycin came before it). The elimination rate is the one that carries the earlier level, plus every dose in between, onto the measured level. The projection to your next draw is the range those rates give, and the answer says how many intervals it rests on.

Flagged intervals. A level drawn within 24 h of a dose ending may still be falling through distribution, and one drawn while the cycler runs reads low. Both are flagged; the second is also a caution when your AM labs fall before the cycler ends. Two levels under 12 h apart are not used. A held cycler night, and the time PD stopped, are marked on every interval they touch.

The answer. Choose a goal: 10–15 or 15–20 mg/L, or your own. There is no answer without one. The redose shown is the 250 mg step whose expected level at your next draw lands closest to the middle of the goal. Above the goal there is no dose: the next draw is the morning the level is projected to come down to the goal's top. Before any level, the load is 20 mg/kg of actual body weight (an institutional convention, not a guideline value), and the first level is the AM labs nearest 48 h after it, earlier with residual urine output.

Your institution's numbers stay yours. A maximum single dose, a target peak and your AM-labs time can be set under Your settings. They are kept in your browser only, and never part of the app. With a target peak set, the redose-to-a-target-peak calculation, V × (peak − level now), is shown beside the answer for comparison, never as the answer.

Published APD and CAPD half-lives (11.6 h on the cycler and 62.8 h off it, Manley 2001; 66–115 h in CAPD, Lam 2020) are shown as context only and never size a dose. Not clinically validated against PD outcomes.

Reading the graph

The plot exists so you can estimate a concentration at a time point. Its axes are built for that, and a few of its choices are deliberate enough to be worth stating.

The time axis is your interval, not a constant

Ticks are placed at half the dosing interval, so there are always seven of them and every dose boundary falls on one — at Q6H they land on 0, 3, 6, 9, 12, 15 and 18 h; at Q48H on 0, 24, 48 and so on. You can therefore read the trough directly off a gridline rather than interpolating toward it. Faint vertical rules mark where each dose is given.

This replaced a fixed 8-hour tick that aligned with no dose boundary at Q6H, Q12H, Q18H, Q24H, Q36H or Q48H, and drew nineteen overlapping labels at Q48H.

The concentration axis contains everything drawn on it

The vertical range is chosen to include the curve, the target band, and any measured level — not just the curve. That matters for a low-dose regimen in a fast clearer: if the axis followed the curve alone, a 10–20 mg/L band would be painted off the top of a plot whose peak was 8 mg/L, and the band would read as "everything above 10 is on target." Gridlines are placed on round values at a roughly constant density whatever the scale.

The same holds across time on AUC Precision: the time axis always reaches the last measured level. On a long course where doses were held and a level was drawn days after the last dose, that level used to fall past the end of the axis and vanish from the chart while the fit still used it (fixed in v3.6.0).

The shaded band is your target, and it is a reference

The band is drawn from the trough range you entered, and labelled with those bounds — it is not a fixed 10–20. It is shaded for orientation only: the 2020 guideline withdrew trough as a target (Rec 3, A-II) and AUC24 governs. It stays on the chart because a trough is still the value a level actually measures.

What each mark means

MarkMeaning
Green dot, with its valueA measured level. The only real number on either chart; everything else is a model. It has its own colour, used for nothing else, and is drawn above the curves so nothing hides it.
Small purple ring on the curve, joined to the dot by a hairlineWhere the fit puts that same moment (AUC Precision). The hairline is the residual: how far the fit misses the measurement.
Solid purple lineThis patient's fitted curve (AUC Precision), or the regimen they are on now, fitted to their level (Trough-Based, beside the recommendation). Past “now” the fit turns to short dashes over a faintly shaded field: prediction, not record.
Lavender band around the fit, with fine edgesThe 80% range simulated for this model and number of levels (AUC Precision).
Grey long-dashed lineWhat the population model predicted before the levels were known. Long dashes mean this and nothing else. The gap between it and the fit is what the measurement bought you. On Trough-Based it is drawn for the regimen shown once a level has been fitted; initial dosing has none, because there the curve already is the population prediction.
Terracotta lineThe recommended regimen (Trough-Based), or a projection under doses not yet given (AUC Precision).
Filled and open dots on a curvePredicted peak (end of infusion) and trough (end of interval), in the curve's own colour: the shape, not a second hue, tells them apart (Trough-Based).
Shaded band with its labelYour trough reference range, labelled with its bounds (Trough-Based).

On the course strip above the AUC Precision curve, each dose is a block as wide as its infusion, with a solid mark at the charted start time; levels are green dots with their values. When a new result arrives the curve traces in from left to right and each level lands as the trace passes it. It does not replay on a redraw, it is off if your system asks for reduced motion, and print always shows the finished chart.

Markers are drawn on the curve, not near it — the curve is sampled at the end of infusion and at each interval boundary specifically so the peak dot sits on the line rather than above the corner the polyline would otherwise cut. If a marker ever appears off the curve, that is a bug, not rounding.

One chart that does not draw your level

In Random Level mode the level is fitted against the course it came from — a first dose or a steady state — while the chart draws the recommended regimen at steady state. That is a different course, so the level is not placed on it: a point there would sit on a curve it was never drawn from. Read the fitted parameters, not the curve.

Choosing the interval — and why the tool will not do it for you

The tool computes exposure. It does not choose your dosing interval, and the reason is arithmetic rather than modesty.

At steady state the area under the curve over 24 hours is simply the total daily dose divided by clearance:

AUC24 = dose x (24/tau) / CL = total daily dose / CL

There is no interval term in it. 500 mg every 12 hours and 1000 mg every 24 hours deliver exactly the same exposure, and so does 2000 mg every 48 hours. Any rule that ranks regimens on how close their AUC24 sits to a target is therefore blind to the interval by construction; whichever interval happens to reach a daily dose nearest the target wins, and with doses rounded to 250 mg that is decided by rounding rather than by pharmacology. The rounding is not even-handed either — one 250 mg step moves AUC24 six times less at Q48H than at Q8H, so a long interval can always land closer.

Rather than hide that behind a tuned preference score, the tool shows the whole picture. The exposure matrix lays out every dose against every interval, shades each cell against the 400–600 mg·h/L band, strikes through anything that breaches a hard safety limit, outlines the recommended cell, and lets you click any other one to see its full profile. The AUC values repeat down the diagonals, which is the point: those regimens are exposure- equivalent.

What does change with the interval is the shape — peak and trough. Those are yours to weigh against renal trajectory, how long you expect the regimen to stand, infusion-related tolerability and practicality on the ward. The tool gives you the numbers for each; the judgement is not something it can derive from an AUC target.

The single recommendation is still shown, because a starting point is useful. Treat it as one admissible cell among several rather than as a ranking the model has earned.

When you can give the first dose

The answer reads the regimen, its AUC24 and trough, the confidence and the next step, then the First dose on one line. By default the first dose is when it is due (the last dose entered, given or planned, plus the new interval), or now if that has passed. The line gives the clock times after it ("then 12:00 daily") and the fitted level when it goes in. Choose change to set the time you can actually give it; "1200" reads as 12:00. The dose does not change: at steady state AUC24 is the daily dose over clearance, whatever the start. Until then an earlier first dose raises exposure and a later one lowers it, so when the AUC24 over the first 24 hours falls outside 400–600 the answer says so beneath the line. The projection curve starts at that time. The printed report carries the full detail, including where the time sits against the schedule.

When the weight changes the clearance

Before the first level, an obese patient's clearance depends on which weight Cockcroft-Gault is given. Tools differ: on the same Buelga model, two tools can disagree only because one estimates CrCl on a different weight. So when total body weight is more than 120% of ideal, AUC Precision lists the recommended regimen's AUC24 on ideal, adjusted and total body weight. Each row shows the CrCl, the model's clearance and the exposure, and the adjusted-weight row, the one used, is marked. SCr is used as measured; on Goti above 65 the note says when the model reads a higher SCr. When a renal-function caution also applies (augmented clearance, or a low creatinine in an older patient), the two are one note. The note goes once there is a level, or when you set CrCl manually. It never changes the dose.

The mathematics

Everything below is implemented in the shipped file and covered by an automated suite that runs the real engine — 101 unit and regression tests, 21 simulation checks, and 40 regimen-detection cases. Fifteen of those run the actual chart renderers and assert on what they draw.

Body size and renal function

Ideal body weight. At or above 60 in (152.4 cm), Devine (1974):

IBW = 50 (male) or 45.5 (female) + 2.3 x (height_in − 60)

Below 60 in, Devine extrapolates downwards and understates IBW, so the GlobalRPH BMI method is used instead — with the target BMI derived from the Devine anchor rather than chosen:

IBW = (50 ÷ 1.524²) x height_m² = 21.53 x height_m² (male) IBW = (45.5 ÷ 1.524²) x height_m² = 19.59 x height_m² (female)

Deriving the target from the anchor is what makes the two methods meet: IBW is continuous and monotonic across 152.4 cm. Substituting round numbers such as 21.5 / 22.0 — a different method entirely (Tokunaga 1991) — breaks the join and makes a 152.3 cm woman weigh more than one at 152.5 cm.

Adjusted body weight — AdjBW = IBW + 0.4 x (TBW − IBW), used for creatinine clearance when total weight exceeds IBW by more than 20%. Where actual weight is below the selected basis, actual weight wins.

Creatinine clearance — Cockcroft-Gault, on the measured creatinine:

CrCl = ((140 − age) x weight) ÷ (72 x SCr) x 0.85 if female

No rounding of low creatinine. Rounding up in the elderly under-doses measurably: in 56 patients aged ≥65 with baseline SCr <1, rounded creatinine missed measured troughs by 8.84 mg/L against 4.54 mg/L for the actual value, and 92.9% came out subtherapeutic (Drugs R&D 2017;17:463-70). The one exception is internal to the Goti model, which was estimated on truncated creatinine and so must be fed the same transformation — that never touches the creatinine clearance shown on screen.

One-compartment infusion, at steady state

With R0 = dose ÷ t_inf, ke = CL ÷ V, interval tau:

C_peak = (R0 ÷ (ke·V)) · (1 − e^(−ke·t_inf)) ÷ (1 − e^(−ke·tau)) C_trough = C_peak · e^(−ke·(tau − t_inf))

During the infusion the residual from the previous interval must be carried forward:

C(t) = (R0 ÷ (ke·V)) · (1 − e^(−ke·t)) + C_trough · e^(−ke·t) 0 ≤ t ≤ t_inf C(t) = C_peak · e^(−ke·(t − t_inf)) t > t_inf

Dropping that second term is a real and easy mistake — it agrees with the correct form at the end of the infusion, so it looks right, but it returns zero at t = 0, implying no drug present immediately before a dose at steady state. It shipped here until September 2026 and was caught by external review.

Exposure

AUC_24 = (dose x 24 ÷ tau) ÷ CL

Exact at steady state and independent of the compartment model — which is why it, not the trough, is the quantity the tool optimises against. A trapezoidal form (linear across the infusion, log-linear across elimination) is also implemented; the two agree to within 0.31% worst case.

Fitting this patient

Two levels, no prior — Sawchuk-Zaske. The elimination rate comes straight from the slope between two post-infusion concentrations:

ke = ln(C1 ÷ C2) ÷ (t2 − t1)

Volume then comes from back-extrapolating to the peak — and here where in the course the levels were drawn changes the answer. The single-dose form assumes nothing was left over from a previous dose:

V = (R0 ÷ (ke·C_peak)) · (1 − e^(−ke·t_inf)) first dose V = (R0 ÷ (ke·C_peak)) · (1 − e^(−ke·t_inf)) ÷ (1 − e^(−ke·tau)) steady state

Elimination is basis-independent — accumulation does not change a log-linear slope. Volume is not. Treating steady-state levels as first-dose levels attributes the drug already in the body to a smaller volume: for a patient with ke 0.0866 and V 52 L on 1000 mg q12h, V comes back as 33.6 L (−35%) and AUC24 as 687 against a true 444 — a 55% over-read, which would argue for reducing the dose of a patient already at target. The calculator therefore asks which it is rather than assuming.

Bayesian MAP — minimise the Burton (1985) objective over the individual deviations eta:

OBJ = Σ (eta_i² ÷ omega_i²) + Σ ((C_pred − C_obs)² ÷ SE²)

The first sum is the price of departing from the population; the second is the price of disagreeing with the measurements. Minimising their total is what "bend towards the patient, but only as far as the data justifies" means arithmetically. Parameters are exponential — CL = CL_pop · e^(eta_CL) — so they stay positive. The search is Nelder-Mead simplex, in two dimensions for one-compartment models and three for two-compartment.

Two compartments

Concentrations follow a bi-exponential: a fast distribution phase then a slow terminal phase, with the macro-constants alpha and beta obtained from the micro-constants k10, k12, k21. Steady state is reached by superposition of repeated doses — and the number of cycles required is derived from the terminal half-life rather than assumed:

beta = ((k10 + k12 + k21) − √((k10 + k12 + k21)² − 4·k21·k10)) ÷ 2 cycles = ceil(10 x (ln2 ÷ beta) ÷ tau), clamped to [12, 400]

A fixed 12 cycles is not steady state when clearance is low. At CrCl 10 a Goti patient has a terminal half-life near 110 h, so twelve 12-hourly cycles covers about 1.3 half-lives and reads the trough roughly 40% low — in exactly the renal-impairment patients where accumulation is the danger.

The population models

Four Bayesian priors and four deterministic model pairs. Every parameter below was checked against the primary source; where a coded value disagreed with its paper, the paper won.

Bayesian priors

ModelStructureTypical valuesBetween-subjectResidualSource
Buelga 2005
Haematological malignancy, n=215
1-compartment CL (L/h) = 1.08 x CLcr (L/h); V (L) = 0.98 x TBW omega 28.16% (CL), 37.15% (V), exponential sigma 3.52 mg/L, additive Buelga DS et al. Antimicrob Agents Chemother 2005;49(12):4934-41
verified: verbatim
Goti 2018
Hospitalised adults incl. haemodialysis, n=1,812
2-compartment CL = 4.5 x (CrCl/120)^0.8 x 0.7^DIAL; Vc = 58.4 x (WT/70) x 0.5^DIAL; Vp = 38.4; Q = 6.5 BSV %CV 39.8 / 81.6 / 57.1 (CL / Vc / Vp) 22.7% proportional + 3.4 mg/L additive Goti V et al. Ther Drug Monit 2018;40(2):212-21 (+ erratum 2019;41(4):549)
verified: 16 of 16 parameters
Goti 2018 — HD
The dialysis arm of the same model
2-compartment As above with DIAL = 1: CL x 0.7 and Vc x 0.5 as Goti as Goti Goti V et al. Ther Drug Monit 2018;40(2):212-21
verified: as Goti
Hughes 2024
Class 3 obesity ONLY — BMI ≥ 40 (median 46.3, range 40–70.3)
2-compartment, FFM-scaled CL = 5.09 x (CrCl_FFM/100)^0.887; Vc = 64.9 x (FFM/70); Vp = 66.4 x (FFM/70); Q = 6.36 BSV %CV 24.9 / 17.8 / 80.3 15.6% + 1.2 mg/L Hughes M-SA et al. Ther Drug Monit 2024;46(5):575-83, Table 2 (nlmixr2)
verified: Table 2 exact; one structural defect corrected

Deterministic models

ModelClearanceVolumeProvenance
VancoPK CL (mL/min) = 0.75 x CrCl + 4 Vd (L) = 0.29 x age + 0.33 x TBW + 11 Vd: Fewel N. J Clin Pharm Ther 2021;46:1426-32 (verified verbatim). CL: vancopk.com in-house regression, updated Nov 2023 — site documentation, not peer-reviewed.
Matzke 1984 CL (mL/min) = 0.689 x CrCl + 3.66 0.72 or 0.89 L/kg by CrCl band, or 0.875 L/kg pooled Matzke GR et al. Antimicrob Agents Chemother 1984;25(4):433-7. The CL equation is verbatim (r = 0.8807). The Vd split on CrCl is NOT a published covariate — the paper states there was no significant relationship between Vd and CLcr — so a pooled option is offered.
Buelga 2005 CL (L/h) = 1.08 x CLcr (L/h) 0.98 L/kg TBW Same model the AUC module uses as its Bayesian prior — the two modules agree exactly.
Bauer per-kg clearance x weight 0.70 L/kg TBW Bauer LA. Pharmacotherapy: A Pathophysiologic Approach, 11e, ch. e5. Textbook method; no standalone source paper.

Choosing between them

The tool recommends a model from the patient, but the choice is yours. Two constraints are worth knowing because they are easy to get wrong:

  • Hughes is a class-3 model. It enrolled only patients with a BMI of at least 40 kg/m² and should not be used below that. There is no vancomycin population model validated specifically for BMI 30–39.9; the tool routes that band to Goti — the largest development dataset, with a weight covariate on central volume — and says plainly that nothing is validated there. Obtain levels early and let the Bayesian fit carry the weight.
  • The Hughes creatinine clearance is deliberately lower, by roughly 20–25%. Hughes fitted its clearance against a Cockcroft-Gault computed on fat-free mass, not total or adjusted weight — the paper found that "using FFM as an input to the Cockcroft-Gault equation improved the fit significantly compared with using TBW". It is a model input, not an estimate of the patient's renal function, and feeding the model a conventional creatinine clearance would over-predict clearance and over-dose.
  • Goti with a single trough is weaker than it looks. Three parameters from one or two troughs is under-determined; a second trough adds little. With one level a one-compartment model is often the more reliable choice.

How much a level is worth

Simulated against the verified Buelga prior, 2,000 patients per level count. These are measured, not asserted, and are quoted at the ~80th percentile:

LevelsMedian error80th percentile90th percentileWithin ±15%
0 — population only18.3%35.4%45.9%42%
110.3%20.9%28.3%66%
28.8%18.2%25.4%73%
3 or more8.1%17.1%23.2%76%

The first level buys the most. The tool previously claimed ~±15% at one level; only 66% of simulated patients met that, so the disclosure was re-derived from simulation and now states the percentile it means.

The safety bounds, and where they come from

A dose recommendation is filtered before it is offered. The bounds are tiered by how much clinical judgement each requires.

TierBoundValueSource
Hard reject
dose-domain; cannot be wrong for a clinical reason
Single dose≤ 2000 mgconventional adult per-dose ceiling
Total daily dose≤ 4500 mgadult empiric maintenance ceiling
AUC24 absolute≤ 700 mg·h/LAKI risk rises above ~650 (Rybak 2020); Zasowski 2018
Acceptance bandAUC24400–600 mg·h/LRybak 2020 Rec 1 (A-II), assuming MIC 1 mg/L
Flags
attached to the answer, never used to hide it
Trough warning≥ 15 mg/LAKI risk begins to rise (Rybak 2020)
Trough high≥ 20 mg/Lupper end of that band; trough ≥18.2 → 3–4× risk
Sub-inhibitorytrough < MICpart of each interval below the MIC

Trough is deliberately not a filter. Because the dose is solved from the target exposure, every candidate already sits near the target AUC — so a trough window would not be guarding exposure, it would be silently choosing the dosing interval on rounding arithmetic. The 2020 guideline withdrew trough as a target for the same underlying reason: many different profiles share one trough. When no candidate is admissible the tool refuses and says which bound failed rather than quietly returning a rejected regimen.

What it does not do

  • No paediatrics or neonates. Adult models only.
  • No CRRT, SLED or hybrid therapies. Intermittent haemodialysis is supported through the Goti dialysis covariate, which averages dialysis over the course; logged sessions label the levels but are not modelled as timed clearance. Continuous modalities are not modelled.
  • No continuous infusion. Intermittent dosing only.
  • No intraperitoneal dosing, and no AUC for peritoneal dialysis. The PD mode doses IV vancomycin by level; IP regimens are not sized here.
  • Two-compartment fitting from troughs alone is under-determined. Three parameters from one or two troughs carries wider uncertainty than the one-compartment path; a second trough adds little. This is measured and documented, not hidden.
  • It is advisory. Nothing here is a prescription, and no number replaces the judgement of the person signing for the dose.

The engine, its tests and the full audit record — including the defects found and what they cost — live with the source. The calculator runs entirely in your browser; no patient data is transmitted anywhere.