.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_reliability_sensitivity/sensitivity_analysis/plot_sensitivity_sobol_multivariate.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_reliability_sensitivity_sensitivity_analysis_plot_sensitivity_sobol_multivariate.py: Estimate Sobol' indices for a function with multivariate output =============================================================== .. GENERATED FROM PYTHON SOURCE LINES 6-9 In this example, we estimate the Sobol' indices of a function by sampling methods. This function has several outputs, which leads to the need of aggregated Sobol' indices. .. GENERATED FROM PYTHON SOURCE LINES 12-18 Introduction ------------ In this example we quantify the sensitivity of a function's outputs to its inputs with Sobol' indices. The function we consider has 5 outputs. In this case, it may be convenient to consider each output separately. It may also be interesting to aggregate the sensitivity indices to get a global understanding of the sensitivity of the inputs to the average output. .. GENERATED FROM PYTHON SOURCE LINES 20-22 Define the model ---------------- .. GENERATED FROM PYTHON SOURCE LINES 24-29 .. code-block:: default import openturns as ot import openturns.viewer import openturns.viewer as viewer ot.Log.Show(ot.Log.NONE) .. GENERATED FROM PYTHON SOURCE LINES 30-31 We define a linear model with 5 independent Gaussian inputs and 2 ouputs. .. GENERATED FROM PYTHON SOURCE LINES 31-37 .. code-block:: default inputDistribution = ot.Normal(5) function = ot.SymbolicFunction(['x0', 'x1', 'x2', 'x3', 'x4'], ['x0 + 4.0 * x1 ^ 2 + 3.0 * x2', '-7.0 * x2 - 4.0 * x3 + x4']) .. GENERATED FROM PYTHON SOURCE LINES 38-40 Estimate the Sobol' indices --------------------------- .. GENERATED FROM PYTHON SOURCE LINES 42-43 We first create a design of experiments with `SobolIndicesExperiment`. .. GENERATED FROM PYTHON SOURCE LINES 45-52 .. code-block:: default size = 1000 sie = ot.SobolIndicesExperiment(inputDistribution, size) inputDesign = sie.generate() input_names = inputDistribution.getDescription() inputDesign.setDescription(input_names) print("Sample size: ", inputDesign.getSize()) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Sample size: 7000 .. GENERATED FROM PYTHON SOURCE LINES 53-55 We see that 7000 function evaluations are required to estimate the first order and total Sobol' indices. Then we evaluate the outputs corresponding to this design of experiments. .. GENERATED FROM PYTHON SOURCE LINES 57-59 .. code-block:: default outputDesign = function(inputDesign) .. GENERATED FROM PYTHON SOURCE LINES 60-61 Then we estimate the Sobol' indices with the `SaltelliSensitivityAlgorithm`. .. GENERATED FROM PYTHON SOURCE LINES 63-66 .. code-block:: default sensitivityAnalysis = ot.SaltelliSensitivityAlgorithm( inputDesign, outputDesign, size) .. GENERATED FROM PYTHON SOURCE LINES 67-70 The `getFirstOrderIndices` and `getTotalOrderIndices` method respectively return estimates of first order and total Sobol' indices with a given output. Since these depend on the output marginal, the index of the output must be specified (the default is to return the index for the first output). .. GENERATED FROM PYTHON SOURCE LINES 72-85 .. code-block:: default output_dimension = function.getOutputDimension() for i in range(output_dimension): print("Output #", i) first_order = sensitivityAnalysis.getFirstOrderIndices(i) total_order = sensitivityAnalysis.getTotalOrderIndices(i) print(" First order indices: ", first_order) print(" Total order indices: ", total_order) agg_first_order = sensitivityAnalysis.getAggregatedFirstOrderIndices() agg_total_order = sensitivityAnalysis.getAggregatedTotalOrderIndices() print("Agg. first order indices: ", agg_first_order) print("Agg. total order indices: ", agg_total_order) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Output # 0 First order indices: [-0.0032068,0.622567,0.168173,-0.0252953,-0.0252953] Total order indices: [0.0139993,0.771123,0.240439,-7.61685e-08,-7.61685e-08] Output # 1 First order indices: [-0.00047286,-0.00047286,0.640391,0.213584,0.00538079] Total order indices: [-2.51399e-07,-2.51399e-07,0.731336,0.249044,0.0209708] Agg. first order indices: [-0.00148947,0.231204,0.464797,0.124757,-0.00602608] Agg. total order indices: [0.00520548,0.286741,0.548797,0.156438,0.0131728] .. GENERATED FROM PYTHON SOURCE LINES 86-95 We see that: * `x1` has a rather large first order index on the first output, but a small index on the second output, * `x2` has a rather large first order index on the first output on both outputs, * the largest aggregated Sobol' index is `x2`, * `x0` and `x5` have Sobol' indices which are close to zero regardless of whether the indices are aggregated or not. .. GENERATED FROM PYTHON SOURCE LINES 97-98 The `draw` method produces the following graph. The vertical bars represent the 95% confidence intervals of the estimates. .. GENERATED FROM PYTHON SOURCE LINES 100-103 .. code-block:: default graph = sensitivityAnalysis.draw() view = viewer.View(graph) .. image-sg:: /auto_reliability_sensitivity/sensitivity_analysis/images/sphx_glr_plot_sensitivity_sobol_multivariate_001.png :alt: Aggregated Sobol' indices - SaltelliSensitivityAlgorithm :srcset: /auto_reliability_sensitivity/sensitivity_analysis/images/sphx_glr_plot_sensitivity_sobol_multivariate_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 104-106 Since there are several outputs, the graph presents the aggregated Sobol' indices. The aggregated Sobol' indices indicate that the input variable which has the largest impact on the variability of the several outputs is `x2`. .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.176 seconds) .. _sphx_glr_download_auto_reliability_sensitivity_sensitivity_analysis_plot_sensitivity_sobol_multivariate.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_sensitivity_sobol_multivariate.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_sensitivity_sobol_multivariate.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_