Skip to contents

Model and source

  • Citation: Asaumi R, Nunoya K, Yamaura Y, Taskar KS, Sugiyama Y. Robust physiologically based pharmacokinetic model of rifampicin for predicting drug-drug interactions via P-glycoprotein induction and inhibition in the intestine, liver, and kidney. CPT Pharmacometrics Syst Pharmacol. 2022;11:919-933. doi:10.1002/psp4.12807 (PMC9286720). ODEs: Supplementary Material S1 (‘Case 1: rifampicin’, ‘Case 3: talinolol’, which lists only its differences from ‘Case 2: digoxin’). Physiology: Table S1; fitted parameters: Table S2.
  • Article: https://doi.org/10.1002/psp4.12807 (open access, PMC9286720)
  • Supporting information: Supplementary Material S1 (nomenclature and all ODEs), Table S1 (physiology), Table S2 (fitted parameters), Table S3 (AUC and Cmax ratios) and Figures S1-S3.

Asaumi 2022 extends the authors’ rifampicin PBPK model (Asaumi 2019, CPT:PSP 8:845, shipped separately as Asaumi_2019_*_rifampicin_pbpk) with a three-segment segregated-flow intestine (duodenum, jejunum, ileum) and with P-glycoprotein (P-gp) induction (Emax 4.01, EC50,u 0.0639 uM) and competitive inhibition (Ki,u 402 ng/mL) in the gut, the liver and the kidney. The P-gp parameters were estimated from two of seven rifampicin-digoxin DDI cases and verified against three further P-gp substrates. The package ships the two fully specified victim couplings:

Model file Victim Rifampicin mechanisms acting on the victim
Asaumi_2022_talinolol_rifampicin_pbpk talinolol gut / liver / kidney P-gp induction + inhibition
Asaumi_2022_quinidine_rifampicin_pbpk quinidine gut / kidney P-gp induction + inhibition; gut / liver CYP3A induction

The digoxin victim model is not shipped: the digoxin sub-model divides muscle, skin and adipose into extracellular and intracellular compartments, and the intracellular / extracellular volume fractions that set its distribution are not printed anywhere in the paper or its supplement (the Kawai 1998 source the authors applied only to the liver and enterocytes is paywalled). The maintainers deferred digoxin pending those volumes; the rifampicin P-gp induction and inhibition parameters, and their validation, do not depend on it.

nms <- c(
  tal = "Asaumi_2022_talinolol_rifampicin_pbpk",
  qui = "Asaumi_2022_quinidine_rifampicin_pbpk"
)
mods <- lapply(nms, function(n) rxode2::rxode(readModelDb(n)))
vapply(mods, function(m) length(m$state), integer(1))
#> tal qui 
#>  82  77

Population

This is a bottom-up / middle-out PBPK model, not a population model. The clinical data are published mean blood concentration-time profiles and AUC ratios (AUCRs) from healthy-volunteer studies (talinolol: Tubic 2006, Westphal 2000; quinidine: Maeda 2011, Twum-Barima 1981, Damkier 1999). Every physiological parameter is per kilogram and is scaled to body weight, which Table S1 sets to the reported value or to 70 kg; the simulations below use 70 kg. No between-subject variability or residual error is published (parameters were fitted by nonlinear least squares in Napp), so every model is deterministic and one typical subject per scenario is simulated – there is no virtual cohort.

str(mods$tal$population)
#> List of 6
#>  $ species      : chr "human"
#>  $ n_subjects   : int NA
#>  $ disease_state: chr "healthy volunteers"
#>  $ weight_median: chr "70 kg (assumed unless reported; Table S1A footnote)"
#>  $ dose_range   : chr "rifampicin 600 mg PO once daily for 7 or 9 days; talinolol 30 mg IV (30-min infusion) or 100 mg PO 13 h after t"| __truncated__
#>  $ notes        : chr "Mean blood profiles digitised from the literature, not individual data. Westphal 2000 (ref. 10): talinolol IV a"| __truncated__

