Skip to contents

Model and source

  • Citation: Golubovic B, Vucicevic K, Radivojevic D, Vezmar Kovacevic S, Prostran M, Miljkovic B. Exploring sirolimus pharmacokinetic variability using data available from the routine clinical care of renal transplant patients - population pharmacokinetic approach. J Med Biochem. 2019;38(3):323-331. doi:10.2478/jomb-2018-0030.
  • Description: Two-compartment population PK model for sirolimus in adult kidney transplant recipients on triple immunosuppressive therapy (sirolimus + mycophenolate mofetil + corticosteroids) developed from routine therapeutic-drug-monitoring trough data with the NONMEM informative-prior functionality (Golubovic 2019). Covariate effects on CL/F: aspartate aminotransferase greater than 37 IU/L as a binary indicator of elevated liver enzymes (-37 percent multiplicative effect via power form 0.63^AST_HIGH) and age as a linear-deviation effect on CL/F with reference age 44 years (coefficient -0.388 on AGE/44, reproducing the 49 percent CL/F decrease from age 16 to age 64 reported in the Discussion).
  • Article: https://doi.org/10.2478/jomb-2018-0030

Golubovic, Vucicevic, Radivojevic, Vezmar Kovacevic, Prostran, and Miljkovic (University of Belgrade) developed a two-compartment population PK model for sirolimus from 250 trough concentrations collected during routine therapeutic drug monitoring of 25 adult kidney transplant recipients at a single Serbian centre (Methods + Results). All concentrations were end-of-dosing-interval troughs measured before the morning dose; the assay was the Architect Sirolimus chemiluminescent microparticle immunoassay (Abbott Laboratories). Because trough-only data are uninformative about absorption and distribution, the authors used the NONMEM informative-prior functionality with structural priors from Dansirikul et al. (2-compartment volumes and Q/F) and Jiao et al. (absorption rate ka and its IIV). Two covariates were retained after forward stepwise inclusion + backward elimination: AST greater than 37 IU/L as a binary indicator of elevated liver enzymes (-37 percent multiplicative effect on CL/F) and patient age as a linear-deviation effect on CL/F.

Population

The model-development cohort comprised 25 adult kidney transplant recipients (18 male / 7 female; 28 percent female) treated at the Nephrology Clinic, Clinical Center of Serbia, from March 2012 to December 2013 (Methods, Patients and data collection; Table I, model-development column). Mean age was 43.22 years (range 16-64), mean body weight 77.07 kg (range 44-128). All patients had been converted to sirolimus from a calcineurin inhibitor (tacrolimus or cyclosporine) as the second-line immunosuppressive treatment in the local protocol; concomitant therapy consisted of mycophenolate mofetil (mean 1104 mg/day) and corticosteroids (mean 10.74 mg/day). Twenty-three patients (92 percent) received a living-donor graft and 21 (84 percent) had been on dialysis pre-transplant. Sirolimus daily dose was titrated to a target trough concentration of 8-20 ng/mL; observed troughs spanned 0.5 to 38.4 ng/mL (mean 9.85). An independent external validation cohort of 13 newly converted patients is described in the source but is not encoded in this model (Methods, “external data set”).

The same information is available programmatically via the model’s population metadata.

