All Projects → SciML → StructuralIdentifiability.jl

SciML / StructuralIdentifiability.jl

Licence: MIT license
Fast and automatic structural identifiability software for ODE systems

Programming Languages

julia
2034 projects
JetBrains MPS
11 projects
matlab
3953 projects
objective c
16641 projects - #2 most used programming language
Mathematica
289 projects

Projects that are alternatives of or similar to StructuralIdentifiability.jl

DiffEqParamEstim.jl
Easy scientific machine learning (SciML) parameter estimation with pre-built loss functions
Stars: ✭ 36 (-36.84%)
Mutual labels:  parameter-estimation, differentialequations
AMICI
Advanced Multilanguage Interface to CVODES and IDAS
Stars: ✭ 80 (+40.35%)
Mutual labels:  parameter-estimation, differentialequations
FloBaRoID
Framework for dynamical system identification of floating-base rigid body tree structures
Stars: ✭ 53 (-7.02%)
Mutual labels:  parameter-estimation
pyPESTO
python Parameter EStimation TOolbox
Stars: ✭ 93 (+63.16%)
Mutual labels:  parameter-estimation
modest-py
FMI-compliant Model Estimation in Python
Stars: ✭ 40 (-29.82%)
Mutual labels:  parameter-estimation
QuasiMonteCarlo.jl
Lightweight and easy generation of quasi-Monte Carlo sequences with a ton of different methods on one API for easy parameter exploration in scientific machine learning (SciML)
Stars: ✭ 47 (-17.54%)
Mutual labels:  parameter-estimation
welltestpy
A python-package for handling well based field campaigns.
Stars: ✭ 26 (-54.39%)
Mutual labels:  parameter-estimation
parPE
Parameter estimation for dynamical models using high-performance computing, batch and mini-batch optimizers, and dynamic load balancing.
Stars: ✭ 16 (-71.93%)
Mutual labels:  parameter-estimation
pestpp
tools for scalable and non-intrusive parameter estimation, uncertainty analysis and sensitivity analysis
Stars: ✭ 90 (+57.89%)
Mutual labels:  parameter-estimation
opty
A library for using direct collocation in the optimization of dynamic systems.
Stars: ✭ 71 (+24.56%)
Mutual labels:  parameter-estimation
Differentialequations.jl
Multi-language suite for high-performance solvers of differential equations and scientific machine learning (SciML) components
Stars: ✭ 2,023 (+3449.12%)
Mutual labels:  differentialequations
SciMLBenchmarks.jl
Benchmarks for scientific machine learning (SciML) software and differential equation solvers
Stars: ✭ 195 (+242.11%)
Mutual labels:  differentialequations
DiffEqGPU.jl
GPU-acceleration routines for DifferentialEquations.jl and the broader SciML scientific machine learning ecosystem
Stars: ✭ 131 (+129.82%)
Mutual labels:  differentialequations
DiffEqPhysics.jl
A library for building differential equations arising from physical problems for physics-informed and scientific machine learning (SciML)
Stars: ✭ 46 (-19.3%)
Mutual labels:  differentialequations
DiffEqSensitivity.jl
A component of the DiffEq ecosystem for enabling sensitivity analysis for scientific machine learning (SciML). Optimize-then-discretize, discretize-then-optimize, and more for ODEs, SDEs, DDEs, DAEs, etc.
Stars: ✭ 186 (+226.32%)
Mutual labels:  differentialequations
BoundaryValueDiffEq.jl
Boundary value problem (BVP) solvers for scientific machine learning (SciML)
Stars: ✭ 23 (-59.65%)
Mutual labels:  differentialequations
Sundials.jl
Julia interface to Sundials, including a nonlinear solver (KINSOL), ODE's (CVODE and ARKODE), and DAE's (IDA) in a SciML scientific machine learning enabled manner
Stars: ✭ 167 (+192.98%)
Mutual labels:  differentialequations
DiffEqUncertainty.jl
Fast uncertainty quantification for scientific machine learning (SciML) and differential equations
Stars: ✭ 61 (+7.02%)
Mutual labels:  differentialequations
MultiScaleArrays.jl
A framework for developing multi-scale arrays for use in scientific machine learning (SciML) simulations
Stars: ✭ 63 (+10.53%)
Mutual labels:  differentialequations

StructuralIdentifiability.jl

Join the chat at https://julialang.zulipchat.com #sciml-bridged Global Docs

codecov Build Status

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages SciML Code Style

About

