Skip to content

Possible problem with analytic results for Sobol G-function  #335

@QianWanghhu

Description

@QianWanghhu

Hi,

I was trying to calculate the analytical total sensitivity index for Sobol G-function using the default values for a ([0, 1, 4.5, 9, 99, 99, 99, 99]). These values appear to come from Sobol et al (2007; DOI: 10.1016/j.ress.2006.07.001). But the results from SALib do not match the analytical values given in the paper.

I can get matching results with Sobol et al. using the formula from Saltelli et al., (2010; https://doi.org/10.1016/j.cpc.2009.09.018) but this formula appears different to the one used in SALib for the Sobol G-function, see Table below.

Factor Analytic Values from Sobol 2007 SALib My calculation using Saltelli 2010
1 0.787 7.898277850460805327e-01 7.871441266592746899e-01
2 0.242 2.526836583868056207e-01 2.421981928182383448e-01
3 0.034 9.731139034486657735e-02 3.431691015408282197e-02
4 0.010 8.079753785583765335e-02 1.046038706523952887e-02
5 1.05e-04 7.370723538393519902e-02 1.049490519195059676e-04
6 1.05e-04 7.370723538393519902e-02 1.049490519195059676e-04
7 1.05e-04 7.370723538393519902e-02 1.049490519195059676e-04
8 1.05e-04 7.370723538393519902e-02 1.049490519195059676e-04

I am unable to find which method SALib is using to calculate the analytic values.

Here is the code I used:

a = [0, 1, 4.5, 9, 99, 99, 99, 99]
vd = np.array([1/3/ (i +1)**2 for i in a])
vtd = np.zeros(vd.shape[0])
total_vtd = np.prod([i + 1 for i in vd])
for i in range(vtd.shape[0]):
    vtd[i] = vd[i] * total_vtd / (vd[i] + 1) / _total_variance(a)

_total_variance() is the same one as found in SALib

Best wishes,
Qian

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions