DiffEqSensitivity Parameter ranges

Hi,
I’ve been working with DifferentialEquations Package -
I am ready to run some global sensitivity analysis (GSA)

I noticed that the way to input the ranges of evaluation goes something like this
Let’s say my parameter p=1 and I want to calculate GSA using morris.sensitivity on a logarithmic range between 1/100 and 100

for example-
Let’s say

t = collect(range(0, stop=10, length=20))
p=1
p_range = [p/100, p*100]
psteps =11
# m = DiffEqSensitivity.morris_sensitivity(An_ODE_tProb,Rodas5(),t,p_ranges,p_steps, relative_scale=false)

If I am correct the range on which Morris will be evaluated for p is equivalent to

collect(range(1.0/100, length=11, stop=1.0*100))

11-element Array{Float64,1}:
0.01
10.009
20.008
30.007
40.006
50.005
60.004
70.003
80.002
90.001
100.0

Is this correct?

If this is true consider that a logscale would be a better range to sample through the different
orders of magnitude for the parameter in question-
for example-
something like this

10 .^range(log10(p/100), length=11, stop=log10(p*100))

samples through
11-element Array{Float64,1}:
0.01
0.025118864315095794
0.06309573444801933
0.15848931924611132
0.3981071705534972
1.0
2.51188643150958
6.309573444801933
15.848931924611133
39.810717055349734
100.0

Am I right that the parameter space is divided linearly and not logarithmic?
If so is there a way anyone can think to specify a logarithmic range for the parameter space given that
DiffEqSensitivity.morris_sensitivity takes a list of lower and upper limits and number of steps for each parameter and not a simple list of values?

thanks

A

Actually now that I read this more, it sounds like a feature suggestion. You can just use the exp of the parameter for now if you want it to act like this.

Not sure that would work as the stepping between lower and upper limit will still be linear correct?
My interest is that the sampling between the upper and lower bounds be traveled logarithmically

For example between 10 and 1000 with 3 steps
I’d like to get 10,100,1000 - instead of 10, 505 and 1000

If I do say 10 .^range(1,3,3) for range and
steps = 3
Wouldn’t the function first do the 10 .^ and then divide the interval, leading to the same linear result?

Thanks : )

Enjoy your trip : )

PS- ppl at my work has expressed an interest on having you come for a talk. If that interest you let me know and we can set up something up.

Take care

This could be a good addition, I have created an issue for it here Logarithmic ranges in Morris method · Issue #12 · SciML/GlobalSensitivity.jl · GitHub.

Thanks !

A