Closed FriesischScott closed 2 years ago
Using QMC to compute sobol indices yields very different results based on the method.
using UncertaintyQuantification a = Parameter(7, :a) b = Parameter(0.1, :b) x = RandomVariable.(Uniform(-π, π), [:x1, :x2, :x3]) inputs = [a, b, x...] ishigami = Model( df -> sin.(df.x1) + df.a .* sin.(df.x2) .^ 2 + df.b .* df.x3 .^ 4 .* sin.(df.x1), :f, ) n = 10000 s_mc = sobolindices([ishigami], inputs, :f, MonteCarlo(n)) s_ss = sobolindices([ishigami], inputs, :f, SobolSampling(n)) s_hs = sobolindices([ishigami], inputs, :f, HaltonSampling(n)) s_lhs = sobolindices([ishigami], inputs, :f, LatinHypercubeSampling(n))
Just comparing the first order indices:
[0.3038509495659772, 0.4531211968732472, -0.004581507395695991]
[0.0259111519070014, 0.4290425029042932, 0.21306096653679016]
[0.011524353591864793, 0.3774794907941725, 3.188982809095301e-5]
[0.3114654127984809, 0.43890237167581103, 0.0005408956632518976]
Monte Carlo and LatinHypercube are able to appoximate the analytical solution while Sobol and Halton are nowhere close.
Since LatinHyperCube, Sobol and Halton all go through the same sampling code, it can't be an issue there.
@AnderGray Any idea? I'm at a loss here.
Using QMC to compute sobol indices yields very different results based on the method.
Just comparing the first order indices:
[0.3038509495659772, 0.4531211968732472, -0.004581507395695991]
(Monte Carlo)[0.0259111519070014, 0.4290425029042932, 0.21306096653679016]
(Sobol)[0.011524353591864793, 0.3774794907941725, 3.188982809095301e-5]
(Halton)[0.3114654127984809, 0.43890237167581103, 0.0005408956632518976]
(LatinHypercube)Monte Carlo and LatinHypercube are able to appoximate the analytical solution while Sobol and Halton are nowhere close.
Since LatinHyperCube, Sobol and Halton all go through the same sampling code, it can't be an issue there.
@AnderGray Any idea? I'm at a loss here.