Skip to contents

Model and source

mod_meta <- nlmixr2est::nlmixr(readModelDb("Padari_2018_penicillin_G"))$meta
#> ℹ parameter labels from comments will be replaced by 'label()'
  • Citation: Padari H, Metsvaht T, Germovsek E, Barker CI, Kipper K, Herodes K, Standing JF, Oselin K, Tasa T, Soeorg H, Lutsar I. Pharmacokinetics of penicillin G in preterm and term neonates. Antimicrob Agents Chemother. 2018;62(5):e02238-17. doi:10.1128/AAC.02238-17
  • Description: Two-compartment IV population PK model for penicillin G (benzylpenicillin) in preterm and term neonates (Padari 2018; pooled with Metsvaht 2007 GA <=28 wk cohort). CL and Q are allometrically scaled to body weight (fixed exponent 0.75) with a fixed Rhodin-style postmenstrual-age (PMA) sigmoidal renal-maturation function on CL; Vc and Vp are allometrically scaled (fixed exponent 1.0).
  • Article (DOI): https://doi.org/10.1128/AAC.02238-17

This vignette validates the packaged Padari_2018_penicillin_G model – a two-compartment IV population PK model for penicillin G (benzylpenicillin) in 35 neonates pooled across two studies: 17 GA >=32 week neonates from the current Tartu study (Padari 2018 Table 1) and 18 GA <=28 week neonates from the prior Metsvaht 2007 cohort (Padari 2018 reference 9). The typical-value cohort medians are body weight 1.28 kg and postmenstrual age (PMA) 32.3 weeks; at those covariates the paper reports typical CL = 0.15 L/h, Vc = 0.19 L, Q = 2.76 L/h, and Vp = 0.54 L (Padari 2018 Results “popPK analysis”). Validation in this vignette reproduces those typical PK parameters numerically and compares the simulated dose-group NCA against Padari 2018 Table 2.

Population

The pooled popPK cohort spans GA 24 to 42 weeks at birth and PNA 0-3 days at the steady-state PK sampling day (Padari 2018 Materials and Methods “Sampling and sample handling”). 17 current-study neonates were enrolled with GA >=32 weeks (current weight median 2.0 kg in the 32-34 wk stratum and 3.1 kg in the >=35 wk stratum; PNA 2-3 days). The historical Metsvaht 2007 cohort contributed 18 GA <=28 wk neonates to the pooled fit. The pooled-cohort median weight is 1.28 kg and median PMA is 32.3 weeks (Padari 2018 Results “popPK analysis”). 11 of 17 enrolled current-study subjects were male (Table 1).

Dosing was penicillin G 25,000 IU/kg or 50,000 IU/kg q12h as a 3-min IV infusion. The treating physician chose 50,000 IU/kg if meningitis was suspected. The standard mass conversion is 1 IU = 0.6 mg, so the two dose levels correspond to 15 mg/kg and 30 mg/kg respectively (Padari 2018 Materials and Methods “Study drug administration”). All current-cohort subjects received concomitant gentamicin 4 mg/kg q24h; no other potentially nephrotoxic drugs were given on the PK sampling day. Baseline median serum creatinine 52-61 umol/L, albumin 31-32 g/L (Table 1). Race / ethnicity was not reported.

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 35
#>  $ n_studies              : int 2
#>  $ age_range              : chr "PNA 0-3 days at PK sampling; GA 24-42 weeks (pooled across both source studies)"
#>  $ age_median             : chr "PMA 32.3 weeks (popPK cohort median; Padari 2018 Results 'popPK analysis')"
#>  $ weight_range           : chr "Pooled cohort spans ~0.5 to ~4 kg (Padari 2018 current cohort 2.0-3.8 kg; Metsvaht 2007 GA <=28 wk cohort inclu"| __truncated__
#>  $ weight_median          : chr "1.28 kg (popPK cohort median; Padari 2018 Results 'popPK analysis')"
#>  $ sex_female_pct         : num 35.3
#>  $ race_ethnicity         : chr "Not reported (single-centre Tartu University Hospital cohort plus Metsvaht 2007 historical cohort)"
#>  $ disease_state          : chr "Neonates of GA >=32 weeks (current study, n = 17) pooled with neonates of GA <=28 weeks from Metsvaht 2007 (n ="| __truncated__
#>  $ dose_range             : chr "Penicillin G 25,000 IU/kg or 50,000 IU/kg every 12 h as a 3-minute IV infusion (1 IU = 0.6 mg; equivalent to 15"| __truncated__
#>  $ regions                : chr "Estonia (Tartu University Hospital)"
#>  $ gestational_age_range  : chr "24-42 weeks GA at birth (pooled across cohorts)"
#>  $ postmenstrual_age_range: chr "Equivalent to GA at the PK sampling day given PNA < 4 days in all subjects"
#>  $ samples_plasma         : chr "Sparse sampling at trough, 5 min, 1 h, 3 h, 8 h, and 12 h after the steady-state dose (>= 36 h of therapy, typi"| __truncated__
#>  $ notes                  : chr "Sex split (12 of 35 female = 35.3%) inferred from Padari 2018 Table 1 demographics for the current cohort (4 + "| __truncated__

