# Handling Divergent Trajectories in Global Sensitivity Analysis

**URL:** <https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186>\
**Category:** Specific Domains\
**Tags:** question, diffeq, differentialequation, globalsensitivityjl\
**Created:** [November 27, 2024, 7:54pm UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186 "2024-11-27T19:54:21Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![duodenum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/duodenum/32/36258_2.png) [@duodenum](https://discourse.julialang.org/u/duodenum)\
**Post date:** [November 27, 2024, 7:54pm UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186/1 "2024-11-27T19:54:21Z")

</div>

I am having the following problem in a large parameter space. Let’s say I have two parameters A and B. If I constrain the range of A between 0 and 10 and B between 0 and 5, the sensitivity to A turns out higher. If I do the inverse, sensitivity to B is higher. If I make both of them between 0 and 10, then the solutions to differential equation diverge. I tried putting NaNs to divergent solutions but this impairs the subsequent calculations of sensitivity analysis since the software is not optimized for dealing with NaN values. I can create a minimum working example if needed. Does anybody dealt with a similar problem? I am open for any suggestions.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [November 28, 2024, 1:20am UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186/2 "2024-11-28T01:20:47Z")

</div>

We probably just need to add an option to drop NaNs.

---

<div class="post-metadata">

**Author:** ![duodenum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/duodenum/32/36258_2.png) [@duodenum](https://discourse.julialang.org/u/duodenum)\
**Post date:** [January 3, 2025, 9:15pm UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186/3 "2025-01-03T21:15:58Z")

</div>

I can make a pull request for this. Let’s take Sobol as an example, if I understood the code correctly, we should change the function `gsa_sobol_all_y_analysis` (line 160 in `sobol_sensitivity.jl`):

Currently:

```julia
function gsa_sobol_all_y_analysis(method, all_y::AbstractArray{T}, d, n, Ei_estimator,
        y_size, ::Val{multioutput}) where {T, multioutput}

```

Which should be changed to

```julia
function gsa_sobol_all_y_analysis(method, all_y::AbstractArray{T}, d, n, Ei_estimator,
        y_size, ::Val{multioutput}; dropna=false) where {T, multioutput}
if dropna
    all_y = all_y[.!isnan(all_y)]
end

```

And appropriate modifications to the function `gsa`.

Would that work?

---

<div class="post-metadata">

**Author:** ![duodenum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/duodenum/32/36258_2.png) [@duodenum](https://discourse.julialang.org/u/duodenum)\
**Post date:** [January 3, 2025, 10:54pm UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186/4 "2025-01-03T22:54:35Z")

</div>

Oh sorry, obviously not so trivial since 1) one would also need to handle the design matrices; 2) if multioutput=true, having a matrix makes dropping nans very complicated. I cloned the repo and started fiddling with it. If I can implement this without breaking the existing code, I will get back here.

---

<div class="post-metadata">

**Author:** ![duodenum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/duodenum/32/36258_2.png) [@duodenum](https://discourse.julialang.org/u/duodenum)\
**Post date:** [January 7, 2025, 8:05pm UTC](https://discourse.julialang.org/t/handling-divergent-trajectories-in-global-sensitivity-analysis/123186/5 "2025-01-07T20:05:25Z")

</div>

Follow-up to this: I opened an issue on github page for GlobalSensitivity: [Handling NaNs for divergent trajectories in Sobol Method · Issue #185 · SciML/GlobalSensitivity.jl](https://github.com/SciML/GlobalSensitivity.jl/issues/185). I made a proposal that can possibly remedy the problem but don’t know if my proposal is correct or not.
