Skip to contents

This is a simple process to create individual predictions augmented with more observations than was modeled. This allows smoother plots and a better examination of the observed concentrations for an individual and population.

Step 1: Convert the Monolix model to rxode2:


library(monolix2rx)

# First we need the location of the monolix mlxtran file. Since we are
# running an example, we will use one of the built-in examples in
# `monolix2rx`
pkgTheo <- system.file("theo/theophylline_project.mlxtran", package="monolix2rx")
# You can use a control stream or other file. With the development
# version of `babelmixr2`, you can simply point to the listing file

mod <- monolix2rx(pkgTheo)
#>  integrated model file 'oral1_1cpt_kaVCl.txt' into mlxtran object
#>  updating model values to final parameter estimates
#>  done
#>  reading run info (# obs, doses, Monolix Version, etc) from summary.txt
#>  done
#>  reading covariance from FisherInformation/covarianceEstimatesLin.txt
#>  done
#> Warning in .dataRenameFromMlxtran(data, .mlxtran): NAs introduced by coercion
#>  imported monolix and translated to rxode2 compatible data ($monolixData)
#>  imported monolix ETAS (_SAEM) imported to rxode2 compatible data ($etaData)
#>  imported monolix pred/ipred data to compare ($predIpredData)
#>  solving ipred problem
#>  done
#>  solving pred problem
#>  done

Step 2: convert the rxode2 model to nlmixr2

You can convert the model, mod, to a nlmixr2 fit object:

library(babelmixr2) # provides as.nlmixr2
fit <- as.nlmixr2(mod)
#> → loading into symengine environment...
#> → pruning branches (`if`/`else`) of full model...
#>  done
#> → finding duplicate expressions in EBE model...
#> [====|====|====|====|====|====|====|====|====|====] 0:00:00
#> → optimizing duplicate expressions in EBE model...
#> [====|====|====|====|====|====|====|====|====|====] 0:00:00
#> → compiling EBE model...
#>  done
#> rxode2 4.0.0 using 2 threads (see ?getRxThreads)
#>   no cache: create with `rxCreateCache()`
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7168
#>  monolix parameter history integrated into fit object

fit

cmt(depot)cmt(central)ka=exp(ka_pop+omega_ka)V=exp(V_pop+omega_V)Cl=exp(Cl_pop+omega_Cl)ddepotdt=ka×depotdcentraldt=+ka×depotClV×centralCc=centralVCONC=CcCONCadd(a)+prop(b)+combined1()\begin{align*} cmt({depot}) \\ cmt({central}) \\ {ka} & = \exp\left({ka\_pop}+{omega\_ka}\right) \\ {V} & = \exp\left({V\_pop}+{omega\_V}\right) \\ {Cl} & = \exp\left({Cl\_pop}+{omega\_Cl}\right) \\ \frac{d \: depot}{dt} & = -{ka} {\times} {depot} \\ \frac{d \: central}{dt} & = +{ka} {\times} {depot}-\frac{{Cl}}{{V}} {\times} {central} \\ {Cc} & = \frac{{central}}{{V}} \\ {CONC} & = {Cc} \\ {CONC} & \sim add({a})+prop({b})+combined1() \end{align*}

Step 3: Create and plot an augmented prediction

ap <- augPred(fit)
#> using C compiler: ‘gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0’

head(ap)
#>     values        ind id  time Endpoint
#> 1 0.000000 Individual  1 0.000    depot
#> 2 3.726962 Individual  1 0.250    depot
#> 3 6.030526 Individual  1 0.493    depot
#> 4 6.567601 Individual  1 0.570    depot
#> 5 8.414706 Individual  1 0.986    depot
#> 6 8.746028 Individual  1 1.120    depot

# This augpred looks odd:
plot(ap)