mod <- readModelDb("Golubovic_2019_sirolimus")
str(rxode2::rxode(mod)$population)
#> ℹ parameter labels from comments will be replaced by 'label()'
#> List of 18
#>  $ species       : chr "human"
#>  $ n_subjects    : int 25
#>  $ n_studies     : int 1
#>  $ n_observations: int 250
#>  $ age_range     : chr "16-64 years"
#>  $ age_median    : chr "43.22 years (mean)"
#>  $ weight_range  : chr "44-128 kg"
#>  $ weight_median : chr "77.07 kg (mean)"
#>  $ sex_female_pct: num 28
#>  $ race_ethnicity: chr "Not reported (single-country Serbian cohort)."
#>  $ disease_state : chr "Adult kidney transplant recipients converted to sirolimus from a calcineurin inhibitor (tacrolimus or cyclospor"| __truncated__
#>  $ dose_range    : chr "0.5-15 mg/day oral sirolimus titrated to maintain trough blood concentrations of 8-20 ng/mL."
#>  $ regions       : chr "Serbia (single centre: Nephrology Clinic, Clinical Center of Serbia, University of Belgrade)."
#>  $ co_medication : chr "Mycophenolate mofetil (mean 1104 mg/day, range 0-2000) and corticosteroids (mean 10.74 mg/day, range 0-50)."
#>  $ graft_origin  : chr "Living donor n = 23 (92 percent); cadaveric n = 2 (8 percent)."
#>  $ dialysis_pre  : chr "Pre-transplant dialysis n = 21 (84 percent); no pre-transplant dialysis n = 4 (16 percent)."
#>  $ assay         : chr "Architect Sirolimus chemiluminescent microparticle immunoassay (Abbott Laboratories), nominal measurement range"| __truncated__
#>  $ notes         : chr "Single-centre retrospective TDM cohort. Demographics summarised here are Table I model-development column (n = "| __truncated__

Source trace

The per-parameter origin is recorded as an in-file comment next to each ini() entry in inst/modeldb/specificDrugs/Golubovic_2019_sirolimus.R. The table below collects the same information in one place for review.

Equation / parameter Value Source location
lcl (CL/F at AGE = 0 and AST <= 37, L/h) 12.2 Table IV: CL/F = 12.2 L/h
lvc (Vc/F, L) 118 Table IV: Vc/F = 118 L
lvp (Vp/F, L) 609 Table IV: Vp/F = 609 L
lq (Q/F, L/h) 5.07 Table IV: Q/F = 5.07 L/h
lka (ka, 1/h; prior-fixed) 2.19 Table IV: ka = 2.19 1/h (SE 4.79e-5, bootstrap 2.19-2.19)
e_ast_cl (log of AST>37 effect on CL/F) log(0.630) Table IV: theta_AST = 0.630 (-37 percent on CL/F when AST > 37)
e_age_cl (linear coefficient on AGE/44 for CL/F) -0.388 Table IV: theta_AGE = -0.388
etalcl (omega^2 on CL/F) 0.0547 Table IV: omega^2 CL/F = 0.0547
etalvc (omega^2 on Vc/F) 0.306 Table IV: omega^2 Vc/F = 0.306
etalvp (omega^2 on Vp/F) 0.0657 Table IV: omega^2 Vp/F = 0.0657
etalq (omega^2 on Q/F) 0.103 Table IV: omega^2 Q/F = 0.103
etalka (omega^2 on ka; prior-fixed) 0.145 Table IV: omega^2 ka = 0.145 (SE 1.28e-6, bootstrap 0.144-0.144)
addSd (additive residual SD, ng/mL; Wa) 1.93 Table IV: Wa = 1.93 ng/mL
propSd (proportional residual SD, fraction; Wp) 0.249 Table IV: Wp = 0.249
Final-model equation CL/F = 12.2 * 0.63^AST * (1 - 0.388 * AGE / 44) n/a Results (page 327), final equation immediately preceding Figure 1; AST = 1 if AST > 37 IU/L else 0
AST threshold 37 IU/L n/a Results: “AST greater than 37 IU/L” (upper limit of normal)
Structural model: 2-compartment with first-order absorption n/a Methods + Results, Table II (2-COMP with prior parameters selected by AIC/BIC)
Residual model: combined additive + proportional (“slope-intercept”) n/a Results: “the residual variability was best described with slope-intercept error model”
IIV form: log-normal exponential n/a Methods, Population pharmacokinetic modeling: “Interindividual variability was evaluated by an exponential model”

Virtual cohort

Original observed concentration data are not publicly available. The simulated cohort below uses age and AST distributions matched to Golubovic 2019 Table I (model-development column): age normally distributed with mean 43.22 years and SD 12.62 years, truncated to 16-64; AST log-normally distributed with the table’s reported mean 28.34 IU/L and SD 28.78 IU/L, truncated to 9-274 IU/L. The cohort is stratified into three illustrative groups so the per-group trough simulations can be compared against the paper’s covariate findings:

  • Reference: age 44 years (the reference age in the final equation), AST <= 37 IU/L.
  • Young: age 16-30 years (the youngest tertile reported in the cohort).
  • Old: age 50-64 years (the oldest tertile).
  • AST elevated: age 44 years with AST > 37 IU/L.