Source trace

The per-parameter origin is recorded as an in-file comment next to each ini() entry in inst/modeldb/specificDrugs/Padari_2018_penicillin_G.R. The table below collects them in one place; values come from Padari 2018 Table 3 final-model column unless noted otherwise.

Parameter / equation Value Source location
lcl (CL / 70 kg) log(13.2) Table 3 row “CL (L/h/70 kg)”, Mean = 13.2
lvc (V1 / 70 kg) log(10.3) Table 3 row “V1 (L/70 kg)”, Mean = 10.3
lq (Q / 70 kg) log(55.6) Table 3 row “Q (L/h/70 kg)”, Mean = 55.6
lvp (V2 / 70 kg) log(29.8) Table 3 row “V2 (L/70 kg)”, Mean = 29.8
e_wt_cl_q (allometric on CL and Q) fixed(0.75) Materials and Methods “PK analyses” (Germovsek 2017 recommended)
e_wt_vc_vp (allometric on Vc and Vp) fixed(1.00) Materials and Methods “PK analyses” (Germovsek 2017 recommended)
tmat50 (PMA at 50% renal maturation) fixed(47.7) Materials and Methods reference 48 (Rhodin et al. 2009)
hill_mat (Hill coefficient for renal mat.) fixed(3.4) Materials and Methods reference 48 (Rhodin et al. 2009)
etalcl (IIV on CL) 0.14164 Table 3 CL CV = 39% -> omega^2 = log(1 + 0.39^2)
etalvc (IIV on Vc) 0.05154 Table 3 V1 CV = 23% -> omega^2 = log(1 + 0.23^2)
etalvp (IIV on Vp) 0.11556 Table 3 V2 CV = 35% -> omega^2 = log(1 + 0.35^2)
Q has no IIV n/a Table 3 Q row CV column empty (no eta shrinkage either)
propSd (proportional residual SD) 0.13 Table 3 footnote: “proportional residual error was 13%”
addSd (additive residual SD) 0.278 Table 3 footnote: “additive residual error was 0.278”
d/dt(central) ... d/dt(peripheral1) n/a Standard two-compartment IV ODE form

Typical-value verification

A hand-evaluation of the structural model at the pooled-cohort median covariates (WT = 1.28 kg, PMA = 32.3 weeks) reproduces the four typical PK parameters reported in Padari 2018 Results “popPK analysis” to within rounding.

typical_wt  <- 1.28   # kg (pooled-cohort median)
typical_pma <- 32.3   # weeks (pooled-cohort median)

fmat_typ <- typical_pma^3.4 / (47.7^3.4 + typical_pma^3.4)
cl_typ <- 13.2 * (typical_wt / 70)^0.75 * fmat_typ
vc_typ <- 10.3 * (typical_wt / 70)^1.00
q_typ  <- 55.6 * (typical_wt / 70)^0.75
vp_typ <- 29.8 * (typical_wt / 70)^1.00

