Skip to contents

Decides local structural identifiability of the unknown parameters of a pkpd_model() with two independent methods.

Usage

structural_identifiability(
  m,
  method = c("both", "lie", "sensitivity"),
  points = 5L,
  seed = 1L,
  max_order = NULL,
  plateau = 3L,
  tol = 1e-07,
  max_seconds = 300,
  max_exponent = 2L,
  max_support = 4L,
  times = NULL,
  sens_tol = 1e-07,
  rtol = 1e-10,
  atol = 1e-12
)

Arguments

m

A pkident_model from pkpd_model().

method

"both" (Lie method checked by sensitivities), "lie" or "sensitivity".

points

Number of random parameter points.

seed

Random seed for the points (the global random state is restored).

max_order

Highest derivative order of the Lie method. By default the number of parameters plus the number of states plus two, capped at 14.

plateau

Number of consecutive orders without a rank increase needed to conclude rank deficiency (Lie method).

tol

Relative singular value below which a direction counts as null (Lie method).

max_seconds

Time limit of the Lie method; beyond it the result is unresolved.

max_exponent, max_support

Search limits for monomial combinations.

times

Time grid of the sensitivity method. By default 0 and 150 log-spaced times from 0.001 to 200, which covers the rate constants implied by the random parameter points (between 0.2 and 5).

sens_tol

Relative singular value below which a direction counts as null (sensitivity method).

rtol, atol

Solver tolerances of the sensitivity method.

Value

An object of class pkident_structural. Use as_table() to extract the "parameters", "combinations", "rank" (Lie method) and "agreement" (comparison of the methods at each point) tables.

Details

Lie method (primary). The outputs are differentiated along the model (Lie derivatives), with known input signals contributing their own time derivatives, and evaluated at the known initial state at time zero (the Taylor-series approach). The parameters are locally identifiable if the Jacobian of these output derivatives with respect to the parameters has full rank. Using the known initial state matters for pharmacokinetic models: a bolus dose fixes the initial amount, which is often what makes a volume identifiable. Methods that evaluate the rank at generic initial states ignore this information.

Sensitivity method (numerical check). The forward sensitivity equations are generated symbolically and solved with rxode2 at the same parameter points; known input signals are replaced by a smooth random signal. The rank of the noise-free output sensitivity matrix on a dense time grid is compared with the Lie rank, and the null spaces of the two methods are compared at every point.

With method = "both" (the default), a decision is made only if the two methods agree at every point; otherwise the result is unresolved. Ranks are evaluated at several random parameter points on a log scale, and a decision is made only if all points agree.

Rank-deficient parameters are reported with the directions along which they can change together without changing the outputs. Where these directions correspond to products of powers of parameters (for example V/F), the identifiable combinations are reported.

Decisions are local: a parameter reported as identifiable may still have a finite number of alternative values elsewhere in parameter space (for example the flip-flop of absorption and elimination rates).

Examples

r <- structural_identifiability(reference_model("A2"), method = "lie")
r
#> <pkident structural identifiability>
#> Decision is LOCAL (Lie derivatives at the known initial state up to order 8; 5 random points).
#>   CL           combination_only
#>   F            combination_only
#>   V            combination_only
#>   ka           identifiable
#> Identifiable combinations:
#>   CL/F
#>   CL/V
as_table(r, "combinations")
#> # A tibble: 2 × 2
#>   combination parameters
#>   <chr>       <chr>     
#> 1 CL/F        CL,F      
#> 2 CL/V        CL,V