buildVar
is designed to build the best variance model
for the random effects by selecting which individual parameters vary and
which ones are fixed.
Penalization criterion can be either a custom penalization of the form \(\gamma\)*(number of parameters), AIC (\(\gamma=2\)), BIC (\(\gamma=\log(N)\)) or BICc.
buildVar <- function(project=NULL,final.project=NULL, prior=NULL, weight=NULL, cv.min=0.001,
fix.param1=NULL, fix.param0=NULL, criterion="BICc", linearization=F, remove=T, add=T,
delta=c(30,10,5), omega.set=NULL, pop.set1=NULL, pop.set2=NULL, print=TRUE)
a string: the initial Monolix project
a string: the final Monolix project (default adds "_var" to the original project)
named vector of prior probabilities (default=NULL)
named vector of weights (default=NULL)
value of the coefficient of variation below which an individual parameter is considered fixed (default=0.001)
parameters with variability that cannot be removed (default=NULL)
parameters without variability that cannot be added (default=NULL)
penalization criterion to optimize c("AIC", "BIC", "BICc", gamma) (default=BICc)
TRUE/FALSE whether the computation of the likelihood is based on a linearization of the model (default=FALSE)
TRUE/FALSE try to remove random effects (default=TRUE)
TRUE/FALSE try to add random effects (default=TRUE)
maximum difference in criteria for testing a new model (default=c(30,10,5))
settings to define how a variance varies during iterations of SAEM
Monolix settings 1
Monolix settings 2
TRUE/FALSE display the results (default=TRUE)
library(Rsmlx)
We select a Monolix project
project <- "projects/simulatedPK1.mlxtran"
The model has 5 parameters: ka, Cl, V1, Q, V2. We will use
buildVar
to distinguish the parameters with and without
IIV.
buildVar.res1 <- buildVar(project)
##
## --------------------------------------------------
##
## Building the variance model
##
## __________________________________________________
##
## Estimating the population parameters
##
## __________________________________________________
## Iteration 1
##
## removing variability...
##
## -----------------------
## Step 1
## Parameters without variability:
## Parameters with variability : ka Cl V1 Q V2
##
## Criterion (linearization): 3843
## trying to remove omega_V2 : 3839.2
## trying to remove omega_Q : 3839.3
## trying to remove omega_V1 : 3887.7
## trying to remove omega_Cl : 5481.4
## trying to remove omega_ka : 4011.8
##
## Criterion: 3860.8
## fitting the model with no variability on V2 : 3852.6
## variability on V2 removed
##
## -----------------------
## Step 2
## Parameters without variability: V2
## Parameters with variability : ka Cl V1 Q
##
## Criterion (linearization): 3837.8
## trying to remove omega_Q : 3834.0
##
## Criterion: 3852.6
## fitting the model with no variability on V2 Q : 3849.2
## variability on Q removed
##
## no more variability can be removed
## _______________________
##
## adding variability...
##
## -----------------------
## Step 1
## Parameters without variability: Q V2
## Parameters with variability : ka Cl V1
##
## Criterion (linearization): 3833.9
## trying to add omega_V2 : 3844.9
##
## no more variability can be added
##
## __________________________________________________
##
## Final variance model:
##
## Parameters without variability: Q V2
## Parameters with variability : ka Cl V1
##
## Fitting the final model using the original settings...
##
## Estimated criteria (importanceSampling):
## AIC BIC BICc s.e.
## 3795.10 3831.57 3848.96 0.21
##
## total time: 263.4s
print(buildVar.res1)
## $project
## [1] "projects/simulatedPK1_var.mlxtran"
##
## $niter
## [1] 1
##
## $change
## [1] TRUE
##
## $variability.model
## ka Cl V1 Q V2
## TRUE TRUE TRUE FALSE FALSE
##
## $time
## elapsed
## 263.44
It is possible to fix the type of variability of some parameters of the model. In this example, we force Q to have no IIV while ka and Cl vary:
buildVar.res2 <- buildVar(project, final.project="projects/buildVar2.mlxtran",
fix.param0="Q", fix.param1=c("ka", "Cl"))
print(buildVar.res2$variability.model)
## ka Cl V1 Q V2
## TRUE TRUE TRUE FALSE FALSE
Rather than forcing certain parameters to vary or to be fixed, one can introduce a priori information to favor the presence or absence of variability.
We can either define a prior probability or introduce a weighting for the penalty term. For instance, weight=2 means that, for each parameter, we penalize twice as much the presence of a variance, while weight=0.5 means that the penalty is twice less than when the chosen criterion is used by default (i.e. weight=1). By default, BICc is used. Then, the criteria to minimize is -2 LL + weight x log(N) x (number of variances)
In this example, add=F means that the algorithm starts with a full variance model and only tries to remove variances.
buildVar.res3 <- buildVar(project, final.project="projects/buildVar3.mlxtran", weight=3, add=F)
print(buildVar.res3$variability.model)
## ka Cl V1 Q V2
## TRUE TRUE FALSE FALSE FALSE
Different weights can be used for the different parameters. In this example, the variability of Q is privileged while that of V1 is strongly penalized
buildVar.res4 <- buildVar(project, final.project="projects/buildVar4.mlxtran", weight=c(Q=0.05, V1=20))
print(buildVar.res4$variability.model)
## ka Cl V1 Q V2
## TRUE TRUE FALSE TRUE FALSE