Skip to contents

Computes the expected Fisher information matrix of the unknown parameters for one typical individual (or n individuals with the same design), given the sampling times, the parameter values and the residual error model. The output sensitivities are obtained by solving the forward sensitivity equations with rxode2. Because the residual standard deviation may depend on the prediction (proportional error), the information includes the term from the variance as well as the term from the mean.

Usage

practical_identifiability(
  m,
  design,
  values,
  error = residual_error(prop = 0.1),
  inputs = list(),
  n = 1,
  events = NULL,
  rse_limit = 30,
  rtol = 1e-10,
  atol = 1e-12
)

Arguments

m

A pkident_model from pkpd_model().

design

Sampling times: a numeric vector used for every output, or a named list with one vector per output.

values

Named numeric vector with a value for every parameter and every known constant of the model.

error

A residual_error() used for every output, or a named list with one per observed output.

inputs

For models with known input signals, a named list of character expressions in time t, for example list(Cp = "10*exp(-0.2*t)").

n

Number of individuals with the same design (the information is multiplied by n).

events

Optional dosing event table (a data frame with columns time, amt, cmt and optionally rate), for example repeated infusions. It replaces the doses of the model definition; dose amounts and rates must be known.

rse_limit

RSE (%) above which a parameter is unresolved.

rtol, atol

Solver tolerances.

Value

An object of class pkident_practical. Use as_table() with "parameters", "directions" or "correlation".

Details

The result reports, for each parameter, the expected standard error and relative standard error (RSE, %), the correlation matrix, and the eigen-decomposition of the information matrix on the log-parameter scale: the weakest directions show which combinations of parameters the design determines poorly, and the condition number summarises how poorly.

Statuses:

  • identifiable: the RSE is finite and at most rse_limit.

  • non_identifiable: the information matrix is singular in a direction involving the parameter; the design cannot determine it (structurally or because of too few samples).

  • unresolved: the RSE is finite but above rse_limit. The expected information is a local, linear approximation that is unreliable when uncertainty is this large; examine likelihood profiles instead.

The default limit of 30% comes from the validation by repeated estimation on simulated data (validation/fim-simulation.R): with every RSE below about 15%, expected and observed RSEs agreed within 10%; with RSEs of 30-40%, estimates had skewed tails and the expected RSEs underestimated the spread, including that of a parameter whose own expected RSE was small. When any parameter is unresolved, the printed result therefore warns that the RSEs of all parameters are approximate.

Doses are those in the model (bolus doses at time zero and constant-rate infusions), whose amounts and rates are known constants supplied in values, or those of an event table given in events.

Examples

m <- reference_model("A3")
p <- practical_identifiability(
  m,
  design = c(0.5, 1, 2, 4, 8, 12, 24),
  values = c(ka = 1, CL = 2, V = 20, DOSE = 100),
  error = residual_error(add = 0.05, prop = 0.1)
)
p
#> <pkident practical identifiability>
#> Expected Fisher information for 1 individual(s), 7 observations each; LOCAL (linear) approximation.
#> Condition number (log scale): 16.6
#>   CL           RSE      5.0%  identifiable
#>   V            RSE      8.2%  identifiable
#>   ka           RSE     16.0%  identifiable
#> Weakest direction: +0.91 log(ka) +0.40 log(V) (expected SD on log scale 0.173)