The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Append a model to another

This vignette shows how a model can be appended to another. This is particularly useful when appending a PD model to a existing PK model. In this vignette, we’ll demonstrate how an effect compartment model can be appended to a 2-compartment model.

Prerequisite

The examples below require the package campismod.

library(campsismod)

Load your base PK model

The following code will load our reference 2-compartment PK model.

pk_model <- model_suite$pk$`2cpt_fo`

Load an effect-compartment model

The effect-compartment model can be loaded from the model library as follows:

pd_model <- model_suite$pd$effect_cmt_model
pd_model
## [MAIN]
## EMAX=THETA_EMAX*exp(ETA_EMAX)
## EC50=THETA_EC50*exp(ETA_EC50)
## GAMMA=THETA_GAMMA*exp(ETA_GAMMA)
## E0=THETA_E0*exp(ETA_E0)
## KE0=THETA_KE0*exp(ETA_KE0)
## 
## [ODE]
## PK_CONC=10
## d/dt(A_ECONC)=KE0*(PK_CONC - A_ECONC)
## EFFECT=E0 + EMAX*pow(A_ECONC, GAMMA)/(pow(EC50, GAMMA) + pow(A_ECONC, GAMMA))
## 
## 
## THETA's:
##    name index value   fix                         label  unit
## 1  EMAX     1 100.0 FALSE                Maximum effect  <NA>
## 2  EC50     2  10.0 FALSE  Concentration at 50% of EMAX ng/mL
## 3 GAMMA     3   1.5 FALSE              Hill coefficient  <NA>
## 4    E0     4  20.0 FALSE                      Baseline  <NA>
## 5   KE0     5   0.5 FALSE Effect compartment delay rate   1/h
## OMEGA's:
##    name index index2 value   fix type
## 1  EMAX     1      1    10 FALSE  cv%
## 2  EC50     2      2    10 FALSE  cv%
## 3 GAMMA     3      3    10 FALSE  cv%
## 4    E0     4      4    10 FALSE  cv%
## 5   KE0     5      5    10 FALSE  cv%
## SIGMA's:
## # A tibble: 0 × 0
## No variance-covariance matrix
## 
## Compartments:
## A_ECONC (CMT=1)

This PD model has a variable PK_CONC, that needs to be linked with the PK concentration.
Therefore, we need to adapt it as follows:

pd_model <- pd_model %>% replace(Equation("PK_CONC", "A_CENTRAL/VC"))

Append PD model to PK model

Appending the PD model to the PK model is done using the add function:

pkpd_model <- pk_model %>% add(pd_model)
pkpd_model
## [MAIN]
## TVBIO=THETA_BIO
## TVKA=THETA_KA
## TVVC=THETA_VC
## TVVP=THETA_VP
## TVQ=THETA_Q
## TVCL=THETA_CL
## 
## BIO=TVBIO
## KA=TVKA * exp(ETA_KA)
## VC=TVVC * exp(ETA_VC)
## VP=TVVP * exp(ETA_VP)
## Q=TVQ * exp(ETA_Q)
## CL=TVCL * exp(ETA_CL)
## EMAX=THETA_EMAX*exp(ETA_EMAX)
## EC50=THETA_EC50*exp(ETA_EC50)
## GAMMA=THETA_GAMMA*exp(ETA_GAMMA)
## E0=THETA_E0*exp(ETA_E0)
## KE0=THETA_KE0*exp(ETA_KE0)
## 
## [ODE]
## d/dt(A_ABS)=-KA*A_ABS
## d/dt(A_CENTRAL)=KA*A_ABS + Q/VP*A_PERIPHERAL - Q/VC*A_CENTRAL - CL/VC*A_CENTRAL
## d/dt(A_PERIPHERAL)=Q/VC*A_CENTRAL - Q/VP*A_PERIPHERAL
## PK_CONC=A_CENTRAL/VC
## d/dt(A_ECONC)=KE0*(PK_CONC - A_ECONC)
## EFFECT=E0 + EMAX*pow(A_ECONC, GAMMA)/(pow(EC50, GAMMA) + pow(A_ECONC, GAMMA))
## 
## [F]
## A_ABS=BIO
## 
## [ERROR]
## CONC=A_CENTRAL/VC
## if (CONC <= 0.001) CONC=0.001
## CONC_ERR=CONC*(1 + EPS_PROP_RUV)
## 
## 
## THETA's:
##     name index value   fix                            label  unit
## 1    BIO     1   1.0 FALSE                  Bioavailability  <NA>
## 2     KA     2   1.0 FALSE                  Absorption rate   1/h
## 3     VC     3  10.0 FALSE    Volume of central compartment     L
## 4     VP     4  40.0 FALSE Volume of peripheral compartment     L
## 5      Q     5  20.0 FALSE           Inter-compartment flow   L/h
## 6     CL     6   3.0 FALSE                        Clearance   L/h
## 7   EMAX     7 100.0 FALSE                   Maximum effect  <NA>
## 8   EC50     8  10.0 FALSE     Concentration at 50% of EMAX ng/mL
## 9  GAMMA     9   1.5 FALSE                 Hill coefficient  <NA>
## 10    E0    10  20.0 FALSE                         Baseline  <NA>
## 11   KE0    11   0.5 FALSE    Effect compartment delay rate   1/h
## OMEGA's:
##     name index index2 value   fix type
## 1     KA     1      1    25 FALSE  cv%
## 2     VC     2      2    25 FALSE  cv%
## 3     VP     3      3    25 FALSE  cv%
## 4      Q     4      4    25 FALSE  cv%
## 5     CL     5      5    25 FALSE  cv%
## 6   EMAX     6      6    10 FALSE  cv%
## 7   EC50     7      7    10 FALSE  cv%
## 8  GAMMA     8      8    10 FALSE  cv%
## 9     E0     9      9    10 FALSE  cv%
## 10   KE0    10     10    10 FALSE  cv%
## SIGMA's:
##       name index index2 value   fix type
## 1 PROP_RUV     1      1   0.1 FALSE   sd
## No variance-covariance matrix
## 
## Compartments:
## A_ABS (CMT=1)
## A_CENTRAL (CMT=2)
## A_PERIPHERAL (CMT=3)
## A_ECONC (CMT=4)

Simulate our PK/PD model

Let’s now simulate our PK/PD model:

library(campsis)
dataset <- Dataset(25) %>% 
  add(Bolus(time=0, amount=1000, compartment=1, ii=12, addl=2)) %>%
  add(Observations(times=0:36))
results <- pkpd_model %>% simulate(dataset=dataset, seed=1)
shadedPlot(results, "CONC")
shadedPlot(results, "CONC")
PK concentration
PK concentration
shadedPlot(results, "EFFECT")
Showing the delayed effect
Showing the delayed effect

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.