Source trace

Every ini() value carries an in-file comment naming its source. In summary:

Quantity Value Source
Physiological flows / volumes (per kg) liver flow 1.24 L/h; hepatic arterial 0.310; serosa 0.744; muscle 0.642; skin 0.257; adipose 0.223; blood volume 0.0743 L; hepatocytes 0.0174; hepatic extracellular 0.0067; per-segment mucosal / enterocyte / lumen volumes Table S1A
kbile, kfeces kbile 0.605 1/h; kfeces 5.13 / 1.47 / 1.21 1/h (duodenum / jejunum / ileum) Table S1B
Intestinal surface-area fractions 0.076 / 0.394 / 0.530 (duodenum / jejunum / ileum) Table S1C, Suppl. S1
Nephron flows and volumes glomerulus, proximal / distal / collecting-duct blood, cell and lumen flows and volumes Table S1D
kdeg (UGT / CYP3A / P-gp) 0.0158 1/h (liver, kidney); 0.0288 1/h (intestine) Table S1E
Rifampicin disposition Tlag 0.255 h, fB 0.0778, fH 0.0814, fE 0.115, SF Kp 6.65, fB CLint,all 0.251 L/h/kg, Rdif 0.129, beta 0.2, gamma 0.778, Km,u 146 ng/mL, PSdif,gut 0.08 L/h/kg, CLmet,ent 0.005 L/h/kg, fm UGT 0.759, CLrenal 0.011 L/h/kg Table 1 and note (from Asaumi 2019)
Rifampicin induction Emax / EC50,u UGT 1.34, CYP3A 4.57, P-gp 4.01; EC50,u 0.0639 uM Table 1 note; Table S2C
Rifampicin P-gp Ki 402 ng/mL (0.488 uM) Table S2C (estimated here)
Talinolol kstomach 0.27 1/h, SF Kp 2.3, fB CLint,all 0.64 L/h/kg (Westphal, Table S2B); fB 0.478, fH 0.893, fE 0.724, fR 0.881, beta 0.5, gamma 4.15, fbile 0.914, Km,u 4071 ng/mL (Table 1) Tables 1, S2B
Quinidine kstomach 5 (initial), SF Kp 6.1, fB CLint 0.35 L/h/kg (Maeda, Table S2B); fB 0.218, fE 0.215, fR 0.856, fm CYP3A 0.962, Km,u 409 (P-gp) / 1996 (CYP3A) ng/mL (Table 1) Tables 1, S2B
ODE structure five-unit tandem liver (permeability-limited for talinolol, perfusion-limited for quinidine), segregated-flow three-segment intestine, nephron-resolved kidney, turnover induction, competitive P-gp inhibition Supplementary Material S1

Simulation set-up

Rifampicin is dosed in micrograms into duodenum_lumen_rif (oral, after the Table 1 lag). Victim doses are in micrograms and go to stomach (oral) or central (intravenous, 0.5 h infusion via dur). Each model observes the victim blood concentration Cc, the rifampicin blood concentration Cc_rif, and the relative P-gp activities (pgp_activity_*, defined as the induced P-gp amount divided by the competitive-inhibition factor, 1 = no rifampicin).

trap <- function(t, y) sum(diff(t) * (utils::head(y, -1) + utils::tail(y, -1)) / 2)

# Build an event table. rif = data.frame(time, mg) oral rifampicin doses.
# Victim single dose vt (h) / va (ug) given orally (route "po" -> stomach) or
# intravenously (route "iv" -> central, 0.5 h infusion). Body weight 70 kg,
# all STUDY_ indicators default to 0 unless overridden via `study`.
mk_events <- function(rif = NULL, vt = NULL, va = NULL, vroute = "po", obs,
                      study = NULL) {
  ev <- data.frame(id = 1, time = obs, evid = 0, amt = 0, cmt = "central", dur = 0)
  if (!is.null(rif) && nrow(rif)) {
    ev <- rbind(ev, data.frame(
      id = 1, time = rif$time, evid = 1, amt = rif$mg * 1000,
      cmt = "duodenum_lumen_rif", dur = 0
    ))
  }
  if (!is.null(vt)) {
    ev <- rbind(ev, data.frame(
      id = 1, time = vt, evid = 1, amt = va,
      cmt = if (vroute == "iv") "central" else "stomach",
      dur = if (vroute == "iv") 0.5 else 0
    ))
  }
  ev <- ev[order(ev$time, -ev$evid), ]
  ev$WT <- 70
  # Every STUDY_ indicator defaults to 0 (the default study of each model); a
  # scenario overrides the one it needs. Supplying all four is harmless: a model
  # ignores the indicator columns it does not reference.
  ev$STUDY_TUBIC2006 <- 0
  ev$STUDY_TWUM1981_IV <- 0
  ev$STUDY_TWUM1981_PO <- 0
  ev$STUDY_DAMKIER1999 <- 0
  if (!is.null(study)) for (s in names(study)) ev[[s]] <- study[[s]]
  ev
}
rif_qd <- function(n, mg = 600, start = 0) {
  data.frame(time = start + 24 * (0:(n - 1)), mg = mg)
}

# Victim AUC over [vt, vt+win] via PKNCA (auclast). PKNCA's 'no dose' message is
# expected because auclast needs only the concentration record.
pknca_auc_window <- function(sim_df, vt, win) {
  d <- dplyr::filter(sim_df, !is.na(Cc), time >= vt, time <= vt + win)
  d$id <- 1L
  conc <- PKNCA::PKNCAconc(d, Cc ~ time | id)
  ivl <- data.frame(start = vt, end = vt + win, auclast = TRUE)
  res <- as.data.frame(PKNCA::pk.nca(PKNCA::PKNCAdata(conc, intervals = ivl)))
  res$PPORRES[res$PPTESTCD == "auclast"]
}

# Victim DDI AUCR and CmaxR (rifampicin / control) at one body weight.
victim_ddi <- function(mod, rif, vt, va, vroute, win, study = NULL) {
  obs <- sort(unique(c(vt, seq(vt, vt + win, by = 0.05))))
  s1 <- rxode2::rxSolve(mod, mk_events(rif, vt, va, vroute, obs, study),
    returnType = "data.frame", atol = 1e-10, rtol = 1e-8)
  # control: victim given at the same clock time, no rifampicin
  s0 <- rxode2::rxSolve(mod, mk_events(NULL, vt, va, vroute, obs, study),
    returnType = "data.frame", atol = 1e-10, rtol = 1e-8)
  s1w <- dplyr::filter(s1, time >= vt, time <= vt + win)
  s0w <- dplyr::filter(s0, time >= vt, time <= vt + win)
  c(
    aucr = pknca_auc_window(s1, vt, win) / pknca_auc_window(s0, vt, win),
    cmaxr = max(s1w$Cc) / max(s0w$Cc)
  )
}

Rifampicin perpetrator: blood profile and induced P-gp activities

A single 600 mg oral dose of rifampicin gives a blood Cmax near 9 ug/mL at ~1-2 h, consistent with the published rifampicin profile.

s_rif <- rxode2::rxSolve(mods$tal, mk_events(rif_qd(1), obs = seq(0, 24, 0.05)),
  returnType = "data.frame")
c(cmax_ug_per_mL = round(max(s_rif$Cc_rif) / 1000, 2),
  tmax_h = s_rif$time[which.max(s_rif$Cc_rif)])
#> cmax_ug_per_mL         tmax_h 
#>           9.01           1.70
ggplot(s_rif, aes(time, Cc_rif / 1000)) +
  geom_line(color = "firebrick") +
  labs(x = "Time (h)", y = "Rifampicin blood conc. (ug/mL)")
Rifampicin blood concentration after a single 600 mg oral dose.

