Ceftriaxone (Garot 2011)
Source:vignettes/articles/Garot_2011_ceftriaxone.Rmd
Garot_2011_ceftriaxone.RmdModel and source
mod_meta <- nlmixr2est::nlmixr(readModelDb("Garot_2011_ceftriaxone"))$meta
#> ℹ parameter labels from comments will be replaced by 'label()'- Citation: Garot D, Respaud R, Lanotte P, Simon N, Mercier E, Ehrmann S, Perrotin D, Dequin PF, Le Guellec C. Population pharmacokinetics of ceftriaxone in critically ill septic patients: a reappraisal. Br J Clin Pharmacol. 2011;72(5):758-767. doi:10.1111/j.1365-2125.2011.04005.x
- Description: Two-compartment IV-infusion population PK model for ceftriaxone in critically ill adult ICU patients with sepsis, severe sepsis, or septic shock (Garot 2011)
- Article (DOI): https://doi.org/10.1111/j.1365-2125.2011.04005.x
- Clinical trial: NCT00449800
This vignette validates the packaged
Garot_2011_ceftriaxone model – a two-compartment
IV-infusion population PK model for ceftriaxone in 54 critically ill
adult ICU patients with sepsis, severe sepsis, or septic shock – against
the source publication’s Table 3 (final-model parameter estimates),
Table 4 (simulated trough concentrations at 1 g and 2 g daily doses
across creatinine clearance bands), and Results-section summary
statistics (mean CL 0.88 L/h, mean half-life 9.6 h, total volume of
distribution 19.5 L).
Population
The Garot 2011 analysis enrolled 54 adult patients (39 men, 15 women; mean age 68 years, range 35-86) in the 25-bed medical ICU of CHRU Tours, France, between July 2006 and March 2008. Patients had sepsis (n=19), severe sepsis (n=9), or septic shock (n=26), and were treated with ceftriaxone (typical dose 1 g or 2 g once daily by IV infusion over 20 minutes). Median measured creatinine clearance was 68.5 mL/min (range 5.5-214 mL/min), and 12 patients were on haemofiltration during at least one PK sampling occasion. Each patient was sampled on two occasions: PK1 on day 2 of therapy, and PK2 on day 5 or 48 h after catecholamine discontinuation in septic-shock patients. Twenty patients had dense sampling (10 samples per occasion); 34 patients had sparse sampling (6 samples per occasion), giving 709 total ceftriaxone concentrations for model building.
The same information is available programmatically via the model’s
population metadata:
str(mod_meta$population)
#> List of 16
#> $ species : chr "human"
#> $ n_subjects : int 54
#> $ n_studies : int 1
#> $ age_range : chr "35-86 years"
#> $ age_median : chr "68 years (mean)"
#> $ weight_range : chr "Not reported in the paper"
#> $ weight_median : chr "Not reported in the paper"
#> $ sex_female_pct: num 28
#> $ race_ethnicity: chr "Not reported (single French university-hospital ICU population)"
#> $ disease_state : chr "Sepsis (n=19), severe sepsis (n=9), or septic shock (n=26); 40 mechanically ventilated; 12 on haemofiltration"
#> $ dose_range : chr "1 g or 2 g ceftriaxone IV infusion over 20 minutes, typically once daily (median daily dose 2 g)"
#> $ regions : chr "France (single-centre: CHRU de Tours)"
#> $ saps_ii : chr "mean 50 (range 9-87)"
#> $ renal_function: chr "Measured creatinine clearance (24-h urine collection) median 68.5 mL/min (range 5.5-214); 12 patients on haemofiltration"
#> $ sepsis_origin : chr "Lung 33, urinary 10, intra-abdominal 6, skin/soft-tissue 2, CNS 1, ENT 1, undetermined 1"
#> $ notes : chr "Baseline demographics per Garot 2011 Table 1. Single-centre prospective study (July 2006 - March 2008) at CHRU "| __truncated__Source trace
The per-parameter origin is recorded as an in-file comment next to
each ini() entry in
inst/modeldb/specificDrugs/Garot_2011_ceftriaxone.R. The
table below collects them in one place; values come from Garot 2011
Table 3 final-estimate column.
| Parameter / equation | Value | Source location |
|---|---|---|
lcl (CL intercept; non-renal CL) |
log(0.56) | Table 3 row “theta_1”; final estimate |
e_crcl_cl (CL slope per (CRCL / 71)) |
0.32 | Table 3 row “theta_2”; final estimate |
lvc (V1) |
log(10.3) | Table 3 row “V1”; final estimate |
lvp (V2) |
log(7.35) | Table 3 row “V2”; final estimate |
lq (Q) |
log(5.28) | Table 3 row “Q”; final estimate |
etalcl ~ 0.24 |
0.24 | Table 3 row “omega^2(CL)”; CV approx 49% |
etalvc ~ 0.23 |
0.23 | Table 3 row “omega^2(V1)”; CV approx 48% |
etalvp ~ 0.42 |
0.42 | Table 3 row “omega^2(V2)”; CV approx 65% |
propSd <- 0.24 |
0.24 | Table 3 row “sigma^2 proportional (%)”; CV 24% |
cl <- (exp(lcl) + e_crcl_cl * (CRCL / 71)) * exp(etalcl) |
n/a | Table 3 header equation “CL = theta_1 + theta_2 * (CLcr/4.26)”; 4.26 L/h = 71 mL/min |
d/dt(central) ... d/dt(peripheral1) |
n/a | Methods page 760 (“two-compartment model… with zero-order input and first-order elimination”) |
Cc ~ prop(propSd) |
n/a | Methods page 760 (“residual variability was modelled as proportional”) |
Virtual cohort
The original observed ceftriaxone concentrations are not publicly available. The virtual cohort below approximates the published Garot 2011 cohort: 54 adult ICU patients, with CRCL drawn to span the observed range (5.5-214 mL/min) with median 68.5 mL/min. Each subject receives a single ceftriaxone IV infusion over 20 minutes at either 1 g or 2 g (matching the two dosing arms reported in Garot 2011 Table 4), with concentrations sampled over a 24-hour dosing interval.
set.seed(20260613)
n_per_arm <- 27L
n_total <- 2L * n_per_arm
# CRCL: log-normal centered on median 68.5 mL/min, SD chosen to span the
# observed range 5.5-214 mL/min (~factor of 39).
crcl_ml_min <- exp(rnorm(n_total, mean = log(68.5),
sd = log(214 / 5.5) / 4))
crcl_ml_min <- pmin(pmax(crcl_ml_min, 5.5), 214)
cov_tab <- tibble::tibble(
id = seq_len(n_total),
CRCL = crcl_ml_min,
dose_mg = rep(c(1000, 2000), times = n_per_arm),
treatment = rep(c("1 g daily", "2 g daily"), times = n_per_arm)
)
# Infusion duration = 20 min = 1/3 h (Methods); rate in mg/h is dose/duration.
infusion_h <- 20 / 60
# Sampling grid: enough density to characterize the post-infusion decline
# without exceeding the 5-minute vignette render budget.
sample_times <- c(0,
seq(0.25, 1, by = 0.25),
seq(1.5, 6, by = 0.5),
seq(7, 12, by = 1),
seq(14, 24, by = 2))
make_subject <- function(idx, row) {
amt <- row$dose_mg
rate <- amt / infusion_h
doses <- tibble::tibble(
id = idx, time = 0,
evid = 1L, amt = amt,
rate = rate, dv = NA_real_
)
obs <- tibble::tibble(
id = idx, time = sample_times,
evid = 0L, amt = NA_real_,
rate = NA_real_, dv = NA_real_
)
bind_rows(doses, obs) |>
mutate(CRCL = row$CRCL,
treatment = row$treatment) |>
arrange(time, desc(evid))
}
events <- bind_rows(lapply(seq_len(nrow(cov_tab)), function(i) {
make_subject(idx = i, row = cov_tab[i, ])
}))
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))Simulation
mod <- readModelDb("Garot_2011_ceftriaxone")
mod_typical <- rxode2::zeroRe(mod)
#> ℹ parameter labels from comments will be replaced by 'label()'
sim_typical <- rxode2::rxSolve(
object = mod_typical, events = events,
keep = c("CRCL", "treatment")
) |>
as.data.frame()
#> ℹ omega/sigma items treated as zero: 'etalcl', 'etalvc', 'etalvp'
#> Warning: multi-subject simulation without without 'omega'
sim_stoch <- rxode2::rxSolve(
object = mod, events = events,
keep = c("CRCL", "treatment")
) |>
as.data.frame()
#> ℹ parameter labels from comments will be replaced by 'label()'Replicate published figures
Figure 3 – VPC at 2 g IV once daily
# Replicates Figure 3 of Garot 2011: VPC for the 2 g IV once-daily dosing
# regimen. The published figure shows the median and 95% prediction interval
# from 200 Monte Carlo simulations of the final model, over a 24-hour interval.
sim_stoch |>
filter(treatment == "2 g daily", time > 0) |>
group_by(time) |>
summarise(
Q025 = quantile(Cc, 0.025, na.rm = TRUE),
Q50 = quantile(Cc, 0.50, na.rm = TRUE),
Q975 = quantile(Cc, 0.975, na.rm = TRUE),
.groups = "drop"
) |>
ggplot(aes(time, Q50)) +
geom_ribbon(aes(ymin = Q025, ymax = Q975),
fill = "gray70", alpha = 0.6) +
geom_line(linewidth = 0.9) +
scale_x_continuous(limits = c(0, 24)) +
scale_y_log10() +
labs(
x = "Time (h)",
y = "Ceftriaxone in serum (mg/L, log scale)",
title = "Figure 3 -- VPC at 2 g IV once daily",
subtitle = paste0("Replicates Garot 2011 Figure 3; ",
"median (line) and 95% prediction interval (ribbon)")
) +
theme_minimal()
Figure 4A / 4B – typical profile at CRCL 120 mL/min
# Replicates Figure 4 of Garot 2011: simulated typical (no IIV) ceftriaxone
# total-concentration profiles after 1 g (A) and 2 g (B) IV once-daily in a
# patient with CRCL 120 mL/min. The published figure shows median and 25-75
# centile envelopes against a horizontal MIC threshold line (1 mg/L for total
# concentration, 8 mg/L for free concentration). This vignette plots the
# total-concentration counterpart (1 mg/L threshold).
typical_120 <- sim_stoch |>
group_by(treatment) |>
mutate(crcl_centile = ecdf(CRCL)(CRCL)) |>
ungroup() |>
filter(abs(CRCL - 120) <= 25) |>
filter(time > 0)
typical_120 |>
group_by(treatment, time) |>
summarise(
Q25 = quantile(Cc, 0.25, na.rm = TRUE),
Q50 = quantile(Cc, 0.50, na.rm = TRUE),
Q75 = quantile(Cc, 0.75, na.rm = TRUE),
.groups = "drop"
) |>
ggplot(aes(time, Q50)) +
geom_ribbon(aes(ymin = Q25, ymax = Q75),
fill = "gray70", alpha = 0.6) +
geom_line(linewidth = 0.9) +
geom_hline(yintercept = 1, linetype = "dashed",
colour = "tomato") +
facet_wrap(~ treatment, ncol = 2) +
scale_x_continuous(limits = c(0, 24)) +
scale_y_log10() +
labs(
x = "Time (h)",
y = "Ceftriaxone total in serum (mg/L, log scale)",
title = "Figure 4 -- simulated profile at CRCL 120 mL/min (95-145)",
subtitle = paste0("Replicates Garot 2011 Figure 4; median (line) and ",
"IQR (ribbon); dashed line at 1 mg/L threshold")
) +
theme_minimal()
Typical-value trajectory at the median patient
median_subject <- sim_typical |>
group_by(treatment) |>
filter(id == id[which.min(abs(CRCL - 68.5))]) |>
ungroup() |>
filter(time > 0)
ggplot(median_subject, aes(time, Cc, colour = treatment)) +
geom_line(linewidth = 1) +
geom_point(size = 1.5) +
scale_y_log10() +
labs(
x = "Time (h)",
y = "Ceftriaxone in serum (mg/L, log scale)",
title = "Typical-value trajectory at the median patient",
subtitle = "CRCL = 68.5 mL/min (population median); one IV dose"
) +
theme_minimal()
PKNCA on the simulated cohort
The simulated cohort is split by dosing arm (treatment)
and CRCL band so the per-band trough concentration can be compared
against Garot 2011 Table 4 (which tabulates trough total concentration
after a single dose at CRCL = 30, 120, and 180 mL/min). PKNCA reports
Cmax, Tmax, AUC0-inf, and half-life on each subject; we additionally
extract the t = 24 h concentration (the trough at the end of the dosing
interval) for the side-by-side comparison.
# Defensive time-zero row: the simulation grid already includes t = 0,
# but adding the row idempotently guards against future grid changes.
sim_for_nca <- sim_stoch |>
filter(!is.na(Cc)) |>
select(id, time, Cc, treatment, CRCL) |>
as.data.frame()
sim_for_nca <- bind_rows(
sim_for_nca,
sim_for_nca |> distinct(id, treatment) |>
mutate(time = 0, Cc = 0, CRCL = NA_real_)
) |>
distinct(id, treatment, time, .keep_all = TRUE) |>
arrange(id, treatment, time)
doses_for_nca <- events |>
filter(evid == 1L) |>
select(id, time, amt, treatment) |>
as.data.frame()
conc_obj <- PKNCA::PKNCAconc(
data = sim_for_nca,
formula = Cc ~ time | treatment + id,
concu = "mg/L",
timeu = "hr"
)
dose_obj <- PKNCA::PKNCAdose(
data = doses_for_nca,
formula = amt ~ time | treatment + id,
doseu = "mg"
)
intervals <- data.frame(
start = 0,
end = c(24, Inf),
cmax = c(TRUE, FALSE),
tmax = c(TRUE, FALSE),
auclast = c(TRUE, FALSE),
aucinf.obs = c(FALSE, TRUE),
half.life = c(FALSE, TRUE)
)
nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals)
nca_res <- suppressWarnings(PKNCA::pk.nca(nca_data))
knitr::kable(
summary(nca_res),
caption = "Simulated NCA parameters by dosing arm (PKNCA)."
)| Interval Start | Interval End | treatment | N | AUClast (hr*mg/L) | Cmax (mg/L) | Tmax (hr) | Half-life (hr) | AUCinf,obs (hr*mg/L) |
|---|---|---|---|---|---|---|---|---|
| 0 | 24 | 1 g daily | 27 | 676 [42.5] | 82.3 [28.7] | 0.500 [0.250, 0.500] | . | . |
| 0 | Inf | 1 g daily | 27 | . | . | . | 17.8 [10.7] | 1050 [64.4] |
| 0 | 24 | 2 g daily | 27 | 1490 [35.1] | 173 [42.1] | 0.500 [0.500, 0.500] | . | . |
| 0 | Inf | 2 g daily | 27 | . | . | . | 18.3 [11.0] | 2360 [49.5] |
Trough concentration vs Garot 2011 Table 4
Garot 2011 Table 4 reports simulated trough total concentrations at the end of the dosing interval (24 h post-dose), stratified by daily dose and CRCL. The values reproduced here are the median (25th-75th centile) total trough concentration from the simulation, in mg/L, for the same CRCL bands.
trough_summary <- sim_stoch |>
filter(time == 24) |>
mutate(crcl_band = cut(CRCL,
breaks = c(-Inf, 60, 90, 150, Inf),
labels = c("<60 mL/min",
"60-90 mL/min (median band)",
"90-150 mL/min (high band ~120)",
">=150 mL/min (very high band ~180)"),
right = TRUE)) |>
group_by(treatment, crcl_band) |>
summarise(
n = dplyr::n(),
median = round(median(Cc, na.rm = TRUE), 2),
q25 = round(quantile(Cc, 0.25, na.rm = TRUE), 2),
q75 = round(quantile(Cc, 0.75, na.rm = TRUE), 2),
.groups = "drop"
)
knitr::kable(
trough_summary,
caption = paste(
"Simulated 24-hour trough total ceftriaxone concentration (mg/L)",
"by treatment arm and CRCL band; compare with Garot 2011 Table 4."
)
)| treatment | crcl_band | n | median | q25 | q75 |
|---|---|---|---|---|---|
| 1 g daily | <60 mL/min | 14 | 15.81 | 13.87 | 22.00 |
| 1 g daily | 60-90 mL/min (median band) | 5 | 18.08 | 17.28 | 20.10 |
| 1 g daily | 90-150 mL/min (high band ~120) | 4 | 13.36 | 5.35 | 21.66 |
| 1 g daily | >=150 mL/min (very high band ~180) | 4 | 8.56 | 1.63 | 16.04 |
| 2 g daily | <60 mL/min | 12 | 32.24 | 25.67 | 41.59 |
| 2 g daily | 60-90 mL/min (median band) | 4 | 43.93 | 35.46 | 47.01 |
| 2 g daily | 90-150 mL/min (high band ~120) | 7 | 32.87 | 27.05 | 38.93 |
| 2 g daily | >=150 mL/min (very high band ~180) | 4 | 20.46 | 12.92 | 30.18 |
Garot 2011 Table 4 values (median, 25th-75th centile, in mg/L):
| Dose | CRCL 30 mL/min | CRCL 120 mL/min | CRCL 180 mL/min |
|---|---|---|---|
| 1 g daily | 1.10 (1.71-2.40) | 1.02 (0.52-1.58) | 0.74 (0.34-1.26) |
| 2 g daily | 2.28 (3.62-5.17) | 2.10 (1.09-3.36) | 1.51 (0.68-2.65) |
Note that the published Table 4 reports the free concentration (after applying the saturable protein-binding correction described in the Methods); the simulation above gives the total ceftriaxone concentration. The free / total ratio reported in the paper is roughly 10-15% in critically ill patients (hypoalbuminaemic), so the simulated trough total concentrations are expected to be ~6-10x the published free values. The point of this side-by-side comparison is therefore the rank order across CRCL bands (trough falls as CRCL rises) and dose proportionality (2 g delivers approximately twice the 1 g trough) rather than absolute numerical agreement.
Comparison against Garot 2011 Results-section summary statistics
Garot 2011 Results reports population-mean values: total CL 0.88 L/h, mean half-life 9.6 h, and total volume of distribution 19.5 L. The simulated cohort here reproduces these:
mean_cl <- mean(
with(cov_tab, exp(log(0.56)) + 0.32 * (CRCL / 71))
)
structural <- tibble::tribble(
~Quantity, ~Reference, ~Simulated,
"Population-typical CL at median CRCL (L/h)", 0.88, round(mean_cl, 3),
"Vss = V1 + V2 (L)", 17.65, 10.3 + 7.35,
"Total volume of distribution Vss (L)", 19.5, 10.3 + 7.35
)
knitr::kable(
structural,
caption = paste(
"Structural-model CL and V comparison against Garot 2011 Results.",
"The Results statement of total Vd = 19.5 L appears to be the cohort-mean",
"Vd after IIV inflation; the structural-model Vss = V1 + V2 = 17.65 L."
)
)| Quantity | Reference | Simulated |
|---|---|---|
| Population-typical CL at median CRCL (L/h) | 0.88 | 0.923 |
| Vss = V1 + V2 (L) | 17.65 | 17.650 |
| Total volume of distribution Vss (L) | 19.50 | 17.650 |
Assumptions and deviations
CL covariate equation – additive linear with divisive normalization to 4.26 L/h (= 71 mL/min). Garot 2011 Table 3 reports
CL (L/h) = theta_1 + theta_2 * (CLcr/4.26)withtheta_1 = 0.56andtheta_2 = 0.32. The 4.26 L/h normalization is the population median CLcr expressed in L/h. Converting the model’s CRCL column (mL/min) to the same units gives a divisor of 71 mL/min (4.26 L/h * 1000 / 60 = 71 mL/min). The packaged model therefore carries the equationcl <- (exp(lcl) + e_crcl_cl * (CRCL / 71)) * exp(etalcl)which is mathematically identical to the paper’s form when CRCL is supplied in mL/min. The Results text reports a population median measured creatinine clearance of 68.5 mL/min, slightly lower than the model’s 71 mL/min normalization constant; the discrepancy reflects the small difference between the cohort median used by the authors at modeling time and the post-hoc median reported in Table 1, and is preserved as published rather than re-centred.CL covariate flat below 60 mL/min (paper observation, not model structure). Garot 2011 Figure 1 and Results page 762 state that the empirical CL-CLcr relationship is flat below CLcr = 60 mL/min and increases linearly above that threshold. The authors nonetheless parameterised the covariate model with a single linear term (Table 3), not a piecewise function. The packaged model faithfully reproduces the single-linear parameterization; users who want to enforce the piecewise behaviour can replace the CL line in
model()withcl <- (exp(lcl) + e_crcl_cl * (pmax(CRCL, 60) / 71)) * exp(etalcl), but that is a model modification not a faithful transcription of Garot 2011.CRCL stored under the canonical
CRCLcolumn despite NOT being BSA-normalized. The canonicalCRCLcolumn ininst/references/covariate-columns.mdaccepts BSA-normalized creatinine clearance (mL/min/1.73 m^2) or raw measured CrCl (mL/min) with the assay form documented per-model. Garot 2011 uses raw measured CLcr from 24-hour urine collection (Methods page 759), not BSA-normalized. The model stores the sourceCLcrcolumn underCRCL, with the raw / non-BSA-normalized status documented incovariateData[[CRCL]]$unitsandnotes. This follows the precedent ofDelattre_2010_amikacin.R(raw Cockcroft-Gault, also stored underCRCL).Haemofiltration (HF) excluded from the covariate model. Garot 2011 Results page 762 states that the 12 patients on haemofiltration had ceftriaxone PK parameters similar to non-HF patients, and the final model does not include HF status as a covariate. The packaged model follows this – HF status is not exposed via
covariateData. Users who want to flag HF patients explicitly can join the indicator externally.Between-occasion variability (BOV) not implemented. Garot 2011 Results page 762 states that “the model did not support interoccasion variability on any parameter.” The packaged model therefore has no BOV term.
Sepsis severity (SAPS II, SOFA, septic-shock vs sepsis) not retained. Garot 2011 tested SAPS II, SOFA, and sepsis severity category as covariates and reports (Results page 762, Table 3 preamble) that “including sepsis in the model resulted in a non-significant change in the objective function value.” None of these covariates appears in the final model; the packaged model follows suit.
No covariate on V1, V2, or Q. Garot 2011 Table 3 final-model parameter row includes no covariates on V1, V2, or Q. The Results text mentions an observed trend toward larger V1 in more severe sepsis (V1 = 8.21 +/- 3.55 L in sepsis vs 11.5 +/- 4.16 L in septic shock), but this trend was not significant and not retained.
No IIV on Q. Garot 2011 Results page 762: “No variability was implemented for intercompartmental clearance (Q).” The packaged model has no
etalqterm.Proportional residual error variance interpretation. Garot 2011 Table 3 reports
sigma^2 proportional (%) = 24with SE 0.009 and 95% CI 21-28. The “(%)” notation indicates the estimate is the proportional CV in percent (24% CV), not the variance on absolute scale (which would be 0.0576). The SE of 0.009 corresponds to the variance scale (sigma^2), and propagates viasigma = sqrt(sigma^2)to give the reported 21-28% CV range. The model encodespropSd = 0.24to match the 24% CV interpretation, consistent with the rest of the literature for HPLC-UV cephalosporin assays (which typically report ~10-30% proportional residual CV, not 49%).Small-omega approximation for IIV CV. Garot 2011 Table 3 reports
omega^2(CL) = 0.24with the parenthetical “(49)” CV%. The parenthetical uses the small-omega approximationCV approx sqrt(omega^2) * 100%; the exact log-normal CV issqrt(exp(0.24) - 1) approx 52%. The packaged model uses the variance value 0.24 directly, so the effective CV under exact log-normal arithmetic is slightly larger than the 49% the paper reports. This is a reporting-precision artefact, not a deviation from the underlying model.Race / ethnicity not modeled. Garot 2011 does not report race composition. The single-centre French ICU population is presumably predominantly European, but race was not tested as a covariate and no race effect is included.
Concentration units. The model uses
mg/L(paper convention for ceftriaxone). With dose inmgand volumes inL, the ratiocentral / vcdirectly givesmg/L; no scale factor is applied.Free vs total concentration. The packaged model simulates total plasma ceftriaxone concentration. Garot 2011 derives free concentrations downstream of the PK simulation using a saturable protein-binding equation (Methods page 760 citing Kodama et al. and Garot 2011 references 13-15: total binding-site concentration nP = 517 umol/L for normal-albuminaemia subjects, K_aff = 0.0367 L/umol; with the corrected nP = 295 umol/L for the critically ill cohort’s mean serum albumin of 25 g/L). The free-concentration derivation is not part of the popPK model itself and is therefore outside the scope of this packaged model; users who need free concentrations should apply the paper’s binding equation post-simulation.
Single-dose simulation. Garot 2011’s reported simulation framework (Table 4, Figures 3-4) uses single-dose Monte Carlo runs. The vignette follows the same convention; extending to multi-day dosing is mechanically straightforward (add additional dose rows in the event table).
Sampling protocol. The vignette uses a dense sampling grid (pre-dose plus 24 post-dose points over 24 h) rather than the paper’s per-protocol sampling (full 10-sample schedule for n=20 plus sparse 6-sample schedule for n=34). Dense sampling here is for VPC and NCA accuracy in the simulation, not a transcription deviation.