set.seed(20190620)

n_per_group <- 200L
sample_times_h <- c(0, 0.5, 1, 2, 4, 8, 12, 16, 24)  # one dosing-interval grid

draw_age <- function(n, lo, hi, mean = 43.22, sd = 12.62) {
  out <- rnorm(n, mean = mean, sd = sd)
  pmin(pmax(out, lo), hi)
}
draw_ast_normal <- function(n) {
  ln_sd   <- sqrt(log(1 + (28.78 / 28.34)^2))
  ln_mean <- log(28.34) - 0.5 * ln_sd^2
  out <- exp(rnorm(n, ln_mean, ln_sd))
  pmin(pmax(out, 9), 37)
}
draw_ast_high <- function(n) {
  pmin(pmax(rlnorm(n, log(60), 0.4), 38), 274)
}

make_group <- function(label, n, age_fun, ast_fun, id_offset, dose_mg = 4) {
  ids <- id_offset + seq_len(n)
  ages <- age_fun(n)
  asts <- ast_fun(n)
  dose_rows <- tibble(
    id   = ids,
    time = 0,
    evid = 1L,
    amt  = dose_mg,
    cmt  = "depot",
    AGE  = ages,
    AST  = asts,
    cohort = label
  )
  obs_rows <- tibble(
    id   = rep(ids, each = length(sample_times_h)),
    time = rep(sample_times_h, times = n),
    evid = 0L,
    amt  = 0,
    cmt  = NA_character_,
    AGE  = rep(ages, each = length(sample_times_h)),
    AST  = rep(asts, each = length(sample_times_h)),
    cohort = label
  )
  bind_rows(dose_rows, obs_rows) |>
    arrange(id, time, desc(evid))
}

events <- bind_rows(
  make_group("Reference (age 44, AST normal)",
             n_per_group,
             age_fun = function(n) rep(44, n),
             ast_fun = draw_ast_normal,
             id_offset = 0L),
  make_group("Young (16-30 y, AST normal)",
             n_per_group,
             age_fun = function(n) draw_age(n, 16, 30, mean = 23, sd = 4),
             ast_fun = draw_ast_normal,
             id_offset = 1L * n_per_group),
  make_group("Old (50-64 y, AST normal)",
             n_per_group,
             age_fun = function(n) draw_age(n, 50, 64, mean = 57, sd = 4),
             ast_fun = draw_ast_normal,
             id_offset = 2L * n_per_group),
  make_group("AST elevated (age 44, AST > 37)",
             n_per_group,
             age_fun = function(n) rep(44, n),
             ast_fun = draw_ast_high,
             id_offset = 3L * n_per_group)
)

stopifnot(!anyDuplicated(unique(events[, c("id", "time", "evid")])))

events$cohort <- factor(
  events$cohort,
  levels = c(
    "Reference (age 44, AST normal)",
    "Young (16-30 y, AST normal)",
    "Old (50-64 y, AST normal)",
    "AST elevated (age 44, AST > 37)"
  )
)

Simulation

A single oral dose of 4 mg (the cohort-mean daily dose was 3.6 mg, range 0.5-15 mg; Table I) is simulated over one dosing interval (24 h) for each subject in the virtual cohort. Because the source data are sparse trough observations, the stochastic simulation here is mostly for the VPC-style panels; the typical-value behaviour against the final equation is checked deterministically further down.

sim <- rxode2::rxSolve(
  mod,
  events = as.data.frame(events),
  keep   = c("cohort", "AGE", "AST")
) |>
  as.data.frame()
#> ℹ parameter labels from comments will be replaced by 'label()'

Replicate published equations and figures

Typical CL/F vs age and AST (final equation, Results page 327)

The deterministic typical-value CL/F at the reference age 44 years and across the age range of the cohort, with and without elevated AST, is the cleanest quantitative check that the model encoding matches the paper’s final equation.