Rifampicin blood concentration after a single 600 mg oral dose.

Figure 2c reports the relative P-gp activities in the liver, each intestinal segment and the kidney during repeated 600 mg once-daily rifampicin. The Results text gives, relative to no rifampicin (100%): a single dose depresses P-gp to 28% (liver), <= 5% (intestine) and 44% (kidney) at the trough by competitive inhibition; at steady state P-gp rises to 321% (liver), 276-284% (intestine) and 266% (kidney); and at the next-dose trough it is 93% (liver), <= 11% (intestine) and 109% (kidney). We reproduce these from the shipped model.

obs8 <- seq(0, 192, 0.05)
s8 <- rxode2::rxSolve(mods$tal, mk_events(rif_qd(8), obs = obs8),
  returnType = "data.frame")
d1 <- s8[s8$time <= 24, ]            # single-dose window
dss <- s8[s8$time >= 144 & s8$time <= 168, ]  # steady-state window (day 7-8)
# relative P-gp activities (percent of no-rifampicin baseline)
pct <- function(x) round(100 * x, 0)
single <- c(
  liver = pct(min(d1$pgp_activity_liver1)),
  intestine = pct(max(min(d1$pgp_activity_duodenum), min(d1$pgp_activity_jejunum), min(d1$pgp_activity_ileum))),
  kidney = pct(min(d1$pgp_activity_kidney))
)
ss_peak <- c(
  liver = pct(max(dss$pgp_activity_liver1)),
  intestine_lo = pct(min(c(max(dss$pgp_activity_duodenum), max(dss$pgp_activity_jejunum), max(dss$pgp_activity_ileum)))),
  intestine_hi = pct(max(c(max(dss$pgp_activity_duodenum), max(dss$pgp_activity_jejunum), max(dss$pgp_activity_ileum)))),
  kidney = pct(max(dss$pgp_activity_kidney))
)
ss_trough <- c(
  liver = pct(min(dss$pgp_activity_liver1)),
  intestine = pct(max(min(dss$pgp_activity_duodenum), min(dss$pgp_activity_jejunum), min(dss$pgp_activity_ileum))),
  kidney = pct(min(dss$pgp_activity_kidney))
)
single      # paper: liver 28, intestine <=5, kidney 44
#>     liver intestine    kidney 
#>        26         4        39
ss_peak     # paper: liver 321, intestine 276-284, kidney 266
#>        liver intestine_lo intestine_hi       kidney 
#>          339          288          297          285
ss_trough   # paper: liver 93, intestine <=11, kidney 109
#>     liver intestine    kidney 
#>        94        10       105
# Structural gate: the deterministic model must reproduce the Figure 2c
# relative P-gp activities. Tolerances are absolute percentage points, generous
# enough to allow for the digitised nature of the published values.
stopifnot(
  abs(single["liver"] - 28) <= 8,
  single["intestine"] <= 8,
  abs(single["kidney"] - 44) <= 8,
  abs(ss_peak["liver"] - 321) <= 40,
  ss_peak["intestine_lo"] >= 250, ss_peak["intestine_hi"] <= 320,
  abs(ss_peak["kidney"] - 266) <= 40,
  abs(ss_trough["liver"] - 93) <= 10,
  ss_trough["intestine"] <= 15,
  abs(ss_trough["kidney"] - 109) <= 12
)
plt <- s8 %>%
  select(time, Liver = pgp_activity_liver1, Jejunum = pgp_activity_jejunum,
         Kidney = pgp_activity_kidney) %>%
  tidyr::pivot_longer(-time, names_to = "tissue", values_to = "activity")
ggplot(plt, aes(time, 100 * activity, color = tissue)) +
  geom_line() +
  geom_hline(yintercept = 100, linetype = "dashed", color = "grey50") +
  labs(x = "Time (h)", y = "Relative P-gp activity (%)", color = NULL)
