Example: Covariate model
A two-compartment oral model with body weight (WT) and creatinine clearance (CRCL) as covariates on clearance.
For background on covariate parameterisation, see Chapter 17 (Covariate modeling) in the FeRx book.
Model file
# Two-compartment oral PK model with covariates
[parameters]
theta TVCL(5.0, 0.01, 100.0)
theta TVV1(50.0, 0.1, 1000.0)
theta TVQ(10.0, 0.01, 200.0)
theta TVV2(100.0, 0.1, 5000.0)
theta TVKA(1.0, 0.01, 50.0)
theta THETA_WT(0.75, 0.01, 2.0)
theta THETA_CRCL(0.5, 0.01, 2.0)
omega ETA_CL ~ 0.09
omega ETA_V1 ~ 0.04
omega ETA_Q ~ 0.04
omega ETA_V2 ~ 0.09
omega ETA_KA ~ 0.25
sigma PROP_ERR ~ 0.04
[individual_parameters]
CL = TVCL * exp(ETA_CL) * (WT/70)^THETA_WT * (CRCL/100)^THETA_CRCL
V1 = TVV1 * exp(ETA_V1)
Q = TVQ * exp(ETA_Q)
V2 = TVV2 * exp(ETA_V2)
KA = TVKA * exp(ETA_KA)
[structural_model]
pk two_cpt_oral(cl=CL, v1=V1, q=Q, v2=V2, ka=KA)
[error_model]
DV ~ proportional(PROP_ERR)
[fit_options]
method = focei
maxiter = 500
covariance = true
Covariate effects
The clearance equation includes two covariate effects:
CL = TVCL * exp(ETA_CL) * (WT/70)^THETA_WT * (CRCL/100)^THETA_CRCL
(WT/70)^THETA_WT— allometric scaling with body weight, centred at 70 kg. THETA_WT is estimated (typical value ~0.75 for CL).(CRCL/100)^THETA_CRCL— renal function effect, centred at 100 mL/min. THETA_CRCL is estimated.
Both effects are centred: when WT = 70 kg and CRCL = 100 mL/min, both terms equal 1.0, so TVCL is interpretable as the clearance of a 70 kg patient with normal renal function.
Both term orderings are detected correctly — FeRx recognises the theta * exp(eta) mu-reference regardless of where covariate multipliers appear:
CL = TVCL * exp(ETA_CL) * (WT/70)^0.75 # fine
CL = TVCL * (WT/70)^0.75 * exp(ETA_CL) # also fine
Data requirements
The dataset must include WT and CRCL columns:
ID,TIME,DV,EVID,AMT,CMT,MDV,WT,CRCL
1,0,.,1,100,1,1,72.5,105
1,0.5,12.3,0,.,.,0,72.5,105
1,1.0,18.7,0,.,.,0,72.5,105
Covariate columns are automatically detected — any column not in the standard NONMEM set (ID, TIME, DV, EVID, AMT, CMT, RATE, MDV, CENS, II, SS) is treated as a covariate. Names in the data file are matched case-insensitively against those used in [individual_parameters].
In R
library(ferx)
ex <- ferx_example("two_cpt_oral_cov")
fit <- ferx_fit(ex$model, ex$data)
print(fit)
# ETA-covariate correlations: check if covariates were absorbed
data <- read.csv(ex$data)
fit$eta_cov
# ETA_CL correlations with WT and CRCL should be near zero after fittingNotes
- FOCEI is used here because the proportional error model creates an interaction between random effects and residual error.
- The estimated covariate exponents (THETA_WT, THETA_CRCL) have standard errors that can be used for a likelihood-ratio test of significance.
- The initial values for covariate thetas (THETA_WT = 0.75, THETA_CRCL = 0.5) are the allometric theory values — informative starting points that speed convergence.