StructuralIdentifiability.jl is a Julia package for assessing structural parameter identifiability of parametric ODE models, both local and global. For an introduction to structural identifiability, we refer to [2].

How to install

The package can be installed from this repository by

using Pkg
Pkg.add("StructuralIdentifiability")

Tutorials and Documentation

For information on using the package, see the stable documentation. Use the in-development documentation for the version of the documentation, which contains the unreleased features.

How to use

The package can be loaded by using StructuralIdentifiability.

Defining a system

A parametric ODE system in the state-space from can be defined by the @ODEmodel macro:

ode = @ODEmodel(
    x1'(t) = -(a01 + a21) * x1(t) + a12 * x2(t) + u(t),
    x2'(t) = a21 * x1(t) - a12 * x2(t) - x3(t) / b,
    x3'(t) = x3(t),
    y(t) = x2(t)
)

In this example:

  • x1(t), x2(t), x3(t) are the state variables, they defined the state of the system and are assumed to be unknown;
  • u(t) is the input/control variable which is assumed to be known and generic (exciting) enough;
  • y(t) is the output variable which is assumed to be observed in the experiments and, thus, known;
  • a01, a21, a12, b are unknown scalar parameters.

Note that there may be mulitple inputs and outputs.

Assessing identifiability

The identifiability of the parameters in the model can be assessed by the assess_identifiability function as follows

assess_identifiability(ode)

The returned value is a dictionary from the parameter of the model to one of the symbols

  • :globally meaning that the parameter is globally identifiable
  • :locally meaning that the parameter is locally but not globally identifiable
  • :nonidentifiable meaning that the parameter is not identifiable even locally.

For example, for the ode defined above, it will be

Dict{Nemo.fmpq_mpoly, Symbol} with 4 entries:
  a12 => :locally
  a21 => :globally
  a01 => :locally
  b   => :nonidentifiable

If one is interested in the identifiability of particular functions of the parameter, one can pass a list of them as a second argument:

assess_identifiability(ode, [a01 + a12, a01 * a12])

This will return a list of the results (i.e., :globally, :locally, or :nonidentifiable). In this example:

2-element Vector{Symbol}:
 :globally
 :globally

Assessing local identifiability

Local identifiability can be assessed efficiently even for the models for which global identifiability analysis is out of reach. Moreover, the package can also assess local observability of the state variables. This can be done using the assess_local_identifiability function, for example:

assess_local_identifiability(ode)

The returned value is a dictionary from parameters and state variables to 1 (is locally identifiable/observable) and 0 (not identifiable/observable) values. In our example:

Dict{Nemo.fmpq_mpoly, Bool} with 7 entries:
  a12 => 1
  a21 => 1
  x3  => 0
  a01 => 1
  x2  => 1
  x1  => 1
  b   => 0

As for assess_identifiability, one can assess local identifiability of arbitrary rational functions in the parameters (and also states) by providing a list of such functions as the second argument.

Remark The algorithms we used are randomized, the default probability of the correctness of the result is 99%, one can change it by changing the value of a keyword argument p to any real number between 0 and 1, for example:

# pobability of correctness 99.9%
assess_identifiability(ode; p = 0.999)

Algorithms

The algorithm used for assessing global identifiability is described in [1]. Local identifiability is assessed using the algorithm by Sedoglavic [4]. We also use some of the algorithms described in [3].

Contacts

Maintained by Gleb Pogudin ([email protected])

References

[1] Ruiwen Dong, Christian Goodbrake, Heather Harrington, and Gleb Pogudin, Differential elimination for dynamical models via projections with applications to structural identifiability, preprint, 2021.

[2] Hongyu Miao, Xiaohua Xia, Alan S. Perelson, and Hulin Wu, On Identifiability of Nonlinear ODE Models and Applications in Viral Dynamics, SIAM Review, 2011.

[3] Alexey Ovchinnikov, Anand Pillay, Gleb Pogudin, and Thomas Scanlon, Computing all identifiable functions for ODE models, preprint, 2020.

[4] Alexandre Sedoglavic, A probabilistic algorithm to test local algebraic observability in polynomial time, Journal of Symbolic Computation, 2002.

Other identifiability software

The following software can be used to assess both local and global identifiability

  • SIAN is written in Maple, there is a Julia version. There is also a webapp with extended functionality.
  • DAISY a package for the Reduce computer algebra system
  • COMBOS, a webapp.

Some benchmarking results for them can be found in this paper.

The following software can be used to assess local identifiability

If your software is not listed here, sorry, we either forgot or did not know about it, feel free to contact Gleb Pogudin.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].