Structural Identifiability and Observability Analysis for Nonlinear Dynamic Models - Data2Dynamics/d2d GitHub Wiki

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.

STRIKE-GOLDD

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.

Initializing the toolbox: arSIAInit

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.

Executing the analysis: arSIA

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.

Options

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

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:

StrucID

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.

Identifiability Test by Radial Penalization

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.