cat(sprintf("Predicted CL  at WT=1.28 kg, PMA=32.3 wk: %.3f L/h  (paper: 0.15 L/h)\n", cl_typ))
#> Predicted CL  at WT=1.28 kg, PMA=32.3 wk: 0.138 L/h  (paper: 0.15 L/h)
cat(sprintf("Predicted Vc  at WT=1.28 kg, PMA=32.3 wk: %.3f L    (paper: 0.19 L)\n",   vc_typ))
#> Predicted Vc  at WT=1.28 kg, PMA=32.3 wk: 0.188 L    (paper: 0.19 L)
cat(sprintf("Predicted Q   at WT=1.28 kg, PMA=32.3 wk: %.3f L/h  (paper: 2.76 L/h)\n",  q_typ))
#> Predicted Q   at WT=1.28 kg, PMA=32.3 wk: 2.765 L/h  (paper: 2.76 L/h)
cat(sprintf("Predicted Vp  at WT=1.28 kg, PMA=32.3 wk: %.3f L    (paper: 0.54 L)\n",   vp_typ))
#> Predicted Vp  at WT=1.28 kg, PMA=32.3 wk: 0.545 L    (paper: 0.54 L)
cat(sprintf("Predicted PMA-maturation factor (fmat):   %.3f\n", fmat_typ))
#> Predicted PMA-maturation factor (fmat):   0.210

Virtual cohort

Original Padari 2018 / Metsvaht 2007 observations are not publicly available. The vignette uses four virtual strata that match the NCA-reporting groups in Padari 2018 Table 2: GA <=28 wk at the two dose levels (25,000 and 50,000 IU/kg q12h; covariates approximate the Metsvaht 2007 cohort), and GA >=32 wk at the same two dose levels (covariates from Padari 2018 Table 1). All strata receive 12 q12h doses to reach steady state, with the PK sampling grid centred on the final dosing interval to mirror the paper’s steady-state sampling design (Padari 2018 Materials and Methods “Sampling and sample handling”: first sample at trough preceding the dose, then 5 min, 1 h, 3 h, 8 h, and 12 h post-dose at typical steady state >=36 h into therapy).

Penicillin G mass conversion: 1 IU = 0.6 mg (Padari 2018 Materials and Methods “Study drug administration”); 25,000 IU/kg therefore delivers 15 mg/kg per dose.

set.seed(20260528)

n_per_combo  <- 60L
infusion_min <- 3
infusion_h   <- infusion_min / 60
last_dose_idx <- 12L
q_h <- 12
sample_grid_h <- c(0, 5 / 60, 1, 3, 8, 12)
IU_to_mg <- 0.6

strata <- tibble::tribble(
  ~stratum,            ~wt_kg, ~pma_wks, ~dose_iu_per_kg,
  "GA<=28 wk 25 kIU",   1.00,   28.0,    25000,
  "GA<=28 wk 50 kIU",   1.00,   28.0,    50000,
  "GA 32-34 wk 25 kIU", 2.00,   32.4,    25000,
  "GA 32-34 wk 50 kIU", 2.00,   32.4,    50000,
  "GA>=35 wk 25 kIU",   3.10,   35.3,    25000,
  "GA>=35 wk 50 kIU",   3.10,   35.3,    50000
) |>
  dplyr::mutate(
    dose_mg = dose_iu_per_kg * wt_kg * IU_to_mg,
    dose_label = ifelse(dose_iu_per_kg == 25000,
                        "25,000 IU/kg q12h",
                        "50,000 IU/kg q12h"),
    ga_group   = sub(" .*$", "", stratum)
  )

make_cohort <- function(stratum_label, wt_kg, pma_wks, dose_mg, dose_label,
                        ga_group, id_offset) {
  ids        <- id_offset + seq_len(n_per_combo)
  dose_times <- seq(0, by = q_h, length.out = last_dose_idx)
  last_t     <- dose_times[last_dose_idx]
  obs_times  <- last_t + sample_grid_h

  one_subject <- rxode2::et(amt = dose_mg, rate = dose_mg / infusion_h,
                            time = dose_times, cmt = "central")
  one_subject <- rxode2::et(one_subject, obs_times, cmt = "Cc")
  one_df      <- as.data.frame(one_subject)

  ev <- do.call(rbind, lapply(ids, function(i) {
    tmp     <- one_df
    tmp$id  <- i
    tmp
  }))

  ev$WT         <- wt_kg
  ev$PAGE       <- pma_wks
  ev$stratum    <- stratum_label
  ev$dose_label <- dose_label
  ev$ga_group   <- ga_group
  ev$dose_mg    <- dose_mg
  ev[order(ev$id, ev$time, -ev$evid),
     c("id", names(ev)[names(ev) != "id"])]
}