Relative P-gp activities during repeated 600 mg once-daily rifampicin (first liver unit, jejunum, kidney).

Relative P-gp activities during repeated 600 mg once-daily rifampicin (first liver unit, jejunum, kidney).

AUC and Cmax ratios of talinolol and quinidine (Table S3)

Table S3 gives predicted and observed AUCRs and CmaxRs for each victim under its rifampicin regimen. Talinolol is shipped with the hepatic beta fixed at 0.5 (the value at which Table S2B fitted its parameters); the reproduced column is therefore the beta = 0.5 prediction. Quinidine has a perfusion-limited liver (no beta). Each victim study’s fitted SF_Kp and fB*CLint,all set is selected by the STUDY_ indicators.

scen <- tibble::tribble(
  ~drug,       ~regimen,                                          ~mod,  ~rif,              ~vt,          ~va,     ~vroute, ~win, ~study,                                   ~pred_aucr, ~obs_aucr, ~pred_cmaxr, ~obs_cmaxr,
  "Talinolol", "RIF 600 QD x9 PO; TAL 30 mg IV 13 h after",       "tal", list(rif_qd(9)),  8 * 24 + 13,  30000,   "iv",    48,   NULL,                                     0.68,       0.79,      0.91,        0.81,
  "Talinolol", "RIF 600 QD x7 PO; TAL 100 mg PO 13 h after",      "tal", list(rif_qd(7)),  6 * 24 + 13,  100000,  "po",    48,   NULL,                                     0.62,       0.65,      0.56,        0.62,
  "Quinidine", "RIF 600 QD x7 PO; QUI 350 mg IV 24 h after",      "qui", list(rif_qd(7)),  6 * 24 + 24,  350000,  "iv",    48,   list(STUDY_TWUM1981_IV = 1),              0.47,       0.36,      0.86,        0.87,
  "Quinidine", "RIF 600 QD x7 PO; QUI 350 mg PO 24 h after",      "qui", list(rif_qd(7)),  6 * 24 + 24,  350000,  "po",    48,   list(STUDY_TWUM1981_PO = 1),              0.30,       0.17,      0.46,        0.31,
  "Quinidine", "RIF 600 QD x11 PO; QUI 166 mg PO simultaneous",   "qui", list(rif_qd(11)), 10 * 24,      166000,  "po",    48,   list(STUDY_DAMKIER1999 = 1),              0.21,       0.11,      0.54,        0.32
)

res <- lapply(seq_len(nrow(scen)), function(i) {
  victim_ddi(mods[[scen$mod[i]]], scen$rif[[i]][[1]], scen$vt[i], scen$va[i],
             scen$vroute[i], scen$win[i], scen$study[[i]])
})
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
#> No dose information provided, calculations requiring dose will return NA.
scen$sim_aucr <- round(vapply(res, function(x) x["aucr"], numeric(1)), 2)
scen$sim_cmaxr <- round(vapply(res, function(x) x["cmaxr"], numeric(1)), 2)

victim_tab <- scen %>%
  mutate(`abs % diff AUCR vs pred` = round(100 * abs(sim_aucr - pred_aucr) / pred_aucr, 0)) %>%
  select(Victim = drug, Regimen = regimen,
         `Sim AUCR` = sim_aucr, `Pred AUCR` = pred_aucr, `Obs AUCR` = obs_aucr,
         `Sim CmaxR` = sim_cmaxr, `Pred CmaxR` = pred_cmaxr, `Obs CmaxR` = obs_cmaxr,
         `abs % diff AUCR vs pred`)
