This repository contains a Julia implementation of methods described in "Invariant Image Reparameterisation: A Unified Approach to Structural and Practical Identifiability and Model Reduction". A preprint is available from arxiv.org/abs/2502.04867.
The code implements methods for
- Analysing structural and practical parameter identifiability in mathematical models in a unified way
- Finding identifiable and nonidentifiable nonlinear (monomial) parameter combinations
- Model reparameterisation techniques based on identifiable/nonidentifiable parameter combinations
- Profile likelihood, in the form of Profile-Wise Analysis (PWA), for uncertainty quantification for both parameters and predictions
This package requires Julia 1.0 or higher. Install the required packages:
using Pkg
Pkg.add([
"Distributions",
"ForwardDiff",
"LaTeXStrings",
"Measures",
"NLopt",
"Plots"
])
This package also uses the following standard libraries:
LinearAlgebra
SparseArrays
The codebase is organized as:
ReparamTools.jl
- The primary module that users interact with, providing the interface for parameter transformations, identifiability analysis, and likelihood-based inference
transport_model.jl
- Demonstration of parameter identifiability analysis for a transport model (diffusive flow in composite medium)mm_model.jl
- Example using the Michaelis-Menten/Monod modelstat_model.jl
- Simple statistical model example
core.jl
- Internal implementation of likelihood and identifiability methodsparameterizations.jl
- Implementation of parameter transformation methodsutils.jl
- Common utility functions and helpersvisualization.jl
- Internal plotting and visualization tools
Basic model setup (using the simple stat_model.jl as an example):
include("../ReparamTools.jl") # Assuming working in examples directory
using .ReparamTools
# Define model through auxiliary mapping (maps parameters to data distribution parameters)
ϕ_xy = xy -> [xy[1]*xy[2], xy[2]]
# Create distribution mapping (specifies how distribution depends on parameters)
distrib_xy = xy -> Normal(ϕ_xy(xy)[1], sqrt(ϕ_xy(xy)[1]*(1-ϕ_xy(xy)[2])))
# Construct likelihood using data
lnlike_xy = construct_lnlike_xy(distrib_xy, data)
See the example files for complete analyses including identifiability analysis, model reduction, parameter combinations, and inference.
The repository includes several examples demonstrating the methods:
-
Statistical Model Example (
stat_model.jl
)- Demonstrates basic structural and practical parameter identifiability analysis for model with scalar output
-
Transport Model (
transport_model.jl
)- Demonstrates basic structural and practical parameter identifiability analysis for model with vector output on a fine grid and coarser observation grid
- Includes predictive uncertainty quantification
-
Michaelis-Menten Model (
mm_model.jl
)- Similar to diffusion example but includes the use of an ODE solver as part of model definition
Each example includes:
- Model definition
- Identifiability analysis
- Parameter transformations
- Profile likelihood calculations
- Visualisation of results
This project is licensed under the MIT License - see the LICENSE file for details