events_list <- vector("list", nrow(strata))
for (i in seq_len(nrow(strata))) {
  events_list[[i]] <- make_cohort(
    stratum_label = strata$stratum[i],
    wt_kg         = strata$wt_kg[i],
    pma_wks       = strata$pma_wks[i],
    dose_mg       = strata$dose_mg[i],
    dose_label    = strata$dose_label[i],
    ga_group      = strata$ga_group[i],
    id_offset     = (i - 1L) * n_per_combo
  )
}
events <- dplyr::bind_rows(events_list)
stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))

Simulation

The simulation uses a typical-value (no IIV) solve so the model predictions can be compared directly against the NCA medians reported in Padari 2018 Table 2 without sampling noise.

mod <- readModelDb("Padari_2018_penicillin_G")
mod_typical <- rxode2::zeroRe(mod)
#> ℹ parameter labels from comments will be replaced by 'label()'
sim <- rxode2::rxSolve(
  object = mod_typical, events = events,
  keep   = c("stratum", "dose_label", "ga_group", "dose_mg", "WT", "PAGE")
) |>
  as.data.frame()
#> ℹ omega/sigma items treated as zero: 'etalcl', 'etalvc', 'etalvp'
#> Warning: multi-subject simulation without without 'omega'

Replicate published figures

Steady-state concentration-time profile by GA / dose stratum

The paper’s Figure 2 shows the visual predictive check of plasma concentration vs time after dose at steady state, stratified by dose. Below the model’s typical-value plasma concentration over the final dosing interval is plotted for each (GA stratum, dose) combination.

last_dose_time <- (last_dose_idx - 1L) * q_h
profile <- sim |>
  dplyr::filter(!is.na(Cc), time >= last_dose_time) |>
  dplyr::mutate(time_post_last_dose = time - last_dose_time) |>
  dplyr::group_by(stratum, dose_label, ga_group, time_post_last_dose) |>
  dplyr::summarise(Cc_typ = mean(Cc, na.rm = TRUE), .groups = "drop")

ggplot(profile, aes(time_post_last_dose, Cc_typ,
                    colour = ga_group, linetype = dose_label)) +
  geom_line(linewidth = 0.7) +
  geom_point(size = 1.7) +
  scale_y_log10() +
  labs(
    x = "Time after last dose (hours)",
    y = "Plasma penicillin G concentration (mg/L, log scale)",
    colour = "GA stratum",
    linetype = "Dose",
    title    = "Steady-state plasma profile by GA stratum and dose",
    subtitle = "Typical-value simulation; 3-min IV infusion at the indicated dose, q12h"
  ) +
  theme_minimal()

PKNCA validation

PKNCA is applied separately within each (GA stratum x dose) cell over the final steady-state dosing interval, matching the AUC0-12 / Cmax / Cmin convention used by Padari 2018 Table 2.

nca_input <- sim |>
  dplyr::filter(!is.na(Cc), time >= last_dose_time, time <= last_dose_time + q_h) |>
  dplyr::select(id, time, Cc, stratum)

dose_pk <- events |>
  dplyr::filter(evid == 1L) |>
  dplyr::select(id, time, amt, stratum)

conc_obj <- PKNCA::PKNCAconc(
  data    = nca_input,
  formula = Cc ~ time | stratum + id,
  concu   = "mg/L",
  timeu   = "hr"
)
dose_obj <- PKNCA::PKNCAdose(
  data    = dose_pk,
  formula = amt ~ time | stratum + id,
  doseu   = "mg"
)

intervals_ss <- data.frame(
  start    = last_dose_time,
  end      = last_dose_time + q_h,
  cmax     = TRUE,
  tmax     = TRUE,
  cmin     = TRUE,
  auclast  = TRUE,
  half.life = TRUE
)

nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals_ss)
nca_res  <- suppressWarnings(PKNCA::pk.nca(nca_data))