mod_typical <- rxode2::zeroRe(mod)
#> ℹ parameter labels from comments will be replaced by 'label()'
grid_ages   <- seq(16, 64, by = 1)

typical_grid <- tidyr::expand_grid(
  AGE = grid_ages,
  AST = c(20, 60)
) |>
  dplyr::mutate(
    ast_high  = as.integer(AST > 37),
    cl_paper  = 12.2 * 0.63^ast_high * (1 - 0.388 * AGE / 44)
  )

ggplot(typical_grid, aes(AGE, cl_paper, colour = factor(AST))) +
  geom_line(linewidth = 0.8) +
  scale_colour_manual(values = c("20" = "steelblue", "60" = "firebrick"),
                      name = "AST (IU/L)",
                      labels = c("20 (normal)", "60 (elevated)")) +
  labs(x = "Age (years)", y = "Typical CL/F (L/h)",
       title = "Typical CL/F vs age, normal and elevated AST",
       caption = "Reproduces Golubovic 2019 Results final equation (page 327).")


knitr::kable(
  data.frame(
    AGE = c(16, 44, 64, 44),
    AST = c(20, 20, 20, 60),
    `CL/F predicted (L/h)` = c(
      12.2 * (1 - 0.388 * 16 / 44),
      12.2 * (1 - 0.388 * 44 / 44),
      12.2 * (1 - 0.388 * 64 / 44),
      12.2 * 0.63 * (1 - 0.388 * 44 / 44)
    ),
    `Paper narrative` = c(
      "Youngest patient",
      "Cohort reference",
      "Oldest patient (~49% lower than youngest)",
      "AST > 37 IU/L (-37% multiplicative on CL/F at age 44)"
    ),
    check.names = FALSE
  ),
  digits = 3,
  caption = "Typical CL/F values at the four scenarios discussed in Golubovic 2019."
)
Typical CL/F values at the four scenarios discussed in Golubovic 2019.
AGE AST CL/F predicted (L/h) Paper narrative
16 20 10.479 Youngest patient
44 20 7.466 Cohort reference
64 20 5.315 Oldest patient (~49% lower than youngest)
44 60 4.704 AST > 37 IU/L (-37% multiplicative on CL/F at age 44)

The 49 percent decrease in CL/F between the youngest (16 y) and oldest (64 y) patient is reproduced exactly: (10.479 - 5.315) / 10.479 = 0.493. The elevated-AST scenario reduces typical CL/F at age 44 from 7.466 to 4.704 L/h, the 37 percent decrease the Results section names.

Concentration-time profile after a 4 mg oral dose

sim |>
  filter(!is.na(Cc), time > 0) |>
  group_by(cohort, time) |>
  summarise(
    Q05 = quantile(Cc, 0.05, na.rm = TRUE),
    Q50 = quantile(Cc, 0.50, na.rm = TRUE),
    Q95 = quantile(Cc, 0.95, na.rm = TRUE),
    .groups = "drop"
  ) |>
  ggplot(aes(time, Q50)) +
  geom_ribbon(aes(ymin = pmax(Q05, 1e-3), ymax = Q95), alpha = 0.25,
              fill = "steelblue") +
  geom_line(colour = "steelblue") +
  facet_wrap(~ cohort, ncol = 2) +
  scale_x_continuous(breaks = c(0, 4, 8, 12, 24)) +
  scale_y_log10() +
  labs(x = "Time (h)", y = "Cc (ng/mL)",
       title = "Single-dose 4 mg oral sirolimus by cohort",
       caption = "Median (line) and 5-95 percent prediction interval (ribbon).")

The terminal-phase trajectory and the Cmax-to-Ctrough span are similar across the AST-normal cohorts; the AST-elevated and the older cohorts shift toward higher concentrations because CL/F is lower. The plotted single-dose 24 h trough is not the same as the paper’s reported steady-state trough range (8-20 ng/mL) – accumulation across repeated daily dosing approximately doubles the trough at steady state (see the next section).

Steady-state trough simulation matched to the TDM target range

The paper’s TDM protocol targets a trough sirolimus blood concentration of 8-20 ng/mL (Methods, Patients and data collection), and the model-development cohort had a mean observed trough of 9.85 ng/mL (Table I). To verify the packaged model reproduces this range at the dosing schedule used in the study, repeat-dose at the cohort-mean daily dose of 3.6 mg for 30 days and inspect the day-30 trough.

