Note
Go to the end to download the full example code or to run this example in your browser via Binder
Ishigami function
The ishigami function is a non-linear, non-monotonic function that is commonly used to benchmark uncertainty and sensitivity analysis methods.
\[f(x_1, x_2, x_3) = sin(x_1) + a \cdot sin^2(x_2) + b \cdot x_3^4 sin(x_1)\]
\[x_1, x_2, x_3 \sim \mathcal{U}(-\pi, \pi), \quad a, b\in \mathbb{R}\]
import numpy as np
from UQpy.run_model.RunModel import RunModel
from UQpy.run_model.model_execution.PythonModel import PythonModel
from UQpy.distributions import Uniform
from UQpy.distributions.collection.JointIndependent import JointIndependent
from UQpy.sensitivity.ChatterjeeSensitivity import ChatterjeeSensitivity
from UQpy.sensitivity.PostProcess import *
np.random.seed(123)
Define the model and input distributions
# Create Model object
model = PythonModel(
model_script="local_ishigami.py",
model_object_name="evaluate",
var_names=[r"$X_1$", "$X_2$", "$X_3$"],
delete_files=True,
params=[7, 0.1],
)
runmodel_obj = RunModel(model=model)
# Define distribution object
dist_object = JointIndependent([Uniform(-np.pi, 2 * np.pi)] * 3)
Compute Chatterjee indices
SA = ChatterjeeSensitivity(runmodel_obj, dist_object)
SA.run(
n_samples=100_000,
estimate_sobol_indices=True,
n_bootstrap_samples=100,
confidence_level=0.95,
)
Chattererjee indices
SA.first_order_chatterjee_indices
Confidence intervals for the Chatterjee indices
SA.confidence_interval_chatterjee
# **Plot the Chatterjee indices**
fig1, ax1 = plot_sensitivity_index(
SA.first_order_chatterjee_indices[:, 0],
SA.confidence_interval_chatterjee,
plot_title="Chatterjee indices",
color="C2",
)
Estimated Sobol indices
Expected first order Sobol indices:
\(S_1\): 0.3139
\(S_2\): 0.4424
\(S_3\): 0.0
SA.first_order_sobol_indices
# **Plot the first order Sobol indices**
fig2, ax2 = plot_sensitivity_index(
SA.first_order_sobol_indices[:, 0],
plot_title="First order Sobol indices",
color="C0",
)
Total running time of the script: ( 0 minutes 0.000 seconds)