if (!.Call(`_rxode2_isIntel`)) {
test_that("ui props", {
fun_odes <- function() {
description <- "Dupilumab PK model (Kovalenko 2020)"
reference <- "Kovalenko P, Davis JD, Li M, et al. Base and Covariate Population Pharmacokinetic Analyses of Dupilumab Using Phase 3 Data. Clinical Pharmacology in Drug Development. 2020;9(6):756-767. doi:10.1002/cpdd.780"
# Model 1 from table 1 and supplementary Table 2 in the publication and its
# supplement.
covariateData <-
list(
WT = "Body weight in kg"
)
ini({
lvc <- log(2.48); label("central volume (L)")
lke <- log(0.0534); label("elimination rate (1/d)")
lkcp <- log(0.213); label("central-to-peripheral rate (1/d)")
Mpc <- 0.686; label("ratio of kcp and kpc (kpc is peripheral to central rate with units of 1/d)")
lka <- log(0.256); label("absorption rate (1/d)")
lMTT <- log(0.105); label("mean transit time (d)")
lVm <- log(1.07); label("maximum target-mediated rate of elimination (mg/L/d)")
Km <- fixed(0.01); label("Michaelis-Menten constant (mg/L)")
lfdepot <- log(0.643); label("Bioavailability (fraction)")
e_wt_vc <- 0.711; label("Exponent of weight on central volume (unitless)")
etalvc ~ 0.192
etalke ~ 0.285
etalka ~ 0.474
etalvm ~ 0.236
etamtt ~ 0.525 # etamtt is assumed to be on log-scale MTT to prevent negative values; this is a difference relative to Supplementary Table 2
cppropSd <- 0.15; label("Proportional residual error (fraction)")
cpaddSd <- fixed(0.03); label("Additive residual error (mg/L)")
})
model({
# Weight normalization to 75 kg is assumed based on prior publication. It
# is not specified in the current publication:
# Kovalenko P, DiCioccio AT, Davis JD, et al. Exploratory Population PK
# Analysis of Dupilumab, a Fully Human Monoclonal Antibody Against
# IL-4Ralpha, in Atopic Dermatitis Patients and Normal Volunteers. CPT
# Pharmacometrics Syst Pharmacol. 2016;5(11):617-624. doi:10.1002/psp4.12136
vc <- exp(lvc + etalvc)*(WT/75)^e_wt_vc
ke <- exp(lke + etalke)
kcp <- exp(lkcp)
ka <- exp(lka + etalka)
MTT <- exp(lMTT + etamtt)
Vm <- exp(lVm + etalvm)
# Derived parameters
kpc <- kcp/Mpc
ktr <- (3 + 1)/MTT
d/dt(depot) <- -ktr*depot
d/dt(transit1) <- ktr*(depot - transit1)
d/dt(transit2) <- ktr*(transit1 - transit2)
d/dt(transit3) <- ktr*transit2 - ka*transit3
# Linear and Michaelis-Menten clearance
d/dt(central) <- ka*transit3 - ke*central - kcp*central + kpc*periph - central*(Vm/(Km + central/vc))
d/dt(periph) <- kcp*central - kpc*periph
f(depot) <- exp(lfdepot)
# No unit conversion is required to change mg/L (dosing amount/central
# volume unit) to mg/L (measurement unit)
Cc <- central/vc
Cc ~ add(cpaddSd) + prop(cppropSd)
})
}
fun_ana <- function() {
description <- "Two compartment PK model with linear clearance for average monoclonal antibodies (Davda 2014)"
reference <- "Davda JP, Dodds MG, Gibbs MA, Wisdom W, Gibbs JP. A model-based meta-analysis of monoclonal antibody pharmacokinetics to guide optimal first-in-human study design. MAbs. 2014;6(4):1094-1102. doi:10.4161/mabs.29095"
ini({
lfdepot <- log(0.744) ; label("Subcutaneous bioavailability (fraction)")
lka <- log(0.282) ; label("Absorption rate (Ka, 1/day)")
lcl <- log(0.200) ; label("Clearance (CL, L/day)")
lv <- log(3.61) ; label("Central volume of distribution (V, L)")
lvp <- log(2.75) ; label("Peripheral volume of distribution (Vp, L)")
lq <- log(0.747) ; label("Intercompartmental clearance (Q, L/day)")
allocl <- 0.865 ; label("Allometric exponent on clearance and intercompartmental clearance (unitless)")
allov <- 0.957 ; label("Allometric exponent on volumes of distribution (unitless)")
etafdepot ~ 0
etaka ~ 0.416
etacl + etav + etavp ~ c(0.0987,
0.0786, 0.116,
0.0377, 0.0619, 0.0789)
etaq ~ 0.699
prop.err <- 0.144 ; label("Proportional residual error (fraction)")
})
model({
# WT is body weight in kg
fdepot <- exp(lfdepot + etafdepot)
ka <- exp(lka + etaka)
wtnorm <- log(WT/70)
cl <- exp(lcl + allocl*wtnorm + etacl)
q <- exp(lq + allocl*wtnorm + etaq)
v <- exp(lv + allov*wtnorm + etav)
vp <- exp(lvp + allov*wtnorm + etavp)
Cc <- linCmt()
f(depot) <- fdepot # Units are dosing units/L (typically mg/L = ug/mL)
Cc ~ prop(prop.err)
})
}
obj_ana = rxode2(fun_ana)
obj_odes = rxode2(fun_odes)
expect_equal(obj_ana$props,
list(pop = c("lfdepot", "lka", "lcl", "lv", "lvp", "lq", "allocl", "allov"),
resid = "prop.err",
group = list(id = c("etafdepot", "etaka", "etacl", "etav", "etavp", "etaq")),
linCmt = TRUE,
cmt = c("depot", "central"),
output = list(primary = c("fdepot", "ka", "wtnorm", "cl", "q", "v", "vp"),
secondary = character(0),
endpoint = "Cc",
state = character(0)),
cmtProp=NULL))
expect_equal(obj_odes$props,
list(pop = c("lvc", "lke", "lkcp", "Mpc", "lka", "lMTT", "lVm", "Km", "lfdepot", "e_wt_vc"),
resid = c("cppropSd", "cpaddSd"),
group = list(id = c("etalvc", "etalke", "etalka", "etalvm", "etamtt")),
linCmt = FALSE,
cmt = c("depot", "transit1", "transit2", "transit3", "central", "periph"),
output = list(primary = c("vc", "ke", "kcp", "ka", "MTT", "Vm", "kpc"),
secondary = "ktr",
endpoint = "Cc",
state = c("depot", "transit1", "transit2", "transit3", "central", "periph")),
cmtProp=data.frame(Compartment="depot", Property="f")))
fun_ana2 <- function() {
description <- "Two compartment PK model with linear clearance for average monoclonal antibodies (Davda 2014)"
reference <- "Davda JP, Dodds MG, Gibbs MA, Wisdom W, Gibbs JP. A model-based meta-analysis of monoclonal antibody pharmacokinetics to guide optimal first-in-human study design. MAbs. 2014;6(4):1094-1102. doi:10.4161/mabs.29095"
ini({
lfdepot <- log(0.744) ; label("Subcutaneous bioavailability (fraction)")
lka <- log(0.282) ; label("Absorption rate (Ka, 1/day)")
lcl <- log(0.200) ; label("Clearance (CL, L/day)")
lv <- log(3.61) ; label("Central volume of distribution (V, L)")
lvp <- log(2.75) ; label("Peripheral volume of distribution (Vp, L)")
lq <- log(0.747) ; label("Intercompartmental clearance (Q, L/day)")
allocl <- 0.865 ; label("Allometric exponent on clearance and intercompartmental clearance (unitless)")
allov <- 0.957 ; label("Allometric exponent on volumes of distribution (unitless)")
etafdepot ~ 0
etaka ~ 0.416
etacl + etav + etavp ~ c(0.0987,
0.0786, 0.116,
0.0377, 0.0619, 0.0789)
etaq ~ 0.699
prop.err <- 0.144 ; label("Proportional residual error (fraction)")
})
model({
# WT is body weight in kg
fdepot <- exp(lfdepot + etafdepot)
ka <- exp(lka + etaka)
wtnorm <- log(WT/70)
cl <- exp(lcl + allocl*wtnorm + etacl)
q <- exp(lq + allocl*wtnorm + etaq)
v <- exp(lv + allov*wtnorm + etav)
vp <- exp(lvp + allov*wtnorm + etavp)
linCmt() ~ prop(prop.err)
f(depot) <- fdepot # Units are dosing units/L (typically mg/L = ug/mL)
})
}
tmp <- fun_ana2()
expect_equal(tmp$props,
list(pop = c("lfdepot", "lka", "lcl", "lv", "lvp", "lq", "allocl", "allov"),
resid = "prop.err",
group = list(id = c("etafdepot", "etaka", "etacl", "etav", "etavp", "etaq")),
linCmt = TRUE,
cmt = c("depot", "central"),
output = list(primary = c("fdepot", "ka", "wtnorm", "cl", "q", "v", "vp"),
secondary = character(0),
endpoint = character(0),
state = character(0)),
cmtProp=NULL))
})
test_that("linCmt single compartment parses correctly", {
mod <- function() {
ini({
cl <- 0.1
vc <- 4
err.sd <- 0.1
})
model({
Cc <- linCmt(cl, vc)
Cc ~ add(err.sd)
})
}
mod <- mod()
expect_error(mod$props, NA)
expect_equal(mod$props,
list(pop = c("cl", "vc"),
resid = "err.sd",
group = structure(list(), names = character(0)),
linCmt = TRUE,
cmt = "central",
output = list(primary = character(0),
secondary = character(0),
endpoint = "Cc",
state = character(0)),
cmtProp=NULL))
})
test_that("state based endpoint", {
oncology_sdm_lobo_2002 <- function() {
description <- "Signal transduction model for delayed concentration effects on cancer cell growth"
reference <- "Lobo ED, Balthasar JP. Pharmacodynamic modeling of chemotherapeutic effects: Application of a transit compartment model to characterize methotrexate effects in vitro. AAPS J. 2002;4(4):212-222. doi:10.1208/ps040442"
depends<-"Cc"
units<-list(time="hr")
# Values for lkng, ltau, lec50, and kmax are for methotrexate from Lobo 2002,
# Table 2. propErr and addErr are added as reasonable values though not from
# Lobo 2002 where no value is apparent in the paper.
ini({
lkng <- log(0.02) ; label("Cell net growth rate (growth minus death) (1/hr)")
ltau <- log(34.1) ; label("Mean transit time of each transit compartment (hr)")
lec50 <- log(0.1) ; label("Drug concentration reducing the cell growth by 50% (ug/mL)")
kmax <- 0.29 ; label("Maximum drug-related reduction in cell growth (1/hr)")
tumorVolpropSd <- c(0, 0.3) ; label("Proportional residual error (fraction)")
tumorVoladdSd <- c(0, 50, 1000) ; label("Additive residual error (tumor volume units)")
})
model({
# Cc is the drug concentration
kng <- exp(lkng)
tau <- exp(ltau)
ec50 <- exp(lec50)
drugEffectTumorVol <- kmax*Cc/(ec50 + Cc)
tumorVol(0) <- tumorVol0
d/dt(tumorVol) <- kng*tumorVol - transit4*tumorVol
d/dt(transit1) <- (drugEffectTumorVol - transit1)/tau
d/dt(transit2) <- (transit1 - transit2)/tau
d/dt(transit3) <- (transit2 - transit3)/tau
d/dt(transit4) <- (transit3 - transit4)/tau
tumorVol ~ prop(tumorVolpropSd) + add(tumorVoladdSd)
})
}
rx_obj = rxode2::rxode2(oncology_sdm_lobo_2002)
expect_equal(rx_obj$props$output$endpoint, "tumorVol")
})
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.