knitr::kable(victim_tab, caption = "Simulated vs Table S3 predicted AUC and Cmax ratios.")
Simulated vs Table S3 predicted AUC and Cmax ratios.
Victim Regimen Sim AUCR Pred AUCR Obs AUCR Sim CmaxR Pred CmaxR Obs CmaxR abs % diff AUCR vs pred
Talinolol RIF 600 QD x9 PO; TAL 30 mg IV 13 h after 0.68 0.68 0.79 0.91 0.91 0.81 0
Talinolol RIF 600 QD x7 PO; TAL 100 mg PO 13 h after 0.52 0.62 0.65 0.57 0.56 0.62 16
Quinidine RIF 600 QD x7 PO; QUI 350 mg IV 24 h after 0.45 0.47 0.36 0.86 0.86 0.87 4
Quinidine RIF 600 QD x7 PO; QUI 350 mg PO 24 h after 0.35 0.30 0.17 0.47 0.46 0.31 17
Quinidine RIF 600 QD x11 PO; QUI 166 mg PO simultaneous 0.31 0.21 0.11 0.54 0.54 0.32 48
# Direction gate: rifampicin must LOWER every victim AUC and Cmax (net P-gp /
# CYP3A induction dominates at these staggered timings).
stopifnot(all(scen$sim_aucr < 1), all(scen$sim_cmaxr < 1))

# The intravenous arms do not involve the intestinal P-gp / CYP3A complexity and
# reproduce the authors' predictions closely.
iv <- scen$vroute == "iv"
stopifnot(
  all(abs(scen$sim_aucr[iv] - scen$pred_aucr[iv]) / scen$pred_aucr[iv] < 0.15),
  all(abs(scen$sim_cmaxr[iv] - scen$pred_cmaxr[iv]) / scen$pred_cmaxr[iv] < 0.15)
)

# The oral arms carry the additional intestinal P-gp / CYP3A nonlinearity; they
# reproduce the authors' CmaxR predictions closely but the AUCRs sit a little
# above the predictions (a weaker modelled interaction) -- the discrepancy is
# largest for the Damkier simultaneous-dose quinidine arm, the hardest case,
# where acute inhibition and chronic induction act at once. They are checked
# against a looser envelope and against a tight CmaxR bound.
po <- scen$vroute == "po"
stopifnot(
  all(abs(scen$sim_aucr[po] - scen$pred_aucr[po]) / scen$pred_aucr[po] < 0.50),
  all(abs(scen$sim_cmaxr[po] - scen$pred_cmaxr[po]) / scen$pred_cmaxr[po] < 0.15)
)

The two intravenous arms reproduce the authors’ predictions almost exactly (talinolol AUCR 0.68 / CmaxR 0.91; quinidine AUCR 0.45 / CmaxR 0.86) because an intravenous victim bypasses the intestine, where the induction and inhibition are strongest and most nonlinear. The oral arms capture the direction and the larger intestinal interaction; as the paper notes for quinidine, the oral predictions slightly underestimate the observed interaction because of the complexity of intestinal P-gp / CYP3A saturation and transporter-enzyme interplay. No parameter was adjusted to any target.

vt <- 6 * 24 + 13
obs <- sort(unique(c(vt, seq(vt, vt + 48, 0.1))))
s1 <- rxode2::rxSolve(mods$tal, mk_events(rif_qd(7), vt, 100000, "po", obs),
  returnType = "data.frame")
s0 <- rxode2::rxSolve(mods$tal, mk_events(NULL, vt, 100000, "po", obs),
  returnType = "data.frame")
pf <- rbind(
  transform(s0[s0$time >= vt, ], condition = "control"),
  transform(s1[s1$time >= vt, ], condition = "rifampicin")
)
pf$tad <- pf$time - vt
ggplot(pf, aes(tad, Cc, color = condition)) +
  geom_line() +
  labs(x = "Time after talinolol dose (h)", y = "Talinolol blood conc. (ng/mL)", color = NULL)
Talinolol 100 mg oral blood profile before (control) and after rifampicin (600 mg QD, talinolol 13 h after the last dose).

Talinolol 100 mg oral blood profile before (control) and after rifampicin (600 mg QD, talinolol 13 h after the last dose).