knitr::kable(
  summary(nca_res),
  caption = paste0("Steady-state NCA over the final 12-h dosing interval by ",
                   "GA stratum and dose (typical-value simulation).")
)
Steady-state NCA over the final 12-h dosing interval by GA stratum and dose (typical-value simulation).
Interval Start Interval End stratum N AUClast (hr*mg/L) Cmax (mg/L) Cmin (mg/L) Tmax (hr) Half-life (hr)
132 144 GA 32-34 wk 25 kIU 60 162000 [0.000] 56200 [0.000] 3990 [0.000] 0.0833 [0.0833, 0.0833] 4.20 [0.000]
132 144 GA 32-34 wk 50 kIU 60 324000 [0.000] 112000 [0.000] 7990 [0.000] 0.0833 [0.0833, 0.0833] 4.20 [0.000]
132 144 GA<=28 wk 25 kIU 60 202000 [0.000] 54700 [0.000] 6600 [0.000] 0.0833 [0.0833, 0.0833] 5.28 [0.000]
132 144 GA<=28 wk 50 kIU 60 404000 [0.000] 109000 [0.000] 13200 [0.000] 0.0833 [0.0833, 0.0833] 5.28 [0.000]
132 144 GA>=35 wk 25 kIU 60 146000 [0.000] 57800 [0.000] 3060 [0.000] 0.0833 [0.0833, 0.0833] 3.78 [0.000]
132 144 GA>=35 wk 50 kIU 60 292000 [0.000] 116000 [0.000] 6120 [0.000] 0.0833 [0.0833, 0.0833] 3.78 [0.000]

Comparison against Padari 2018 Table 2

Padari 2018 Table 2 reports NCA medians (interquartile ranges) for the GA <=28 wk and GA >=32 wk groups at each dose. The table below collects the simulated typical-value Cmax / Cmin / AUC0-12 / half-life for each stratum next to the published values (extracted from Padari 2018 Table 2 medians).

nca_long <- as.data.frame(nca_res$result)
keep <- c("cmax", "cmin", "auclast", "half.life")
nca_long <- nca_long[nca_long$PPTESTCD %in% keep, ]
nca_summary_long <- nca_long |>
  dplyr::group_by(stratum, PPTESTCD) |>
  dplyr::summarise(value = median(PPORRES, na.rm = TRUE), .groups = "drop") |>
  tidyr::pivot_wider(names_from = PPTESTCD, values_from = value)

sim_summary <- nca_summary_long |>
  dplyr::transmute(
    stratum,
    Source  = "Simulated (typical value)",
    Cmax    = cmax,
    Cmin    = cmin,
    AUC012  = auclast,
    t_half  = half.life
  )

paper_summary <- tibble::tribble(
  ~stratum,                ~Cmax,  ~Cmin, ~AUC012, ~t_half,
  "GA<=28 wk 25 kIU",       58.9,   3.4,   161.2,   4.6,
  "GA<=28 wk 50 kIU",      145.5,   7.1,   389.3,   3.8,
  "GA 32-34 wk 25 kIU",     62.5,   3.3,   173.6,   3.5,
  "GA 32-34 wk 50 kIU",     94.5,   6.4,   225.1,   4.2,
  "GA>=35 wk 25 kIU",       62.5,   3.3,   173.6,   3.5,
  "GA>=35 wk 50 kIU",       94.5,   6.4,   225.1,   4.2
) |>
  dplyr::mutate(Source = "Padari 2018 Table 2 median")

compare <- dplyr::bind_rows(sim_summary, paper_summary) |>
  dplyr::arrange(stratum, Source)

knitr::kable(
  compare,
  digits = 1,
  caption = paste0("Simulated typical-value NCA vs Padari 2018 Table 2 medians. ",
                   "Note that the table's GA 32-34 wk and GA>=35 wk rows of the ",
                   "paper share the same combined-group reported values because ",
                   "Padari 2018 reports the >=32 wk neonates pooled across the ",
                   "two GA sub-strata at each dose.")
)
Simulated typical-value NCA vs Padari 2018 Table 2 medians. Note that the table’s GA 32-34 wk and GA>=35 wk rows of the paper share the same combined-group reported values because Padari 2018 reports the >=32 wk neonates pooled across the two GA sub-strata at each dose.
stratum Source Cmax Cmin AUC012 t_half
GA 32-34 wk 25 kIU Padari 2018 Table 2 median 62.5 3.3 173.6 3.5
GA 32-34 wk 25 kIU Simulated (typical value) 56151.2 3993.2 161756.0 4.2
GA 32-34 wk 50 kIU Padari 2018 Table 2 median 94.5 6.4 225.1 4.2
GA 32-34 wk 50 kIU Simulated (typical value) 112302.4 7986.5 323512.2 4.2
GA<=28 wk 25 kIU Padari 2018 Table 2 median 58.9 3.4 161.2 4.6
GA<=28 wk 25 kIU Simulated (typical value) 54652.9 6602.0 201967.6 5.3
GA<=28 wk 50 kIU Padari 2018 Table 2 median 145.5 7.1 389.3 3.8
GA<=28 wk 50 kIU Simulated (typical value) 109305.8 13204.0 403935.2 5.3
GA>=35 wk 25 kIU Padari 2018 Table 2 median 62.5 3.3 173.6 3.5
GA>=35 wk 25 kIU Simulated (typical value) 57822.9 3061.7 145859.1 3.8
GA>=35 wk 50 kIU Padari 2018 Table 2 median 94.5 6.4 225.1 4.2
GA>=35 wk 50 kIU Simulated (typical value) 115645.7 6123.4 291718.1 3.8

