Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an Implementation of Modified Sobol'-G function from Saltelli et al. (2010) #357

Open
damar-wicaksono opened this issue Sep 18, 2024 · 0 comments
Assignees
Labels
documentation Improvements or additions to documentation enhancement New feature or request sensitivity Issues related to sensitivity analysis test functions uq-test-function New test function to the code base
Milestone

Comments

@damar-wicaksono
Copy link
Owner

damar-wicaksono commented Sep 18, 2024

The function reads as follows:

$$ \mathcal{M}(\boldsymbol{x}; \boldsymbol{a}, \boldsymbol{\delta}, \boldsymbol{\alpha}) = \prod_{i = 1}^M g_i^*(\boldsymbol{x}; \boldsymbol{a}, \boldsymbol{\delta}, \boldsymbol{\alpha}), $$

where

$$ g_i^*(x_i; \boldsymbol{a}, \boldsymbol{\delta}, \boldsymbol{\alpha}) = \frac{(1 + \alpha_i) \lvert 2 (x_i + \delta_i - \lfloor x_i + \delta_i \rfloor) - 1 \rvert^{\alpha_i} + a_i}{1 + a_i} $$

  • $x_i$ is assumed to be uniformly distributed in $[0, 1]$
  • $a_i > 0$'s are the coefficients
  • $\delta_i \in [0, 1]$'s are the shift parameter which are randomly generated
  • $\alpha_i > 0$'s are the curvature parameter

The function appears in Saltelli et al. (2010)1 as an extension to a sensitivity analysis test function known as the Sobol'-G function by introducing parameters that allow the function to be shifted and curved. It appears as a test function in the context of sensitivity analysis; see, for instance, 2.

Note that for a given instance of the test function, the set of parameters $\boldsymbol{\delta}$ is fixed.

Parameters

The original paper 1 employed the function as a ten-dimensional function with the following choices of parameters:

  1. $\alpha_i = 1.0, i = 1, \ldots, 10$; $a_1 = 0$, $a_2 = 0$, $a_3 = \ldots = a_{10} = 9$
  2. $\alpha_i = 1.0, i = 1, \ldots, 10$; $\boldsymbol{a} = (0.0, 0.1, 0.2, 0.3, 0.4, 0.8, 1.0, 2.0, 3.0, 4.0)$
  3. $\alpha_i = 0.5, i = 1, \ldots, 10$; $a_1 = 0$, $a_2 = 0$, $a_3 = \ldots = a_{10} = 9$
  4. $\alpha_i = 0.5, i = 1, \ldots, 10$; $\boldsymbol{a} = (0.0, 0.1, 0.2, 0.3, 0.4, 0.8, 1.0, 2.0, 3.0, 4.0)$
  5. $\alpha_i = 2.0, i = 1, \ldots, 10$; $a_1 = 0$, $a_2 = 0$, $a_3 = \ldots = a_{10} = 9$
  6. $\alpha_i = 2.0, i = 1, \ldots, 10$; $\boldsymbol{a} = (0.0, 0.1, 0.2, 0.3, 0.4, 0.8, 1.0, 2.0, 3.0, 4.0)$

The parameter set 1 is considered easier than parameter set 2. Parameter sets 3 and 5 are the concave and convex versions of the parameter set 1, respectively.
Accordingly, parameter sets 4 and 6 are the concave and convex version of the parameter set 2, respectively.

Reference results

The analytical mean of the test function is $1.0$.

The partial variance of each term in the product $V_i \equiv \mathbb{V}{X_i} (\mathbb{E}{\sim \boldsymbol{X}_i} (Y | X_i))$ is given analytically as:

$$ V_i = \frac{\alpha_i^2}{(1 + 2 \alpha_i) (1 + a_i)^2} $$

such that the variance of the test function is given as follows:

$$ \mathbb{V}[Y] = \prod_{i = 1}^M (1 + V_i) - 1. $$

The first-order Sobol' sensitivity indices are given as:

$$ S_i = \frac{V_i}{V} $$

and the total Sobol' sensivity indices as:

$$ ST_i = \frac{VT_i}{V} $$

where

$$ VT_i = V_i \prod_{j = 1, j \neq i}^M (1 + V_j). $$

Footnotes

  1. A. Saltelli, P. Annoni, I. Azzini, F. Campolongo, M. Ratto, and S. Tarantola, “Variance based sensitivity analysis of model output. Design and estimator for the total sensitivity index,” Computer Physics Communications, vol. 181, no. 2, pp. 259–270, Feb. 2010, doi: 10.1016/j.cpc.2009.09.018. 2

  2. X. Sun, B. Croke, A. Jakeman, S. Roberts, "Benchmarking Active Subspace methods of global sensitivity analysis against variance-based Sobol’ and Morris methods with established test functions," Environmental Modelling & Software, vol. 149, p. 105310, 2022. DOI: 10.1016/j.envsoft.2022.105310

@damar-wicaksono damar-wicaksono added documentation Improvements or additions to documentation enhancement New feature or request uq-test-function New test function to the code base sensitivity Issues related to sensitivity analysis test functions labels Sep 18, 2024
@damar-wicaksono damar-wicaksono added this to the 0.5.0 Release milestone Sep 18, 2024
@damar-wicaksono damar-wicaksono self-assigned this Sep 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request sensitivity Issues related to sensitivity analysis test functions uq-test-function New test function to the code base
Projects
None yet
Development

No branches or pull requests

1 participant