Assumptions and deviations

  • Digoxin victim not shipped. The digoxin sub-model splits muscle, skin and adipose into extracellular and intracellular compartments, and the fractional volumes that govern the split are not printed in the paper or its supplement (the Kawai 1998 source, applied by the authors only to the liver and enterocytes, is paywalled). The split is load-bearing – it sets the digoxin distribution volume and half-life – so digoxin was deferred. The rifampicin P-gp induction (Emax 4.01) and inhibition (Ki,u 402 ng/mL) parameters were fitted to digoxin but are reproduced here through the talinolol and quinidine couplings, which embed the identical rifampicin perpetrator model.
  • Talinolol hepatic beta fixed at 0.5. The paper carries three rate-determining-fraction (beta) sets (0.2 / 0.5 / 0.8) for talinolol, and Table S2B fitted the talinolol parameters at beta = 0.5. That value is shipped, so the reproduced Table S3 column is the beta = 0.5 prediction. The 0.5 and 0.8 sets gave the paper’s best DDI agreement; the alternative beta values can be explored by overriding beta_liver.
  • Study-specific parameter sets via STUDY_ indicators. Talinolol (STUDY_TUBIC2006) and quinidine (STUDY_TWUM1981_IV, STUDY_TWUM1981_PO, STUDY_DAMKIER1999) each fit SF_Kp and fB*CLint,all (and, for talinolol, k_stomach) per clinical study (Table S2B). The default (all indicators 0) is the Westphal 2000 talinolol set and the Maeda 2011 quinidine set; each DDI scenario selects the study it was observed in. The quinidine indicators are mutually exclusive.
  • Body weight 70 kg. Table S1A’s footnote uses the reported study weight or 70 kg; the per-kg physiological parameters are scaled by WT, set to 70 kg in all simulations here.
  • Deterministic. No IIV or residual error is published (the models were fitted by nonlinear least squares in Napp), so no random effects are encoded and one typical subject per scenario is simulated. The paper’s own virtual trials (10 trials, physiological variability) produce the prediction intervals of Figures 3 and 5; those intervals are not reproduced here.
  • AUC windows. Table S3 does not state the integration windows; a 48 h window after the victim dose is used for every AUCR and CmaxR. The direction and the intravenous-arm magnitudes are insensitive to this choice.
  • Oral victim arms model a slightly weaker interaction than the paper. For both drugs the oral-arm CmaxRs reproduce the authors’ predictions to within a few percent, but the oral AUCRs sit a little above the predictions (a weaker modelled interaction). The gap is largest for the Damkier simultaneous-dose quinidine arm (simulated AUCR 0.31 vs predicted 0.21, observed 0.11), the hardest case, where the acute competitive inhibition and the chronic induction of intestinal P-gp / CYP3A act at the same time. The paper itself notes that its oral quinidine DDIs are slightly underestimated because of the complexity of intestinal P-gp / CYP3A saturation and transporter-enzyme interplay (Discussion). The intravenous arms, which bypass the intestine, match the predictions closely. The oral AUCRs are checked against a looser 50% bound and the oral CmaxRs against a tight 15% bound.
  • gamma_inf,enterocytes = gamma_eff,enterocytes. Table 1 footnote j sets the rifampicin enterocyte gamma_inf equal to gamma_eff; both are 0.778. For talinolol and quinidine both enterocyte gamma values are 1.
  • Rifampicin SF_renal permeability for talinolol. Table 1 prints the renal permeability scaling factor only for quinidine (0.1); for talinolol the supplement equations multiply by this factor but no value is given, so it is taken as 1 (the neutral value), consistent with the Table 1 talinolol renal PS entries being the directly fitted clearances.
  • Upstream parameter provenance. The rifampicin disposition block (Table 1) and its UGT / CYP3A induction parameters originate in Asaumi 2019 / Asaumi 2018 and are fixed here as reported; the in-file comments cite the originating table. The P-gp Emax and Ki (Table S2C) and each victim’s fitted parameters (Table S2B) are the values estimated in this paper. ```