IshigamiSensitivity

class IshigamiSensitivity(a=7.0, b=0.1)

Class to define a Ishigami sensitivity benchmark problem.

Methods

ComputeIndices(a, b)

Compute the exact Sobol' indices of the Ishigami test case.

getFirstOrderIndices()

Returns the first order Sobol' sensitivity indices.

getFunction()

Returns the function.

getInputDistribution()

Returns the input distribution.

getName()

Returns the name of the problem.

getTotalOrderIndices()

Returns the total order Sobol' sensitivity indices.

__init__(a=7.0, b=0.1)

Create a Ishigami sensitivity problem.

The function is defined by the equation:

g(\boldsymbol{x}) = \sin(x_1) + a \, \sin^2(x_2) + b \, x_3^4 \, \sin(x_1)

for any \boldsymbol{x} \in [-\pi, \pi]^3, where a, b are parameters. We assume that X_1, X_2, X_3 \sim \mathcal{U}([- \pi, \pi]). The input random variables are independent.

Parameters:
afloat

The first parameter.

bfloat

The second parameter.

Notes

The dimension of this problem cannot be changed, but its parameters can. The Sobol’ sensitivity indices are computed from the values of the parameters.

The distribution of the output of the Ishigami function has two modes.

The expectation and the variance of Y are

\Expect{Y}  = \frac{a}{2}

and:

\Var{Y} = \frac{1}{2} +  \frac{a^2}{8} +  \frac{b^2 \pi^8}{18} +  \frac{b\pi^4}{5}.

The Sobol’ decomposition variances are

V_1     = \frac{1}{2} \left(1 + b\frac{\pi^4}{5} \right)^2, \qquad
V_2     = \frac{a^2}{8}, \qquad
V_{1,3} = b^2 \pi^8 \frac{8}{225}

and V_3=V_{1,2} = V_{2,3}=V_{1,2,3} = 0.

This leads to the following first order Sobol’ indices:

S_1 = \frac{V_1}{\Var{Y}}, \qquad S_2 = \frac{V_2}{\Var{Y}}, \qquad
S_3 = 0,

and the following total order indices:

ST_1 = \frac{V_1+V_{1,3}}{\Var{Y}}, \qquad ST_2 = S_2, \qquad
ST_3 = \frac{V_{1,3}}{\Var{Y}}.

The first order indice of X_3 is equal to zero and the total order indice of X_3 is strictly positive: the variable X_3 has an influence on the output only through its interaction with X_1.

The detailed analysis is the following:

  • The variable X_1 has a total indice close to 0.6 has the highest impact on the output variability, by X_1 on its own or by its interactions with other variables. Indeed, its first order indice is close to 0.3, which implies that interactions of X_1 with other variables are involved in 0.6 - 0.3 = 0.3 of the variability of the output.

  • The variable X_2 has a first order indice approximately equal to 0.4, which is close to the total order indice. This shows that this variable does not interact with other variables.

  • The variable X_3 has a first order indice equal to zero. Since its total order indice is approximately equal to 0.3, this shows that its impact on the output is only through its interaction with X_1.

The function was first introduced in (Ishigami & Homma, 1990).

References

  • Ishigami, T., & Homma, T. (1990, December). An importance quantification technique in uncertainty analysis for computer models. In Uncertainty Modeling and Analysis, 1990. Proceedings., First International Symposium on (pp. 398-403). IEEE.

  • Sobol’, I. M., & Levitan, Y. L. (1999). On the use of variance reducing multipliers in Monte Carlo computations of a global sensitivity index. Computer Physics Communications, 117(1), 52-61.

  • “Sensitivity analysis in practice”, Saltelli, Tarantolla, Compolongo, Ratto, Wiley, 2004

Examples

>>> import otbenchmark as otb
>>> problem = otb.IshigamiSensitivity()
static ComputeIndices(a, b)

Compute the exact Sobol’ indices of the Ishigami test case.

Parameters:
afloat

The first parameter.

bfloat

The second parameter.

Returns:
exactdict

The exact expectation, variance, first order Sobol’ indices, total order Sobol’ indices.

getFirstOrderIndices()

Returns the first order Sobol’ sensitivity indices.

Parameters:
None.
Returns:
firstOrderIndices: ot.Point

The first order sensitivity indices.

getFunction()

Returns the function.

Parameters:
None.
Returns:
function: ot.Function

The function.

getInputDistribution()

Returns the input distribution.

Parameters:
None.
Returns:
distribution: ot.Distribution

The distribution.

getName()

Returns the name of the problem.

Parameters:
None.
Returns:
name: str

The name.

getTotalOrderIndices()

Returns the total order Sobol’ sensitivity indices.

Parameters:
None.
Returns:
totalOrderIndices: ot.Point

The total order sensitivity indices.