{"id":32157124,"url":"https://github.com/insysbio/likelihoodprofiler.jl","last_synced_at":"2025-10-21T12:43:31.387Z","repository":{"id":61798633,"uuid":"151247208","full_name":"insysbio/LikelihoodProfiler.jl","owner":"insysbio","description":"LikelihoodProfiler is a Julia package for practical identifiability analysis and confidence intervals estimation.","archived":false,"fork":false,"pushed_at":"2025-10-07T00:05:11.000Z","size":6988,"stargazers_count":31,"open_issues_count":12,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-07T02:29:07.375Z","etag":null,"topics":["confidence-intervals","identifiability","identifiability-analysis","julia","likelihood","systems-biology"],"latest_commit_sha":null,"homepage":"https://insysbio.github.io/LikelihoodProfiler.jl/stable","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/insysbio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-10-02T12:00:11.000Z","updated_at":"2025-10-06T12:39:56.000Z","dependencies_parsed_at":"2025-07-25T16:10:20.590Z","dependency_job_id":"6b642c70-8431-4c12-8fd2-718a445b612b","html_url":"https://github.com/insysbio/LikelihoodProfiler.jl","commit_stats":{"total_commits":242,"total_committers":6,"mean_commits":"40.333333333333336","dds":"0.47933884297520657","last_synced_commit":"e7e2670a0c5b2db461df838e0316a8f2eb876006"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/insysbio/LikelihoodProfiler.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insysbio%2FLikelihoodProfiler.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insysbio%2FLikelihoodProfiler.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insysbio%2FLikelihoodProfiler.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insysbio%2FLikelihoodProfiler.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/insysbio","download_url":"https://codeload.github.com/insysbio/LikelihoodProfiler.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insysbio%2FLikelihoodProfiler.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280264161,"owners_count":26300770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["confidence-intervals","identifiability","identifiability-analysis","julia","likelihood","systems-biology"],"created_at":"2025-10-21T12:43:30.090Z","updated_at":"2025-10-21T12:43:31.381Z","avatar_url":"https://github.com/insysbio.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LikelihoodProfiler\n*A package for practical identifiability analysis and confidence intervals (CI) estimation using the profile likelihood approach. The package provides a unified interface for various profile likelihood methods, including optimization-based and integration-based profiles, CI endpoints search, and more.*\n\n[![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://insysbio.github.io/LikelihoodProfiler.jl/stable/)\n[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://insysbio.github.io/LikelihoodProfiler.jl/latest)\n[![Build Status](https://github.com/insysbio/LikelihoodProfiler.jl/actions/workflows/CI.yml/badge.svg?branch=master)](https://github.com/insysbio/LikelihoodProfiler.jl/actions/workflows/CI.yml?query=branch%3Amaster)\n[![codecov](https://codecov.io/gh/insysbio/LikelihoodProfiler.jl/graph/badge.svg)](https://codecov.io/gh/insysbio/LikelihoodProfiler.jl)\n\n## Installation\n\nIn Julia terminal run the following command:\n\n```julia\nimport Pkg; Pkg.add(\"LikelihoodProfiler\")\n```\n\n## Breaking changes and new features\n\n**NOTE:** version 1.2.0 introduces profiling **functions of parameters** while keeping a single `ProfileLikelihoodProblem` interface. To make this possible (and more consistent with `Optimization.jl`), we made a few **breaking adjustments**.\n\n  • `idxs` moved from `solve(…; idxs=…)` to the problem constructor. You now select which parameters to profile when building the `ProfileLikelihoodProblem`.\n\n  • `profile_range` (positional) was argument replaced by `profile_lower / profile_upper` (keywords). This mirrors `Optimization.jl`’s style and avoids confusion with `optprob.lb/optprob.ub`.\n\n### Migrating your code\n\n1) Parameter profiling\n\nBefore (≤ 1.1.x):\n```julia\nplprob = ProfileLikelihoodProblem(optprob, optpars, profile_range)  # e.g. [(-5,5), (-2,2), …]\nsol = solve(plprob, method; idxs=[1,3])\n```\n\nAfter (≥ 1.2.0):\n```julia\n# Pass indices and profile bounds at construction.\nplprob = ProfileLikelihoodProblem(optprob, optpars;\n                                  idxs=[1,3],\n                                  profile_lower=[-5.0, -1.0],\n                                  profile_upper=[ 2.0,  4.0])\n\nsol = solve(plprob, method)  # no `idxs` here anymore\n```\n  • If you omit `profile_lower/profile_upper`, and your `OptimizationProblem` has `lb/ub`, they will be used (sliced by `idxs`).\n\n1) Function profiling (new)\n```julia\ng1 = OptimizationFunction((θ,p)-\u003eθ[1] + θ[2])\ng2 = OptimizationFunction((θ,p)-\u003eθ[2] - θ[3])\n\nplprob = ProfileLikelihoodProblem(optprob, optpars, [g1,g2];\n                                  profile_lower=-2.0,    # scalars expand per target\n                                  profile_upper= 2.0)\n\nsol = solve(plprob, method)\n```\n\n## Getting started with LikelihoodProfiler\n\nTo define a profile likelihood problem `ProfileLikelihoodProblem` in LikelihoodProfiler, you should provide the objective function (usually negative log likelihood) and the optimal values of the parameters that correspond to the minimum of the objective function. LikelihoodProfiler relies on the `Optimization.jl` interface, and `ProfileLikelihoodProblem` is built on top of the `OptimizationProblem` defined in `Optimization.jl`. This can be best illustrated by an example.\n\nFirst we define the `OptimizationProblem` and solve it with the preferred optimizer to obtain the optimal values of the parameters. \n\n```julia\nusing Optimization, ForwardDiff\n\n# objective function\nrosenbrock(x,p) = (1.0 - x[1])^2 + 100.0*(x[2] - x[1]^2)^2\n\n# initial values\nx0 = zeros(2)\n\n# solving optimization problem\noptf = OptimizationFunction(rosenbrock, AutoForwardDiff())\noptprob = OptimizationProblem(optf, x0)\nsol = solve(optprob, Optimization.LBFGS())\n```\n\n### Profile likelihood problem interface\n\nTo define the `ProfileLikelihoodProblem`, we need the `OptimizationProblem` and the optimal values of the parameters. We can also set the profiling domain with the `profile_lower`, `profile_upper` arguments, indicies of parameters to profile with `idxs` and the `threshold`, which is the confidence level required to estimate confidence intervals. Please consult `?ProfileLikelihoodProblem` on the details of the interface.\n\n```julia\nusing LikelihoodProfiler, Plots\n\n# optimal values of the parameters\noptpars = sol.u\n\n# profile likelihood problem\nplprob = ProfileLikelihoodProblem(optprob, optpars; profile_lower = -10., profile_upper=10., threshold = 4.0)\n```\n\n### Profile likelihood methods\n\nLikelihoodProfiler provides a range of methods to profile likelihood functions and explore practical identifiability. The most common and simple \"profiler\" is the `OptimizationProfiler` method. It is based on stepwise re-optimization of the likelihood function with the constraint on the parameter (or function) of interest. We define the method and run the `solve` procedure. Please consult `?solve` on the details of the interface.\n\n```julia\nmethod = OptimizationProfiler(optimizer = Optimization.LBFGS(), stepper = FixedStep(; initial_step=0.15))\nsol = solve(plprob, method)\nplot(sol, size=(800,300), margins=5Plots.mm)\n```\n![Rosenbrock optimization-based profile](https://github.com/insysbio/LikelihoodProfiler.jl/blob/master/docs/assets/rosenbrock_optimization.png)\n\nThe same `solve` interface can be used with other profiling methods. For example, a more advanced way to compute profiles is proposed by `IntegrationProfiler`. It obtains the profiles as solutions to the differential equation system. To solve this internally generated system, we need to provide a differential equations solver (`integrator`). \n\n```julia\nusing OrdinaryDiffEq\n\nmethod = IntegrationProfiler(integrator = Tsit5(), integrator_opts = (dtmax=0.3,), matrix_type = :hessian)\nsol = solve(plprob, method)\nplot(sol, size=(800,300), margins=5Plots.mm)\n```\n![Rosenbrock integration-based profile](https://github.com/insysbio/LikelihoodProfiler.jl/blob/master/docs/assets/rosenbrock_integration.png)\n\nLikelihood profiling is mostly performed to assess if the profile has intersections with the given confidence level, hence if the parameter (or function of parameters) has finite confidence interval. Another approach to the problem of practical identifiability is to compute these intersections (endpoints of the confidence interval (CI)) without restoring the full shape of the profile. One of such methods is implemented in `CICOProfiler`. It estimates CI endpoints with an optimization procedure without following the exact trajectory of the profile. \n\n```julia\nusing CICOBase\n\nmethod = CICOProfiler(optimizer = :LN_NELDERMEAD, scan_tol = 1e-4)\nsol = solve(plprob, method)\nplot(sol, size=(800,300), margins=5Plots.mm)\n```\n![Rosenbrock CICO profile](https://github.com/insysbio/LikelihoodProfiler.jl/blob/master/docs/assets/rosenbrock_cico.png)\n\n## Related packages\n\nOther implementations of the profile likelihood approach in Julia include:\n- [ProfileLikelihood.jl](https://github.com/DanielVandH/ProfileLikelihood.jl) implements fixed-step optimization-based profiles and supports bivariate profile likelihoods.\n- [InformationalGeometry.jl](https://github.com/RafaelArutjunjan/InformationGeometry.jl) implements various methods to study likelihood functions (including profile likelihood) using the tools of differential geometry.\n\nThere are also well-known profile likelihood implementations in other languages, namely: [Data2Dynamics](https://github.com/Data2Dynamics/d2d), [dMod](https://github.com/dkaschek/dMod/), [pyPESTO](https://github.com/ICB-DCM/pyPESTO), [sbioparametersci](https://www.mathworks.com/help/simbio/ref/sbioparameterci.html)\n\n## Citation\n\nBorisov I., Metelkin E. An Algorithm for Practical Identifiability Analysis and Confidence Intervals Evaluation Based on Constrained Optimization. 2018. October. ICSB2018. https://doi.org/10.13140/RG.2.2.18935.06563\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsysbio%2Flikelihoodprofiler.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsysbio%2Flikelihoodprofiler.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsysbio%2Flikelihoodprofiler.jl/lists"}