-
Notifications
You must be signed in to change notification settings - Fork 28
Structural Identifiability and Observability Analysis for Nonlinear Dynamic Models
Different methods are available within the framework to analyze structural identifiability of a model. Here the use of a Lie-Derivative based method (STRIKE-GOLDD, no data needed), a method based on the sensitivity matrix (StrucID, no data needed) and a fast, data-based idea (Identifiability Test by Radial Penalization) is explained.
This toolbox is based on the STRIKE-GOLDD v3.0. The toolbox analyses the local structural identifiability and observability of nonlinear dynamic models, which can have multiple time-varying and possibly unknown inputs. It can also be used to find the symmetries in the model equations that lead to lack of identifiability or observability and to automatically reparameterize the model in order to remove those symmetries.
To use the toolbox, the model and data should be loaded and compiled. after the arCompileAll
command you may initialize the structural identifiability analysis by
arSIAInit(m)
where m is the model number.
Having initialized the toolbox you may execute the analysis by
arSIA
You can also execute arSIA
without initialization. In this case, the default value for model one will be applied.
After initializing the toolbox a new field will be added to ar structure, ar.ia
.
You can change the default setting in ar.ia.opts
. for more information concerning the option see the STRIKE-GOLDD user manual. After changing the options you may execute arSIA
.
Auto reparametrization is disabled by default. If you would like to run in the auto reparametization mode for repairing the model, you should turn it on by the following command after the initialization step.
ar.ia.opts.autoRepar=1;
More information on the theory of finding and breaking Lie symmetries can be found here:
- Gemma Massonis and Alejandro F. Villaverde Finding and Breaking Lie Symmetries: Implications for Structural Identifiability and Observability in Biological Modelling. Symmetry 12(3), 469, 2020.
This method is based on sensitivity matrix analysis and it's theory can be found here (https://doi.org/10.1016/j.automatica.2015.05.004). The method performs fast analysis and can take models with known or unknown analytic input functions and gives the parameter set that causes a model to be structurally non-identifiable as a result.
To use the toolbox, the model and data should be loaded and compiled. after the arCompileAll
command the analysis can be performed by:
WriteStrucIDModel(modelname)
m = StrucIDreadmodel(modelname)
StrucIDanalysis(m)
The first line creates a .txt-file that contains the model structure in the needed format, but is easily readable, so it can be checked and changed if needed. The second line initializes the analysis and the third line gives the analysis and prints the results to the terminal, but also shows the graphical interpretation, so one can check for numerical issues.
This method is fit-based, so a sufficient fit to the data is needed be fore the analysis. The underlying theory is explained here: https://doi.org/10.1093/bioinformatics/bty035
The analysis is implemented in the framework as one of the standard functions and can be called via arIdentifiabilityTest(silent, radius, nfit, doFittingFirst)
. silent prevents the command-line output, radius determines the target radius, nfit gives the number of initial guesses and if doFitting is set, a normal fit is calculated first.
- Installation and system requirements
- Setting up models
- First steps
- Advanced events and pre-equilibration
- Computation of integration-based prediction bands
- How is the architecture of the code and the most important commands?
- What are the most important fields of the global variable ar?
- What are the most important functions?
- Optimization algorithms available in the d2d-framework
- Objective function, likelhood and chi-square in the d2d framework
- How to set up priors?
- How to set up steady state constraints?
- How do I restart the solver upon a step input?
- How to deal with integrator tolerances?
- How to implement a bolus injection?
- How to implement washing and an injection?
- How to implement a moment ODE model?
- How to run PLE calculations on a Cluster?