FieldFunctionalChaosSobolIndices

class FieldFunctionalChaosSobolIndices(*args)

Sobol indices from a functional decomposition.

This class allows one to perform sensitivity analysis from field chaos decomposition. The process decomposition is done by Karhunen-Loeve and the modes interpolation is performed by functional chaos:

\tilde{g}(x) = \sum_{k \in K_c} \beta_{\vect{\alpha}_k} \Psi_{\vect{\alpha}_k}(x)

Let us expand the multi indices notation:

\Psi_{\vect{\alpha}}(x) = \prod_{j=1}^{K_T} P^j_{\alpha_j}(x_j)

with

\vect{\alpha} \in \mathbb{N}^{K_T} = \{\underbrace{\alpha_1, \dots, \alpha_{K_1}}_{K_1},\dots,\underbrace{\alpha_{K_T-K_d}, \dots, \alpha_{K_T}}_{K_d}\}

see FunctionalChaosAlgorithm for details.

Sobol indices of the input field component j \in [1,d] can be computed from the coefficients of the chaos decomposition that involve the matching Karhunen-Loeve coefficients.

For the first order Sobol indices we sum over the multi-indices \vect{\alpha}_k that are non-zero on the K_j indices corresponding to the Karhunen-Loeve decomposition of j-th input and zero on the other K_T - K_j indices (noted G_j):

S_j = \frac{\sum_{k=1, \vect{\alpha}_k \in G_j}^{K_c} \beta_{\vect{\alpha}_k}^2}{\sum_{k=1}^{K_c} \beta_{\vect{\alpha}_k}^2}

For the total order Sobol indices we sum over the multi-indices \vect{\alpha}_k that are non-zero on the K_j indices corresponding to the Karhunen-Loeve decomposition of the j-th input (noted GT_j):

S_{T_j} = \frac{\sum_{k=1, \vect{\alpha}_k \in GT_j}^{K_c} \beta_{\vect{\alpha}_k}^2}{\sum_{k=1}^{K_c} \beta_{\vect{\alpha}_k}^2}

This generalizes to higher order indices.

Parameters:
resultopenturns.FieldFunctionalChaosResult

Result.

Methods

draw([marginalIndex])

Draw sensitivity indices.

getClassName()

Accessor to the object's name.

getFirstOrderIndices([marginalIndex])

Get the first order Sobol indices.

getName()

Accessor to the object's name.

getSobolIndex(*args)

Get a single Sobol index.

getSobolTotalIndex(*args)

Get a single Sobol index.

getTotalOrderIndices([marginalIndex])

Get the total order Sobol indices.

hasName()

Test if the object is named.

setName(name)

Accessor to the object's name.

Examples

>>> import openturns as ot
>>> ot.RandomGenerator.SetSeed(0)
>>> mesh = ot.RegularGrid(0.0, 0.1, 20)
>>> cov = ot.KroneckerCovarianceModel(ot.MaternModel([2.0], 1.5), ot.CovarianceMatrix(4))
>>> X = ot.GaussianProcess(cov, mesh)
>>> x = X.getSample(500)
>>> y = []
>>> for xi in x:
...     m = xi.computeMean()
...     y.append([m[0] + m[1] + m[2] - m[3] + m[0] * m[1] - m[2] * m[3] - 0.1 * m[0] * m[1] * m[2]])
>>> algo = ot.FieldToPointFunctionalChaosAlgorithm(x, y)
>>> algo.setThreshold(4e-2)
>>> # Temporarily lower the basis size for the sake of this example.
>>> # We need to store the original size.
>>> bs = ot.ResourceMap.GetAsUnsignedInteger('FunctionalChaosAlgorithm-BasisSize')
>>> ot.ResourceMap.SetAsUnsignedInteger('FunctionalChaosAlgorithm-BasisSize', 100)
>>> algo.run()
>>> # The algorithm has been run with the lower basis size:
>>> # we can now restore the original value.
>>> ot.ResourceMap.SetAsUnsignedInteger('FunctionalChaosAlgorithm-BasisSize', bs)
>>> result = algo.getResult()
>>> sensitivity = ot.FieldFunctionalChaosSobolIndices(result)
>>> sobol_1 = sensitivity.getFirstOrderIndices()
>>> sobol_t = sensitivity.getTotalOrderIndices()
__init__(*args)
draw(marginalIndex=0)

Draw sensitivity indices.

Parameters:
marginalIndexint, default=0

Marginal index

Returns:
graphGraph

A graph showing the first and total order indices per input.

getClassName()

Accessor to the object’s name.

Returns:
class_namestr

The object class name (object.__class__.__name__).

getFirstOrderIndices(marginalIndex=0)

Get the first order Sobol indices.

Parameters:
jint, default=0

Output index

Returns:
indicesPoint

First order Sobol indices

getName()

Accessor to the object’s name.

Returns:
namestr

The name of the object.

getSobolIndex(*args)

Get a single Sobol index.

Parameters:
iint or list of int

Input index

jint, default=0

Output index

Returns:
sfloat

Sobol index

getSobolTotalIndex(*args)

Get a single Sobol index.

Parameters:
iint or list of int

Input index

jint, default=0

Output index

Returns:
sfloat

Sobol index

getTotalOrderIndices(marginalIndex=0)

Get the total order Sobol indices.

Parameters:
jint, default=0

Output index

Returns:
indicesPoint

Total order Sobol indices

hasName()

Test if the object is named.

Returns:
hasNamebool

True if the name is not empty.

setName(name)

Accessor to the object’s name.

Parameters:
namestr

The name of the object.

Examples using the class

Viscous free fall: metamodel of a field function

Viscous free fall: metamodel of a field function

Estimate Sobol indices on a field to point function

Estimate Sobol indices on a field to point function