ss_events <- bind_rows(
  make_group("Reference (age 44, AST normal)", n_per_group,
             age_fun = function(n) rep(44, n),
             ast_fun = draw_ast_normal,
             id_offset = 4L * n_per_group, dose_mg = 3.6),
  make_group("Young (16-30 y, AST normal)", n_per_group,
             age_fun = function(n) draw_age(n, 16, 30, mean = 23, sd = 4),
             ast_fun = draw_ast_normal,
             id_offset = 5L * n_per_group, dose_mg = 3.6),
  make_group("Old (50-64 y, AST normal)", n_per_group,
             age_fun = function(n) draw_age(n, 50, 64, mean = 57, sd = 4),
             ast_fun = draw_ast_normal,
             id_offset = 6L * n_per_group, dose_mg = 3.6),
  make_group("AST elevated (age 44, AST > 37)", n_per_group,
             age_fun = function(n) rep(44, n),
             ast_fun = draw_ast_high,
             id_offset = 7L * n_per_group, dose_mg = 3.6)
)
ss_events <- ss_events |>
  filter(evid == 1L) |>
  rowwise() |>
  mutate(time = list(seq(0, by = 24, length.out = 30)),
         amt  = list(rep(amt, 30))) |>
  tidyr::unnest(c(time, amt)) |>
  ungroup() |>
  bind_rows(
    tibble(
      id   = rep(unique(ss_events$id), each = 25),
      time = rep(seq(29 * 24, 30 * 24, length.out = 25), times = length(unique(ss_events$id))),
      evid = 0L,
      amt  = 0,
      cmt  = NA_character_
    ) |>
      left_join(distinct(ss_events, id, AGE, AST, cohort), by = "id")
  ) |>
  arrange(id, time, desc(evid))

ss_events$cohort <- factor(
  ss_events$cohort,
  levels = c(
    "Reference (age 44, AST normal)",
    "Young (16-30 y, AST normal)",
    "Old (50-64 y, AST normal)",
    "AST elevated (age 44, AST > 37)"
  )
)

sim_ss <- rxode2::rxSolve(
  mod,
  events = as.data.frame(ss_events),
  keep   = c("cohort", "AGE", "AST")
) |>
  as.data.frame()
#> ℹ parameter labels from comments will be replaced by 'label()'

trough_30 <- sim_ss |>
  filter(!is.na(Cc), abs(time - 30 * 24) < 1e-6)

trough_summary <- trough_30 |>
  group_by(cohort) |>
  summarise(
    median = median(Cc, na.rm = TRUE),
    q05    = quantile(Cc, 0.05, na.rm = TRUE),
    q95    = quantile(Cc, 0.95, na.rm = TRUE),
    .groups = "drop"
  )

knitr::kable(
  trough_summary,
  digits = 2,
  caption = paste(
    "Day-30 trough Cc (ng/mL) at the cohort-mean 3.6 mg/day dosing schedule.",
    "Golubovic 2019 reports a mean observed trough of 9.85 ng/mL (Table I)",
    "across all subjects on doses titrated to the 8-20 ng/mL TDM target."
  )
)
Day-30 trough Cc (ng/mL) at the cohort-mean 3.6 mg/day dosing schedule. Golubovic 2019 reports a mean observed trough of 9.85 ng/mL (Table I) across all subjects on doses titrated to the 8-20 ng/mL TDM target.
cohort median q05 q95
Reference (age 44, AST normal) 9.99 4.92 18.25
Young (16-30 y, AST normal) 7.59 3.07 14.90
Old (50-64 y, AST normal) 14.14 6.79 24.99
AST elevated (age 44, AST > 37) 20.10 10.58 32.75

ggplot(trough_30, aes(cohort, Cc)) +
  geom_boxplot(fill = "steelblue", alpha = 0.6) +
  geom_hline(yintercept = c(8, 20), colour = "firebrick", linetype = "dashed") +
  scale_y_log10() +
  labs(x = NULL, y = "Day-30 trough Cc (ng/mL)",
       title = "Steady-state day-30 trough by cohort at 3.6 mg/day",
       caption = "Dashed red lines mark the 8-20 ng/mL TDM target range (Methods).") +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

