Chapter 9 Solving and solving options
In general, ODEs are solved using a combination of:
A compiled model specification from
rxode2()
, specified withobject=
Input parameters, specified with
params=
(and could be blank)Input data or event table, specified with
events=
Initial conditions, specified by
inits=
(and possibly in the model itself bystate(0)=
)
The solving options are given in the sections below:
9.1 General Solving Options
9.1.1 object
object
is a either a rxode2 family of objects, or a file-name
with a rxode2 model specification, or a string with a rxode2
model specification.
9.1.2 params
params
a numeric named vector with values for every
parameter in the ODE system; the names must correspond to the
parameter identifiers used in the ODE specification;
9.1.3 events
events
an eventTable
object describing the input
(e.g., doses) to the dynamic system and observation sampling
time points (see [eventTable()]);
9.1.4 inits
inits
a vector of initial values of the state variables
(e.g., amounts in each compartment), and the order in this
vector must be the same as the state variables (e.g., PK/PD
compartments);
9.1.5 sigdig
sigdig
Specifies the “significant digits” that the ode
solving requests. When specified this controls the relative and
absolute tolerances of the ODE solvers. By default the tolerance
is 0.5*10^(-sigdig-2)
for regular ODEs. For the
sensitivity equations the default is 0.5*10\^(-sigdig-1.5)
(sensitivity changes only applicable for liblsoda). This also
## lsoda/dop solving options
controls the atol
/rtol
of the steady state solutions. The
ssAtol
/ssRtol
is 0.5*10\^(-sigdig)
and for the sensitivities
0.5*10\^(-sigdig+0.625)
. By default
this is unspecified (NULL
) and uses the standard atol
/rtol
.
9.1.6 atol
atol
a numeric absolute tolerance (1e-8 by default) used
by the ODE solver to determine if a good solution has been
achieved; This is also used in the solved linear model to check
if prior doses do not add anything to the solution.
9.1.7 rtol
rtol
a numeric relative tolerance (1e-6
by default) used
by the ODE solver to determine if a good solution has been
achieved. This is also used in the solved linear model to check
if prior doses do not add anything to the solution.
9.1.8 atolSens
atolSens
Sensitivity atol, can be different than atol with
liblsoda. This allows a less accurate solve for gradients (if desired)
9.1.9 rtolSens
rtolSens
Sensitivity rtol, can be different than rtol with
liblsoda. This allows a less accurate solve for gradients (if desired)
9.1.10 maxsteps
maxsteps
maximum number of (internally defined) steps allowed
during one call to the solver. (5000 by default)
9.1.12 hmax
hmax
The maximum absolute step size allowed. When
hmax=NA
(default), uses the average difference +
hmaxSd*sd in times and sampling events. The hmaxSd
is a user
specified parameter and which defaults to zero. When
hmax=NULL
rxode2 uses the maximum difference in times in
your sampling and events. The value 0 is equivalent to infinite
maximum absolute step size.
9.1.13 hmaxSd
hmaxSd
The number of standard deviations of the time
difference to add to hmax. The default is 0
9.1.14 hini
hini
The step size to be attempted on the first step. The
default value is determined by the solver (when hini = 0
)
9.1.15 maxordn
maxordn
The maximum order to be allowed for the nonstiff
(Adams) method. The default is 12. It can be between 1 and
12.
9.1.16 maxords
maxords
The maximum order to be allowed for the stiff (BDF)
method. The default value is 5. This can be between 1 and 5.
9.1.17 mxhnil
mxhnil
maximum number of messages printed (per problem)
warning that T + H = T
on a step (H
= step size). This must
be positive to result in a non-default value. The default
value is 0 (or infinite).
9.1.18 hmxi
hmxi
inverse of the maximum absolute value of H
to are used.
hmxi = 0.0 is allowed and corresponds to an infinite hmax1 (default).
hminand
hmximay be changed at any time, but will not take effect until the next change of
His considered. This option is only considered with
method=“liblsoda”`.
9.2 Inductive Linerization Options
9.2.1 indLinMatExpType
indLinMatExpType
This is them matrix exponential type that
is use for rxode2. Currently the following are supported:
Al-Mohy
Uses the exponential matrix method of Al-Mohy Higham (2009)arma
Use the exponential matrix from RcppArmadilloexpokit
Use the exponential matrix from Roger B. Sidje (1998)
9.3 Steady State Solving Options
9.3.3 strictSS
strictSS
Boolean indicating if a strict steady-state is
required. If a strict steady-state is (TRUE
) required
then at least minSS
doses are administered and the
total number of steady states doses will continue until
maxSS
is reached, or atol
and rtol
for
every compartment have been reached. However, if ODE solving
problems occur after the minSS
has been reached the
whole subject is considered an invalid solve. If
strictSS
is FALSE
then as long as minSS
has been reached the last good solve before ODE solving
problems occur is considered the steady state, even though
either atol
, rtol
or maxSS
have not
been achieved.
9.3.4 infSSstep
infSSstep
Step size for determining if a constant infusion
has reached steady state. By default this is large value,
12.
9.4 rxode2 numeric stability options
9.4.1 maxAtolRtolFactor
maxAtolRtolFactor
The maximum atol
/rtol
that
FOCEi and other routines may adjust to. By default 0.1
9.4.2 stateTrim
stateTrim
When amounts/concentrations in one of the states
are above this value, trim them to be this value. By default
Inf. Also trims to -stateTrim for large negative
amounts/concentrations. If you want to trim between a range
say c(0, 2000000)
you may specify 2 values with a lower and
upper range to make sure all state values are in the
reasonable range.
9.4.3 safeZero
safeZero
Use safe zero divide and log routines. By default
this is turned on but you may turn it off if you wish.
9.4.4 sumType
sumType
Sum type to use for sum()
in
rxode2 code blocks.
pairwise
uses the pairwise sum (fast, default)
fsum
uses the PreciseSum package’s fsum function (most accurate)
kahan
uses Kahan correction
neumaier
uses Neumaier correction
c
uses no correction: default/native summing
9.5 Linear compartment model sensitivity options
9.5.1 sensType
sensType
Sensitivity type for linCmt()
model:
advan
Use the direct advan solutions
autodiff
Use the autodiff advan solutions
forward
Use forward difference solutions
central
Use central differences
9.5.2 linDiff
linDiff
This gives the linear difference amount for all the
types of linear compartment model parameters where sensitivities
are not calculated. The named components of this numeric vector are:
"lag"
Central compartment lag"f"
Central compartment bioavailability"rate"
Central compartment modeled rate"dur"
Central compartment modeled duration"lag2"
Depot compartment lag"f2"
Depot compartment bioavailability"rate2"
Depot compartment modeled rate"dur2"
Depot compartment modeled duration
9.6 Covariate Solving Options
9.6.1 iCov
iCov
A data frame of individual non-time varying covariates
to combine with the events
dataset by merge.
9.6.2 covsInterpolation
covsInterpolation
specifies the interpolation method for
time-varying covariates. When solving ODEs it often samples
times outside the sampling time specified in events
.
When this happens, the time varying covariates are
interpolated. Currently this can be:
"linear"
interpolation, which interpolates the covariate by solving the line between the observed covariates and extrapolating the new covariate value."constant"
– Last observation carried forward (the default)."NOCB"
– Next Observation Carried Backward. This is the same method that NONMEM uses."midpoint"
Last observation carried forward to midpoint; Next observation carried backward to midpoint.
9.7 Simulation options
9.7.2 nsim
nsim
represents the number of simulations. For rxode2, if
you supply single subject event tables (created with
[eventTable()]
)
9.7.4 thetaLower
thetaLower
Lower bounds for simulated population parameter
variability (by default -Inf
)
9.7.5 thetaUpper
thetaUpper
Upper bounds for simulated population unexplained
variability (by default Inf
)
9.7.6 thetaDf
thetaDf
The degrees of freedom of a t-distribution for
simulation. By default this is NULL
which is
equivalent to Inf
degrees, or to simulate from a normal
distribution instead of a t
-distribution.
9.7.7 thetaIsChol
thetaIsChol
Indicates if the theta
supplied is a
Cholesky decomposed matrix instead of the traditional
symmetric matrix.
9.7.9 omega
omega
Estimate of Covariance matrix. When omega is a list,
assume it is a block matrix and convert it to a full matrix for
simulations. When omega
is NA
and you are using it with a
rxode2
ui model, the between subject variability described by
the omega
matrix are set to zero.
9.7.10 omegaIsChol
omegaIsChol
Indicates if the omega
supplied is a
Cholesky decomposed matrix instead of the traditional
symmetric matrix.
9.7.11 omegaSeparation
omegaSeparation
Omega separation strategy
Tells the type of separation strategy when
simulating covariance with parameter uncertainty with standard
deviations modeled in the thetaMat
matrix.
"lkj"
simulates the correlation matrix from therLKJ1
matrix with the distribution parametereta
equal to the degrees of freedomnu
by(nu-1)/2
"separation"
simulates from the identity inverse Wishart covariance matrix withnu
degrees of freedom. This is then converted to a covariance matrix and augmented with the modeled standard deviations. While computationally more complex than the"lkj"
prior, it performs better when the covariance matrix size is greater or equal to 10"auto"
chooses"lkj"
when the dimension of the matrix is less than 10 and"separation"
when greater than equal to 10.
9.7.12 omegaXform
omegaXform
When taking omega
values from the thetaMat
simulations (using the separation strategy for covariance
simulation), how should the thetaMat
values be turned int
standard deviation values:
identity
This is when standard deviation values are directly modeled by theparams
andthetaMat
matrixvariance
This is when theparams
andthetaMat
simulates the variance that are directly modeled by thethetaMat
matrixlog
This is when theparams
andthetaMat
simulateslog(sd)
nlmixrSqrt
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix with thex\^2
modeled along the diagonal. This only works with a diagonal matrix.nlmixrLog
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix with theexp(x\^2)
along the diagonal. This only works with a diagonal matrix.nlmixrIdentity
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix. This only works with a diagonal matrix.
9.7.15 omegaDf
omegaDf
The degrees of freedom of a t-distribution for
simulation. By default this is NULL
which is
equivalent to Inf
degrees, or to simulate from a normal
distribution instead of a t-distribution.
9.7.16 nSub
nSub
Number between subject variabilities (ETAs
) simulated for every
realization of the parameters.
9.7.17 dfSub
dfSub
Degrees of freedom to sample the between subject variability matrix from the
inverse Wishart distribution (scaled) or scaled inverse chi squared distribution.
9.7.18 sigma
sigma
Named sigma covariance or Cholesky decomposition of a
covariance matrix. The names of the columns indicate
parameters that are simulated. These are simulated for every
observation in the solved system. When sigma
is NA
and you are using it with a
rxode2
ui model, the unexplained variability described by
the sigma
matrix are set to zero.
9.7.21 sigmaXform
sigmaXform
When taking sigma
values from the thetaMat
simulations (using the separation strategy for covariance
simulation), how should the thetaMat
values be turned int
standard deviation values:
identity
This is when standard deviation values are directly modeled by theparams
andthetaMat
matrixvariance
This is when theparams
andthetaMat
simulates the variance that are directly modeled by thethetaMat
matrixlog
This is when theparams
andthetaMat
simulateslog(sd)
nlmixrSqrt
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix with thex\^2
modeled along the diagonal. This only works with a diagonal matrix.nlmixrLog
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix with theexp(x\^2)
along the diagonal. This only works with a diagonal matrix.nlmixrIdentity
This is when theparams
andthetaMat
simulates the inverse cholesky decomposed matrix. This only works with a diagonal matrix.
9.7.22 sigmaDf
sigmaDf
Degrees of freedom of the sigma t-distribution. By
default it is equivalent to Inf
, or a normal distribution.
9.7.23 sigmaIsChol
sigmaIsChol
Boolean indicating if the sigma is in the
Cholesky decomposition instead of a symmetric covariance
9.7.24 sigmaSeparation
sigmaSeparation
separation strategy for sigma;
Tells the type of separation strategy when
simulating covariance with parameter uncertainty with standard
deviations modeled in the thetaMat
matrix.
"lkj"
simulates the correlation matrix from therLKJ1
matrix with the distribution parametereta
equal to the degrees of freedomnu
by(nu-1)/2
"separation"
simulates from the identity inverse Wishart covariance matrix withnu
degrees of freedom. This is then converted to a covariance matrix and augmented with the modeled standard deviations. While computationally more complex than the"lkj"
prior, it performs better when the covariance matrix size is greater or equal to 10"auto"
chooses"lkj"
when the dimension of the matrix is less than 10 and"separation"
when greater than equal to 10.
9.7.25 dfObs
dfObs
Degrees of freedom to sample the unexplained variability matrix from the
inverse Wishart distribution (scaled) or scaled inverse chi squared distribution.
9.7.26 resample
resample
A character vector of model variables to resample
from the input dataset; This sampling is done with replacement.
When NULL
or FALSE
no resampling is done. When
TRUE
resampling is done on all covariates in the input
dataset
9.7.27 resampleID
resampleID
boolean representing if the resampling should be
done on an individual basis TRUE
(ie. a whole patient is
selected) or each covariate is resampled independent of the
subject identifier FALSE
. When resampleID=TRUE
correlations of parameters are retained, where as when
resampleID=FALSE
ignores patient covariate correaltions.
Hence the default is resampleID=TRUE
.
9.8 rxode2 output options
9.8.1 returnType
returnType
This tells what type of object is returned. The
currently supported types are:
"rxSolve"
(default) will return a reactive data frame that can change easily change different pieces of the solve and update the data frame. This is the currently standard solving method in rxode2, is used forrxSolve(object, ...)
,solve(object,...)
,"data.frame"
– returns a plain, non-reactive data frame; Currently very slightly faster thanreturnType="matrix"
"matrix"
– returns a plain matrix with column names attached to the solved object. This is what is usedobject$run
as well asobject$solve
"data.table"
– returns adata.table
; Thedata.table
is created by reference (iesetDt()
), which should be fast."tbl"
or"tibble"
returns a tibble format.
9.8.2 addDosing
addDosing
Boolean indicating if the solve should add rxode2
EVID and related columns. This will also include dosing
information and estimates at the doses. Be default, rxode2
only includes estimates at the observations. (default
FALSE
). When addDosing
is NULL
, only
include EVID=0
on solve and exclude any model-times or
EVID=2
. If addDosing
is NA
the classic
rxode2
EVID events are returned. When addDosing
is TRUE
add the event information in NONMEM-style format; If
subsetNonmem=FALSE
rxode2 will also include extra event types
(EVID
) for ending infusion and modeled times:
EVID=-1
when the modeled rate infusions are turned off (matchesrate=-1
)EVID=-2
When the modeled duration infusions are turned off (matchesrate=-2
)EVID=-10
When the specifiedrate
infusions are turned off (matchesrate>0
)EVID=-20
When the specifieddur
infusions are turned off (matchesdur>0
)EVID=101,102,103,...
Modeled time where 101 is the first model time, 102 is the second etc.
9.8.3 keep
keep
Columns to keep from either the input dataset or the
iCov
dataset. With the iCov
dataset, the column
is kept once per line. For the input dataset, if any records
are added to the data LOCF (Last Observation Carried forward)
imputation is performed.
9.8.5 idFactor
idFactor
This boolean indicates if original ID values
should be maintained. This changes the default sequentially
ordered ID to a factor with the original ID values in the
original dataset. By default this is enabled.
9.8.7 scale
scale
a numeric named vector with scaling for ode
parameters of the system. The names must correspond to the
parameter identifiers in the ODE specification. Each of the
ODE variables will be divided by the scaling factor. For
example scale=c(center=2)
will divide the center ODE
variable by 2.
9.8.8 amountUnits
amountUnits
This supplies the dose units of a data frame
supplied instead of an event table. This is for importing the
data as an rxode2 event table.
9.8.9 timeUnits
timeUnits
This supplies the time units of a data frame
supplied instead of an event table. This is for importing the
data as an rxode2 event table.
9.8.12 from
from
When there is no observations in the event table,
start observations at this value. By default this is zero.
9.8.13 to
to
When there is no observations in the event table, end
observations at this value. By default this is 24 + maximum
dose time.
9.8.14 length.out
length.out
The number of observations to create if there
isn’t any observations in the event table. By default this is 200.
9.8.15 by
by
When there are no observations in the event table, this
is the amount to increment for the observations between from
and to
.
9.9 Internal rxode2 options
9.9.1 nDisplayProgress
nDisplayProgress
An integer indicating the minimum number
of c-based solves before a progress bar is shown. By default
this is 10,000.
9.9.2 simVariability
simVariability
determines if the variability is simulated.
When NA
(default) this is determined by the solver.
9.9.3 …
...
Other arguments including scaling factors for each
compartment. This includes S# = numeric will scale a compartment
# by a dividing the compartment amount by the scale factor,
like NONMEM.
9.9.4 a
a
when using solve()
, this is equivalent to the
object
argument. If you specify object
later in
the argument list it overwrites this parameter.
9.10 Parallel/Threaded Solve
9.10.1 cores
cores
Number of cores used in parallel ODE solving. This
is equivalent to calling [setRxThreads()]
9.10.2 nCoresRV
nCoresRV
Number of cores used for the simulation of the
sigma variables. By default this is 1. To reproduce the results
you need to run on the same platform with the same number of
cores. This is the reason this is set to be one, regardless of
what the number of cores are used in threaded ODE solving.
9.10.3 nLlikAlloc
nLlikAlloc
The number of log likelihood endpoints that are
used in the model. This allows independent log likelihood per
endpoint in focei for nlmixr2. It likely shouldn’t be set,
though it won’t hurt anything if you do (just may take up more
memory for larger allocations).
9.10.4 useStdPow
useStdPow
This uses C’s pow
for exponentiation instead of
R’s R_pow
or R_pow_di
. By default this is FALSE
9.10.5 ss2cancelAllPending
ss2cancelAllPending
When TRUE
the SS=2
event type
cancels all pending doses like SS=1
. When FALSE
the pending
doses not canceled with SS=2
(the infusions started before
SS=2
occurred are canceled, though).
9.10.6 addlKeepsCov
addlKeepsCov
This determines if the additional dosing items
repeats the dose only (FALSE
) or keeps the covariates at the
record of the dose (TRUE
)
9.10.7 addlDropSs
addlDropSs
When there are steady state doses with an addl
specification the steady state flag is dropped with repeated
doses (when TRUE
) or retained (when FALSE
)
9.10.8 ssAtDoseTime
ssAtDoseTime
Boolean that when TRUE
back calculates the
steady concentration at the actual time of dose, otherwise when
FALSE
the doses are shifted
9.10.9 naTimeHandle
naTimeHandle
Determines what time of handling happens when
the time becomes NA
: current options are:
ignore
this ignores theNA
time input and passes it through.warn
(default) this will produce a warning at the end of the solve, but continues solving passing through theNA
timeerror
this will stop this solve if this is not a parallel solved ODE (otherwise stopping can crash R)