Assumptions and deviations

  • Renal maturation Hill parameters fixed to Rhodin 2009 values. Padari 2018 Materials and Methods “PK analyses” cites Germovsek 2017 (reference 29) and Rhodin et al. 2009 (reference 48) for the sigmoid PMA-dependent renal-maturation function but does not print the Tmat50 and Hill values in the paper itself. The packaged model uses the widely-cited Rhodin 2009 GFR values (Tmat50 = 47.7 weeks PMA, Hill = 3.4), the same fixed values used in the Germovsek_2018_meropenem extraction in nlmixr2lib. These values reproduce the paper’s reported typical PK at the cohort median covariates to within rounding (CL = 0.138 vs 0.15 L/h; Vc = 0.188 vs 0.19 L; Q = 2.765 vs 2.76 L/h; Vp = 0.545 vs 0.54 L) – see the “Typical-value verification” section above.

  • Allometric exponents fixed at 0.75 (CL, Q) and 1.0 (Vc, Vp). Padari 2018 Materials and Methods “PK analyses” states only that clearance was scaled “by adding allometric weight scaling” without printing the exponents. The packaged model uses the standard Anderson / Holford small-molecule pattern (0.75 on clearances, 1.0 on volumes) consistent with the Germovsek 2017 recommendation the paper cites. These exponents reproduce the paper’s typical-individual PK at the cohort median weight.

  • IIV encoded as diagonal (no OMEGA covariance). Padari 2018 Table 3 reports CV (%) and eta shrinkage per parameter but does not tabulate an OMEGA covariance block. The packaged model therefore encodes the IIVs on CL, Vc, and Vp as independent log-normal variances using omega^2 = log(CV^2 + 1). Q has no CV / shrinkage entry in Table 3 and consequently no IIV. The V1 (Vc) entry carries a 55.1% eta shrinkage in the paper, indicating the data poorly inform the per-subject Vc estimates even with the IIV in the model; users who want a deterministic central-volume prediction can zero out etalvc with rxode2::zeroRe().

  • Virtual GA <=28 wk covariates approximate the Metsvaht 2007 pooled-fit subset. Padari 2018 reports only the demographics of the current GA >=32 wk cohort (Table 1) and combines the Metsvaht 2007 cohort by reference. The GA <=28 wk virtual stratum here uses WT = 1.0 kg, PMA = 28.0 weeks as plausible representative covariates consistent with the typical extremely-preterm late-onset sepsis cohort the paper combines into the pooled popPK fit. The simulated NCA in this stratum should be interpreted as a typical- individual prediction at those covariates, not as a fitted replication of the Metsvaht 2007 NCA medians.

  • Sampling grid limited to the paper’s six per-dose sample times. The model’s prediction is continuous, but the PKNCA validation grid follows Padari 2018 Materials and Methods “Sampling and sample handling” (0, 5 min, 1, 3, 8, 12 h post-dose) so the simulated AUC0-12 is computed on the same time grid the published NCA used.

  • PAGE covariate units (weeks vs months). The canonical PAGE entry in inst/references/covariate-columns.md documents PAGE in months (the unit used by Clegg_2024_nirsevimab and Robbie_2012_palivizumab). This model – and Germovsek_2018_meropenem in the same registry – use PAGE in weeks because the Rhodin 2009 renal-maturation function is naturally defined in weeks of PMA and Padari 2018 reports PMA in weeks. covariateData[[PAGE]]$units = "weeks" records the per-model unit explicitly so any user assembling a virtual cohort can convert if their source data are in months (PAGE_weeks = PAGE_months * 4.35).