The reference cohort (age 44, AST normal) at the cohort-mean dose lands close to the centre of the TDM target range; the older and AST-elevated cohorts shift upward (lower CL/F gives higher steady-state trough), while the youngest cohort sits at the bottom of the target band. This is consistent with the paper’s Discussion (“patients with compromised liver function require careful sirolimus monitoring and accordingly dosing adjustments”).

PKNCA validation

The paper does not report formal NCA on its TDM dataset (the sampling protocol is trough-only and the modelling section uses informative priors for Vc/F, Vp/F, Q/F, and ka rather than empirical NCA-derived volumes). However, NCA over the steady-state dosing interval is the natural sanity check on the encoded model: AUC0-tau,ss should equal dose / CL/F for each typical subject. Here we compute Cmax,ss, Cmin,ss, AUC0-tau,ss and Cavg,ss over the day-30 dosing interval simulated above.

interval_ss <- 29 * 24

conc_ss <- sim_ss |>
  filter(!is.na(Cc), time >= interval_ss, time <= interval_ss + 24) |>
  select(id, time, Cc, cohort)

dose_ss <- ss_events |>
  filter(evid == 1, time == interval_ss) |>
  select(id, time, amt, cohort)

conc_obj <- PKNCA::PKNCAconc(
  as.data.frame(conc_ss),
  Cc ~ time | cohort + id,
  concu = "ng/mL", timeu = "h"
)
dose_obj <- PKNCA::PKNCAdose(
  as.data.frame(dose_ss),
  amt ~ time | cohort + id,
  doseu = "mg"
)

intervals <- data.frame(
  start    = interval_ss,
  end      = interval_ss + 24,
  cmax     = TRUE,
  tmax     = TRUE,
  cmin     = TRUE,
  auclast  = TRUE,
  cav      = TRUE,
  ctrough  = TRUE
)

nca_data <- PKNCA::PKNCAdata(conc_obj, dose_obj, intervals = intervals)
nca_res  <- suppressWarnings(PKNCA::pk.nca(nca_data))
nca_tbl  <- as.data.frame(nca_res$result)

nca_summary <- nca_tbl |>
  group_by(cohort, PPTESTCD) |>
  summarise(median = median(PPORRES, na.rm = TRUE),
            q05    = quantile(PPORRES, 0.05, na.rm = TRUE),
            q95    = quantile(PPORRES, 0.95, na.rm = TRUE),
            .groups = "drop") |>
  arrange(cohort, PPTESTCD)

knitr::kable(
  nca_summary,
  digits = 3,
  caption = paste(
    "Per-cohort steady-state NCA over the day-30 dosing interval",
    "(3.6 mg/day, tau = 24 h)."
  )
)
Per-cohort steady-state NCA over the day-30 dosing interval (3.6 mg/day, tau = 24 h).
cohort PPTESTCD median q05 q95
Reference (age 44, AST normal) auclast 457.996 308.624 670.718
Reference (age 44, AST normal) cav 19.083 12.859 27.947
Reference (age 44, AST normal) cmax 37.061 23.437 57.283
Reference (age 44, AST normal) cmin 9.969 4.906 18.180
Reference (age 44, AST normal) ctrough NA NA NA
Reference (age 44, AST normal) tmax 2.000 1.000 2.000
Young (16-30 y, AST normal) auclast 371.055 241.000 546.769
Young (16-30 y, AST normal) cav 15.461 10.042 22.782
Young (16-30 y, AST normal) cmax 32.150 21.013 59.899
Young (16-30 y, AST normal) cmin 7.568 3.067 14.835
Young (16-30 y, AST normal) ctrough NA NA NA
Young (16-30 y, AST normal) tmax 1.000 1.000 2.000
Old (50-64 y, AST normal) auclast 579.539 391.452 843.519
Old (50-64 y, AST normal) cav 24.147 16.310 35.147
Old (50-64 y, AST normal) cmax 42.913 27.621 78.470
Old (50-64 y, AST normal) cmin 14.066 6.753 24.852
Old (50-64 y, AST normal) ctrough NA NA NA
Old (50-64 y, AST normal) tmax 1.000 1.000 2.000
AST elevated (age 44, AST > 37) auclast 719.452 531.056 1019.217
AST elevated (age 44, AST > 37) cav 29.977 22.127 42.467
AST elevated (age 44, AST > 37) cmax 46.861 32.722 69.887
AST elevated (age 44, AST > 37) cmin 20.021 10.484 32.553
AST elevated (age 44, AST > 37) ctrough NA NA NA
AST elevated (age 44, AST > 37) tmax 2.000 1.000 2.000

