Introduction
This describes the structure of prior population models compatible
with posologyr
and illustrates how to define new models
from published population models.
General structure
Most models can be written as a model function which can be parsed by
rxode2
. The models are written in two block statements:
-
ini({})
defining parameter values -
model({})
for the ODE-based model specification.
For example, the gentamicin model of Xuan et al. 2003 (doi:10.1016/j.ijantimicag.2003.07.010) can be written as:
mod_gentamicin_Xuan2003 <- function() {
ini({
#Fixed effects: population estimates
THETA_Cl = 0.047
THETA_V = 0.28
THETA_k12 = 0.092
THETA_k21 = 0.071
#Random effects: inter-individual variability
ETA_Cl ~ 0.084
ETA_V ~ 0.003
ETA_k12 ~ 0.398
ETA_k21 ~ 0.342
#Unexplained residual variability
add_sd <- 0.230
prop_sd <- 0.237
})
model({
#Individual model and covariates
TVl = THETA_Cl*ClCr
TVV = THETA_V*WT
TVk12 = THETA_k12
TVk21 = THETA_k21
Cl = TVl*exp(ETA_Cl)
V = TVV*exp(ETA_V)
k12 = TVk12*exp(ETA_k12)
k21 = TVk21*exp(ETA_k21)
#Structural model defined using ordinary differential equations (ODE)
ke = Cl/V
Cp = centr/V
d/dt(centr) = - ke*centr - k12*centr + k21*periph
d/dt(periph) = + k12*centr - k21*periph
#Model for unexplained residual variability
Cp ~ add(add_sd) + prop(prop_sd) + combined1()
})
}
The rxode2 mini-language syntax is detailed in the rxode2 documentation.
Individual model, random effects
Inter-individual variability can also be defined as a symmetric matrix to integrate the covariance between random effects.
For example, the amikacin model of Burdet et al. 2015 (doi:10.1007/s00228-014-1766-y) can be written as:
mod_amikacin_Burdet2015 <- function() {
ini({
#Fixed effects: population estimates
THETA_Cl=4.3
THETA_Vc=15.9
THETA_Vp=21.4
THETA_Q=12.1
#Random effects: inter-individual variability
ETA_Cl + ETA_Vc + ETA_Vp + ETA_Q ~
c(0.1,
0.01 , 0.05 ,
0.01 , 0.02 , 0.2 ,
-0.06 , 0.004, 0.003, 0.08)
#Unexplained residual variability
add_sd <- 0.2
prop_sd <- 0.1
})
model({
#Individual model and covariates
TVCl = THETA_Cl*(CLCREAT4H/82)^0.7
TVVc = THETA_Vc*(TBW/78)^0.9*(PoverF/169)^0.4
TVVp = THETA_Vp
TVQ = THETA_Q
Cl = TVCl*exp(ETA_Cl)
Vc = TVVc*exp(ETA_Vc)
Vp = TVVp*exp(ETA_Vp)
Q = TVQ *exp(ETA_Q)
#Structural model defined using ordinary differential equations (ODE)
ke = Cl/Vc
k12 = Q/Vc
k21 = Q/Vp
Cp = centr/Vc
d/dt(centr) = - ke*centr - k12*centr + k21*periph
d/dt(periph) = + k12*centr - k21*periph
#Model for unexplained residual variability
Cp ~ add(add_sd) + prop(prop_sd) + combined1()
})
}
The estimates of the variances of the random effects can be given under different parameterizations depending on the authors.
- Standard deviation (SD): the square root of the variance, as returned by Monolix
- Coefficient of variation (CV): calculated as
sqrt(exp(SD^2)-1)
, the variance can be computed back withlog((CV^2)+1)
- Full covariance matrix: the easiest to reuse, but less common in the literature
The estimates of covariance (off diagonal) are sometimes given as
coefficients of correlation between ETAs. The covariance between ETA_a
and ETA_b can be computed with the following product:
standard_deviation(ETA_a) * standard_deviation(ETA_b) * correlation(ETA_a and ETA_b)
.
Bioavailability, lag-time
Special model event changes including bioavailability
(f(depot)=1)
, and lag time (alag(depot)=0)
can
be used in the model({})
block. For example, the
ganciclovir model of Caldès et al. 2009 (doi:10.1128/aac.00085-09) can be written as:
mod_ganciclovir_Caldes2009 <- function() {
ini({
#Fixed effects: population estimates
THETA_cl <- 7.49
THETA_v1 <- 31.90
THETA_cld <- 10.20
THETA_v2 <- 32.0
THETA_ka <- 0.895
THETA_baf <- 0.825
#Random effects: inter-individual variability
ETA_cl ~ 0.107
ETA_v1 ~ 0.227
ETA_ka ~ 0.464
ETA_baf ~ 0.049
#Unexplained residual variability
add.sd <- 0.465
prop.sd <- 0.143
})
model({
#Individual model and covariates
TVcl = THETA_cl*(ClCr/57);
TVv1 = THETA_v1;
TVcld = THETA_cld;
TVv2 = THETA_v2;
TVka = THETA_ka;
TVbaf = THETA_baf;
cl = TVcl*exp(ETA_cl);
v1 = TVv1*exp(ETA_v1);
cld = TVcld;
v2 = TVv2;
ka = TVka*exp(ETA_ka);
baf = TVbaf*exp(ETA_baf);
#Structural model defined using ordinary differential equations (ODE)
k10 = cl/v1;
k12 = cld / v1;
k21 = cld / v2;
Cc = centr/v1;
d/dt(depot) = -ka*depot
d/dt(centr) = ka*depot - k10*centr - k12*centr + k21*periph;
d/dt(periph) = k12*centr - k21*periph;
d/dt(AUC) = Cc;
#Special model event changes
f(depot)=baf;
alag(depot)=0.382;
#Model for unexplained residual variability
Cc ~ add(add.sd) + prop(prop.sd) + combined1()
})
}
Classic posologyr models
Some models cannot be described by an rxode2
model
function alone. It is then possible to define a classic
posologyr
model, see
vignette ("classic_posologyr_models")
. Models falling in
this category are :
- models with inter-occasion variability (IOV), sometimes called intra-individual variability
- models with an unexplained residual error model other than additive, proportional, or combined models