Sensitivity (Sobol) & UQ propagation¶
See Worked examples § Sensitivity analysis on a surrogate for a runnable demonstration of this pipeline against the Ishigami function, GP surrogate included.
Sobol' sensitivity indices¶
evaluate_sobol_indices (evaluate/funs_evaluate.py) computes first-,
total-, and (closed-form) second-order Sobol' sensitivity indices for an
already-built surrogate — scipy-based, not Dakota-native (V9gh):
Dakota's own Sobol study type is not used; instead the module draws
Saltelli-style A/B/AB sample matrices, evaluates the fitted surrogate on
them via evaluate_sumo, and calls scipy.stats.sobol_indices directly.
- Base sample size: fixed at
SOBOL_BASE_SAMPLES = 1024, independent of the general UQnumSamplesfield used by histogram/correlation computations (V36) — rounded up to the next power of two if a caller requests fewer (ceil(log2(max(n, 2)))). - Second-order indices are not directly returned by
scipy.stats.sobol_indices; they're derived via the Jansen/Saltelli (2010) closed-form relation from the total-order indices:S_ij = (S_Ti + S_Tj - sum(higher-order terms)) / 2. - Constant input variables are detected and short-circuited to
main=0, total=0rather than passed through the sampler.
Validation: Ishigami analytical acceptance gate¶
This pipeline's correctness is pinned to a single acceptance test —
SPEC.md §R1 — that bypasses the surrogate entirely and evaluates the
Ishigami function analytically
on the Saltelli samples, to isolate "is the sampling → splitting → scipy
call → closed-form second-order math correct" from "is the GP surrogate
accurate." See
Verification & Validation
for the reference values and current pass status.
UQ propagation¶
Two distinct pathways exist — see Evaluate § Uncertainty propagation for which one is actually reachable from the web UI and which this site's verification suite exercises:
propagate_uq— Dakota-native, normal-uncertain variables only.- Manual pathway —
create_manual_uq_samples(normal / uniform / constant per variable, seeded) +evaluate_sumo+ an erfinv-based injection of the surrogate's own predictive uncertainty into the propagated samples.
Both are validated against closed-form output distributions for simple
transforms (e.g. y = 2x + 1, x ~ N(0,1) ⟹ y ~ N(1, 4);
y = x², x ~ N(0,1) ⟹ y ~ χ²(1)) — see
Category F.