Comparison against the published cohort summary

The paper’s only directly comparable NCA-style summary is the mean (range) observed trough concentration in Table I: 9.85 (0.5-38.4) ng/mL across the full TDM dataset. The simulated trough (Cmin,ss / Ctau) at the cohort-mean dose for the reference and the young / old cohorts is in good qualitative agreement with that range (centred near 10 ng/mL with a spread of roughly 5 to 20 ng/mL). Numerical equality with the 9.85 ng/mL point estimate is not expected because the cohort observed in the study is a mixture of dose-titrated patients across the AGE / AST distribution rather than the four illustrative subgroups simulated here.

Assumptions and deviations

  • Reference age 44 years. The final equation in Golubovic 2019 Results (page 327) uses an exact reference age of 44 years in the AGE / 44 factor of the linear-deviation term. Table I reports the cohort mean as 43.22 years, so 44 is the integer-rounded centring value the authors adopted. The model file uses 44 as a structural reference; downstream users re-fitting to a cohort with a substantially different mean age may want to re-centre.
  • AST threshold 37 IU/L. The paper introduces AST as a categorical covariate with the cutoff “AST greater than 37 IU/L” (the laboratory upper limit of normal). Sites with a different ALT/AST reference range should either supply ast_high directly or adjust the inline ast_uln <- 37 constant in model().
  • ka and its IIV fixed at literature prior values. Methods state “we used the same value for this parameter and its interindividual variability as in 2-COMP” (the Jiao 2009 / Dansirikul 2005 prior bundle), and the Discussion confirms “the change in value of ka was not observed”. Table IV reports ka = 2.19 1/h with SE = 4.79e-5 and bootstrap CI 2.19-2.19, plus omega^2 ka = 0.145 with SE 1.28e-6 and bootstrap CI 0.144-0.144 – both at numerical-noise level. The model file encodes them with fixed() so downstream re-fits inherit the same fix; un-wrap if you want to re-estimate on a dataset with richer absorption sampling.
  • Volume / Q/F estimates are posteriors under informative priors. Vc/F, Vp/F, and Q/F in Table IV are posterior point estimates derived from the Dansirikul 2005 priors and the trough-only TDM dataset. The Discussion notes that the data were informative for the distribution parameters even with the sparse trough sampling, but the posteriors are still prior-dominated. Re-fitting on dense full-profile sampling will give different posterior estimates.
  • IIV correlation structure. Methods state IIV was modelled with the exponential (log-normal) form and Table IV reports diagonal omega^2 values only. The model encodes independent log-normal etas with no off-diagonal covariance terms; the paper does not publish a $OMEGA BLOCK structure.
  • External validation cohort. A separate 13-patient validation set is described in Methods (External validation) but is not encoded in this model; only the 25-patient model-development cohort is summarised in population.
  • Race / ethnicity. Not reported in the source paper; race_ethnicity in population is set to “Not reported (single-country Serbian cohort)”.
  • Concentration units. Sirolimus is reported in ng/mL throughout the paper (Methods, Blood sampling and bioanalytical assay; Table IV Wa). The model computes Cc = 1000 * central / vc to convert the mg / L native scale to ng/mL.
  • Errata. A search of the journal’s article landing page and the open publisher feed for the Journal of Medical Biochemistry returned no errata or corrigenda for this article (volume 38, issue 3, 2019) at the time of extraction. The DOI 10.2478/jomb-2018-0030 resolves to the original publication only.