Functions to Assess Identifiability
Assessing All Types of Identifiability
StructuralIdentifiability.assess_identifiability — Functionassess_identifiability(ode; funcs_to_check = [], prob_threshold=0.99, loglevel=Logging.Info)Input:
ode- the ODE modelfuncs_to_check- list of functions to check identifiability for; if empty, all parameters and states are takenknown_ic: a list of functions whose initial conditions are assumed to be known, then the returned identifiable functions will be functions of parameters and initial conditions, not states (this is an experimental functionality).prob_threshold- probability of correctness.loglevel- the minimal level of log messages to display (Logging.Infoby default)
Assesses identifiability of a given ODE model. The result is guaranteed to be correct with the probability at least prob_threshold. The function returns an (ordered) dictionary from the functions to check to their identifiability properties (one of :nonidentifiable, :locally, :globally).
Assessing Local Identifiability
StructuralIdentifiability.assess_local_identifiability — Functionassess_local_identifiability(ode::ODE{P}; funcs_to_check::Array{<: Any, 1}, prob_threshold::Float64=0.99, type=:SE, loglevel=Logging.Info) where P <: MPolyRingElem{Nemo.QQFieldElem}Checks the local identifiability/observability of the functions in funcs_to_check. The result is correct with probability at least prob_threshold.
Call this function if you have a specific collection of parameters of which you would like to check local identifiability.
type can be either :SE (single-experiment identifiability) or :ME (multi-experiment identifiability). If the type is :ME, states are not allowed to appear in the funcs_to_check.
assess_local_identifiability(dds::DDS{P}; funcs_to_check::Array{<: Any, 1}, known_ic, prob_threshold::Float64=0.99, loglevel=Logging.Info) where P <: MPolyRingElem{Nemo.QQFieldElem}Checks the local identifiability/observability of the functions in funcs_to_check. The result is correct with probability at least prob_threshold. A list of quantities can be provided as known_ic for which the initial conditions can be assumed to be known and generic.
Finding Identifiable Functions
StructuralIdentifiability.find_identifiable_functions — Functionfind_identifiable_functions(ode::ODE; options...)Finds all functions of parameters/states that are identifiable in the given ODE system.
Options
This functions takes the following optional arguments:
with_states: Whentrue, also reports the identifiabile functions in the ODE states. Default isfalse.simplify: The extent to which the output functions are simplified. Stronger simplification may require more time. Possible options are::standard: Default simplification.:weak: Weak simplification. This option is the fastest, but the output functions can be quite complex.:strong: Strong simplification. This option is the slowest, but the output
:absent: No simplification.
known_ic: a list of functions whose initial conditions are assumed to be known, then the returned identifiable functions will be functions of parameters and initial conditions, not states (this is an experimental functionality).prob_threshold: A float in the range from 0 to 1, the probability of correctness. Default is0.99.seed: The rng seed. Default value is42.loglevel- the minimal level of log messages to display (Logging.Infoby default)
Example
using StructuralIdentifiability
ode = @ODEmodel(
x0'(t) = -(a01 + a21) * x0(t) + a12 * x1(t),
x1'(t) = a21 * x0(t) - a12 * x1(t),
y(t) = x0(t)
)
find_identifiable_functions(ode)
# prints
3-element Vector{AbstractAlgebra.Generic.FracFieldElem{Nemo.QQMPolyRingElem}}:
a12 + a01 + a21
a12*a01