# Compute grouped indices for the Ishigami function¶

In this example, we compute grouped Sobol’ indices for the Ishigami function.

```from openturns.usecases import ishigami_function
import openturns as ot

ot.Log.Show(ot.Log.NONE)
```

We load the Ishigami test function from usecases module:

```im = ishigami_function.IshigamiModel()
```

The IshigamiModel data class contains the input distribution in im.distributionX and the Ishigami function in im.model. We also have access to the input variable names with:

```input_names = im.distributionX.getDescription()
```

Create a training sample.

```N = 100
inputTrain = im.distributionX.getSample(N)
outputTrain = im.model(inputTrain)
```

Create the chaos.

```multivariateBasis = ot.OrthogonalProductPolynomialFactory([im.X1, im.X2, im.X3])
selectionAlgorithm = ot.LeastSquaresMetaModelSelectionFactory()
projectionStrategy = ot.LeastSquaresStrategy(
inputTrain, outputTrain, selectionAlgorithm
)
totalDegree = 8
enumfunc = multivariateBasis.getEnumerateFunction()
P = enumfunc.getStrataCumulatedCardinal(totalDegree)
chaosalgo = ot.FunctionalChaosAlgorithm(
)
```
```chaosalgo.run()
result = chaosalgo.getResult()
metamodel = result.getMetaModel()
```

Print Sobol’ indices.

```chaosSI = ot.FunctionalChaosSobolIndices(result)
print(chaosSI)
```
```FunctionalChaosSobolIndices
- input dimension=3
- output dimension=1
- basis size=26
- mean=[3.50739]
- std-dev=[3.70413]

| Index | Multi-index   | Variance part |
|-------|---------------|---------------|
|     7 | [0,4,0]       | 0.274425      |
|     1 | [1,0,0]       | 0.191936      |
|     6 | [1,0,2]       | 0.135811      |
|    13 | [0,6,0]       | 0.134001      |
|     5 | [3,0,0]       | 0.122952      |
|    10 | [3,0,2]       | 0.0856397     |
|     3 | [0,2,0]       | 0.0237185     |
|    11 | [1,0,4]       | 0.0112027     |

| Input | Name          | Sobol' index  | Total index   |
|-------|---------------|---------------|---------------|
|     0 | X1            | 0.31752       | 0.559269      |
|     1 | X2            | 0.440685      | 0.440794      |
|     2 | X3            | 1.87833e-05   | 0.241742      |
```

We compute the first order indice of the group [0,1].

```chaosSI.getSobolGroupedIndex([0, 1])
```
```0.7582578489711685
```

This group collects all the multi-indices containing variables only in this group, including interactions within the group (by decreasing order of significance):

• [0,4,0] : 0.279938

• [1,0,0] : 0.190322

• [0,6,0] : 0.130033

• [3,0,0] : 0.12058

• [0,2,0] : 0.0250262

```0.279938 + 0.190322 + 0.130033 + 0.12058 + 0.0250262
```
```0.7458992
```

The difference between the previous sum and the output of getSobolGroupedIndex is lower than 0.01, which is the threshold used by the __str__ method.

We compute the total order indice of the group [1,2].

```chaosSI.getSobolGroupedTotalIndex([1, 2])
```
```0.6824803087795113
```

This group collects all the multi-indices containing variables in this group, including interactions with variables outside the group:

• [0,4,0] : 0.279938

• [1,0,2] : 0.136823

• [0,6,0] : 0.130033

• [3,0,2] : 0.0837457

• [0,2,0] : 0.0250262

• [1,0,4] : 0.0111867

```0.279938 + 0.136823 + 0.130033 + 0.0837457 + 0.0250262 + 0.0111867
```
```0.6667526
```