Exploring Sobol indices and randomness with Sobol4R

Frédéric Bertrand

Cedric, Cnam, Paris
frederic.bertrand@lecnam.net

2025-11-27

Context and non random case

Test case: the non monotonic Sobol g function.

The method of Sobol requires two samples. In the reference case there are eight variables, all following the uniform distribution on [0,1].

n <- 50000
p <- 8
X1_1 <- data.frame(matrix(runif(p * n), nrow = n))
X2_1 <- data.frame(matrix(runif(p * n), nrow = n))
set.seed(4669)
gensol1 <- sobol4r_design(
  X1    = X1_1,
  X2    = X2_1,
  order = 2,
  nboot = 100
)

Y1 <- sobol_g_function(gensol1$X)
x1 <- sensitivity::tell(gensol1, Y1)
print(x1)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 500000 
#> 
#> First order indices:
#>        original          bias  std. error    min. c.i.   max. c.i.
#> X1  0.712087428 -5.429714e-05 0.002968139  0.706431947 0.718601309
#> X2  0.169742923  4.840186e-04 0.006215062  0.155343342 0.182854798
#> X3  0.018570343  2.575971e-04 0.005945430  0.004903759 0.033717560
#> X4 -0.001114917  3.536813e-04 0.005794935 -0.013507164 0.011609953
#> X5 -0.008241319  2.344045e-04 0.005858247 -0.020163199 0.004376139
#> X6 -0.008521466  2.220729e-04 0.005845193 -0.020244006 0.004173574
#> X7 -0.008473067  2.324260e-04 0.005862930 -0.020118022 0.004131066
#> X8 -0.008081806  2.343849e-04 0.005847215 -0.019846249 0.004556673
#> 
#> Total indices:
#>        original          bias   std. error    min. c.i.    max. c.i.
#> X1 0.7944739156 -9.286113e-04 5.159476e-03 0.7860150395 0.8069629081
#> X2 0.2409572097 -3.645698e-04 2.322183e-03 0.2360853249 0.2467320189
#> X3 0.0344221441  3.240958e-06 3.005107e-04 0.0337146293 0.0350494313
#> X4 0.0105496678  2.376881e-06 1.056682e-04 0.0103450632 0.0107664627
#> X5 0.0001059279 -1.534982e-07 1.022979e-06 0.0001039250 0.0001083522
#> X6 0.0001034030 -1.417083e-07 9.164695e-07 0.0001018130 0.0001053867
#> X7 0.0001051487 -1.661237e-07 9.156945e-07 0.0001039020 0.0001073333
#> X8 0.0001068234 -1.537729e-07 1.097802e-06 0.0001048107 0.0001092450
Sobol4R::autoplot(x1, ncol = 1)

ex1_results <- sobol_example_g_deterministic()
print(ex1_results)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 500000 
#> 
#> First order indices:
#>        original          bias  std. error    min. c.i.  max. c.i.
#> X1  0.711999848  2.759449e-05 0.002631360  0.707005109 0.71676704
#> X2  0.171069444 -3.243317e-04 0.006964257  0.156977789 0.18629660
#> X3  0.019197160  2.380097e-04 0.006570602  0.005519545 0.03206075
#> X4  0.004399632  6.982094e-05 0.006591532 -0.009336102 0.01681319
#> X5 -0.001721617  2.932782e-05 0.006368456 -0.014976702 0.01081698
#> X6 -0.001881114  5.734953e-05 0.006392574 -0.015225964 0.01075163
#> X7 -0.002045248  6.137792e-05 0.006369883 -0.015444700 0.01055871
#> X8 -0.001850079  3.301663e-05 0.006399314 -0.015159481 0.01093466
#> 
#> Total indices:
#>        original          bias   std. error    min. c.i.    max. c.i.
#> X1 0.7904857363  4.208462e-04 6.178943e-03 0.7787869014 0.8025046920
#> X2 0.2444730973  2.926195e-04 2.151611e-03 0.2399293818 0.2482734385
#> X3 0.0340828543  4.398558e-05 3.338495e-04 0.0334363304 0.0347126444
#> X4 0.0103959879 -3.029215e-06 8.915942e-05 0.0102354937 0.0105765331
#> X5 0.0001065903  1.171617e-07 9.079141e-07 0.0001045168 0.0001082466
#> X6 0.0001057113  1.810632e-07 9.735431e-07 0.0001037793 0.0001075022
#> X7 0.0001059162 -3.643364e-08 9.103740e-07 0.0001040602 0.0001081730
#> X8 0.0001042162  4.693930e-08 9.855479e-07 0.0001021336 0.0001062003
Sobol4R::autoplot(ex1_results, ncol = 1)

Sobol and randomness I: random effect on output variable

Generate data

n <- 50000
X1_r1 <- data.frame(
  C1 = runif(n),
  C2 = runif(n)
)
X2_r1 <- data.frame(
  C1 = runif(n),
  C2 = runif(n)
)

Three settings, two input variables

The deterministic model is sobol4r_g2. The noisy version with Gaussian noise N(0,1) is sobol4r_g2_noise_const. The quantity of interest based on the mean over replications is sobol4r_g2_noise_const_qoi_mean.

set.seed(4669)
gensol2 <- sobol4r_design(
  X1    = X1_r1,
  X2    = X2_r1,
  order = 2,
  nboot = 100
)
Y2 <- sobol_g2_function(gensol2$X)
Y3 <- sobol_g2_additive_noise(gensol2$X)
Y4 <- sobol_g2_qoi_mean(gensol2$X, nrep = 1000)
x2 <- sensitivity::tell(gensol2, Y2)
x3 <- sensitivity::tell(gensol2, Y3)
x4 <- sensitivity::tell(gensol2, Y4)
print(x2)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.7550055 -0.0003601385 0.002304160 0.7508551 0.7603568
#> C2 0.1957185  0.0009514298 0.006130637 0.1831536 0.2073782
#> 
#> Total indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.8082007 -5.903411e-05 0.005378379 0.7971735 0.8191992
#> C2 0.2473006  2.152324e-04 0.002031224 0.2431625 0.2511949
print(x3)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>      original          bias  std. error  min. c.i. max. c.i.
#> C1 0.23508702 -0.0001842012 0.007418066 0.21958004 0.2523961
#> C2 0.06621936 -0.0013241741 0.007594708 0.05317969 0.0838208
#> 
#> Total indices:
#>     original         bias  std. error min. c.i. max. c.i.
#> C1 0.9411610 0.0002531938 0.006125012 0.9286084 0.9535319
#> C2 0.7669998 0.0006316271 0.005430292 0.7556049 0.7762656
print(x4)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.7528842  7.419856e-05 0.002317659 0.7480429 0.7582336
#> C2 0.1953384 -5.886786e-04 0.005999309 0.1799074 0.2073489
#> 
#> Total indices:
#>     original         bias  std. error min. c.i. max. c.i.
#> C1 0.8083692 0.0002805824 0.005469590 0.7956294 0.8214853
#> C2 0.2488353 0.0004188735 0.002059966 0.2442646 0.2523893
Sobol4R::autoplot(x2)

Sobol4R::autoplot(x3)

Sobol4R::autoplot(x4)

ex2_results <- sobol_example_random_output()
ex2_results
#> $x_det
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.7476828 -0.0002030558 0.002421130 0.7425641 0.7530614
#> C2 0.1871172  0.0004843956 0.006332673 0.1753927 0.2002247
#> 
#> Total indices:
#>     original         bias  std. error min. c.i. max. c.i.
#> C1 0.8108889 0.0003896403 0.005967927 0.7995632 0.8242206
#> C2 0.2544053 0.0003504783 0.002262034 0.2499496 0.2592531
#> 
#> $x_noise
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>     original         bias  std. error  min. c.i.  max. c.i.
#> C1 0.2215011 0.0004052269 0.007547330 0.20379786 0.23332141
#> C2 0.0552804 0.0001546113 0.008707552 0.03674069 0.07087922
#> 
#> Total indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.9388735 -0.0004260980 0.006691627 0.9279979 0.9547712
#> C2 0.7776180  0.0004881797 0.005616671 0.7657743 0.7886748
#> 
#> $x_qoi
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 200000 
#> 
#> First order indices:
#>     original        bias  std. error min. c.i. max. c.i.
#> C1 0.7462698 0.000473898 0.002362959 0.7409956 0.7505454
#> C2 0.1867345 0.000292597 0.006211143 0.1733065 0.1993952
#> 
#> Total indices:
#>     original          bias  std. error min. c.i. max. c.i.
#> C1 0.8111091 -7.072511e-05 0.005908455 0.7984985 0.8225162
#> C2 0.2561477 -1.309734e-04 0.002042969 0.2518767 0.2602755
Sobol4R::autoplot(ex2_results$x_det)

Sobol4R::autoplot(ex2_results$x_noise)

Sobol4R::autoplot(ex2_results$x_qoi)

rm(ex2_results)

Sobol and randomness II: large random effect depending on an input variable

We keep the previously generated values for C1 and C2 and add a third variable C3 distributed as runif(n, min = 1, max = 100). The third variable controls the mean of the Gaussian noise.

n <- 50000
X1_r2 <- data.frame(
  C1 = X1_r1$C1,
  C2 = X1_r1$C2,
  C3 = runif(n, min = 1, max = 100)
)
X2_r2 <- data.frame(
  C1 = X2_r1$C1,
  C2 = X2_r1$C2,
  C3 = runif(n, min = 1, max = 100)
)
head(X1_r1)
#>           C1        C2
#> 1 0.01651413 0.8730539
#> 2 0.41411830 0.9350212
#> 3 0.56474556 0.2305029
#> 4 0.19459702 0.5419644
#> 5 0.14134094 0.7620684
#> 6 0.80140480 0.7306451
head(X1_r2)
#>           C1        C2        C3
#> 1 0.01651413 0.8730539 91.158310
#> 2 0.41411830 0.9350212 94.475260
#> 3 0.56474556 0.2305029 18.569825
#> 4 0.19459702 0.5419644 27.675334
#> 5 0.14134094 0.7620684 95.994602
#> 6 0.80140480 0.7306451  6.472291
set.seed(4669)
gensol3 <- sobol4r_design(
  X1    = X1_r2,
  X2    = X2_r2,
  order = 2,
  nboot = 100
)
Y5 <- sobol_g2_with_covariate_noise(gensol3$X)
Y6 <- sobol_g2_qoi_covariate_mean(gensol3$X, nrep = 1000)
x5 <- sensitivity::tell(gensol3, Y5)
x6 <- sensitivity::tell(gensol3, Y6)
print(x5)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>       original          bias   std. error    min. c.i.  max. c.i.
#> C1 0.003170282 -2.568401e-04 5.241648e-03 -0.005805240 0.01467744
#> C2 0.002782150 -2.784101e-04 5.243496e-03 -0.006477354 0.01411919
#> C3 0.998223548 -1.830410e-06 1.085285e-05  0.998202502 0.99824627
#> 
#> Total indices:
#>       original          bias   std. error   min. c.i.   max. c.i.
#> C1 0.001669680 -1.587459e-06 1.168892e-05 0.001646658 0.001691769
#> C2 0.001360707  1.195725e-06 1.036085e-05 0.001337813 0.001380887
#> C3 0.996461054  2.828648e-04 5.348968e-03 0.985081228 1.006159984
print(x6)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>       original          bias   std. error    min. c.i.  max. c.i.
#> C1 0.003045781  3.245345e-04 5.730385e-03 -0.007370979 0.01748265
#> C2 0.002771731  3.117730e-04 5.719281e-03 -0.007607804 0.01720491
#> C3 0.999453577 -3.715748e-07 3.504398e-06  0.999448090 0.99946123
#> 
#> Total indices:
#>        original          bias   std. error    min. c.i.    max. c.i.
#> C1 0.0004432984  3.658371e-07 3.301551e-06 0.0004352668 0.0004492114
#> C2 0.0001368388  1.677036e-08 1.215260e-06 0.0001343554 0.0001391440
#> C3 0.9968336377 -3.216996e-04 5.739468e-03 0.9822539001 1.0073591940
Sobol4R::autoplot(x5)

Sobol4R::autoplot(x6)

ex3_results <- sobol_example_covariate_large()
ex3_results
#> $x_single
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>        original          bias   std. error   min. c.i.   max. c.i.
#> C1 -0.001419232 -2.551862e-04 4.754941e-03 -0.01020911 0.008679871
#> C2 -0.002118300 -2.741205e-04 4.734446e-03 -0.01049569 0.007917209
#> C3  0.998230810 -2.740679e-07 1.330441e-05  0.99820296 0.998260770
#> 
#> Total indices:
#>       original          bias   std. error   min. c.i.   max. c.i.
#> C1 0.001673231 -2.799984e-07 1.317787e-05 0.001648141 0.001702239
#> C2 0.001364189  4.779018e-07 1.142277e-05 0.001341736 0.001387983
#> C3 1.002209585  2.630762e-04 4.745343e-03 0.992739198 1.010733375
#> 
#> $x_qoi
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>        original          bias   std. error   min. c.i.   max. c.i.
#> C1 -0.002076225 -3.254285e-04 5.216497e-03 -0.01315381 0.007326871
#> C2 -0.002037827 -3.384410e-04 5.245055e-03 -0.01333648 0.007316861
#> C3  0.999453572 -3.508471e-07 4.455655e-06  0.99944591 0.999464397
#> 
#> Total indices:
#>        original         bias   std. error    min. c.i.    max. c.i.
#> C1 0.0004459458 2.230505e-07 3.877984e-06 0.0004374859 0.0004532539
#> C2 0.0001360653 9.659129e-08 1.327046e-06 0.0001329216 0.0001383504
#> C3 1.0017834713 3.256617e-04 5.228995e-03 0.9925340972 1.0128396236
Sobol4R::autoplot(ex3_results$x_single)

Sobol4R::autoplot(ex3_results$x_qoi)

rm(ex3_results)

Sobol and randomness III: slight random effect depending on an input variable

We now take a third input C3 distributed as runif(n, min = 1, max = 1.5), which induces a much smaller range for the mean of the noise.

n <- 50000
X1_r3 <- data.frame(
  C1 = X1_r1$C1,
  C2 = X1_r1$C2,
  C3 = runif(n, min = 1, max = 1.5)
)
X2_r3 <- data.frame(
  C1 = X2_r1$C1,
  C2 = X2_r1$C2,
  C3 = runif(n, min = 1, max = 1.5)
)
set.seed(4669)
gensol4 <- sobol4r_design(
  X1    = X1_r3,
  X2    = X2_r3,
  order = 2,
  nboot = 100
)
Y7 <- sobol_g2_with_covariate_noise(gensol4$X)
Y8 <- sobol_g2_qoi_covariate_mean(gensol4$X, nrep = 1000)
x7 <- sensitivity::tell(gensol4, Y7)
x8 <- sensitivity::tell(gensol4, Y8)
print(x7)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>     original          bias  std. error     min. c.i.  max. c.i.
#> C1 0.2343104  0.0001485184 0.006655899  0.2214713611 0.24778800
#> C2 0.0671114  0.0001936093 0.007963485  0.0529143153 0.08413863
#> C3 0.0151080 -0.0008516146 0.007887232 -0.0004634551 0.03009347
#> 
#> Total indices:
#>     original         bias  std. error min. c.i. max. c.i.
#> C1 0.9256960 -0.001052027 0.005457107 0.9121703 0.9383142
#> C2 0.7543966  0.000522484 0.004967361 0.7457813 0.7660890
#> C3 0.6918052 -0.000698318 0.004661657 0.6829604 0.7017516
print(x8)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>      original          bias  std. error min. c.i.  max. c.i.
#> C1 0.72142972 -2.372762e-05 0.002765113 0.7156678 0.72718974
#> C2 0.18537517 -5.267583e-04 0.005880219 0.1756444 0.19815953
#> C3 0.04948267 -3.025578e-04 0.005817743 0.0384426 0.06158135
#> 
#> Total indices:
#>      original          bias   std. error  min. c.i.  max. c.i.
#> C1 0.77113008  3.568969e-04 0.0054754198 0.75845776 0.78082092
#> C2 0.23803502 -5.427039e-05 0.0023475876 0.23364114 0.24346811
#> C3 0.04695996  1.980127e-05 0.0003957626 0.04594085 0.04767237
Sobol4R::autoplot(x7)

Sobol4R::autoplot(x8)

ex4_results <- sobol_example_covariate_small()
ex4_results
#> $x_single
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>      original          bias  std. error   min. c.i.  max. c.i.
#> C1 0.23474659 -0.0008225662 0.007326213 0.220721125 0.25029623
#> C2 0.05807751 -0.0010396869 0.008480065 0.037921771 0.07825352
#> C3 0.01719863 -0.0010599722 0.008105637 0.001775034 0.03557313
#> 
#> Total indices:
#>     original         bias  std. error min. c.i. max. c.i.
#> C1 0.9294956 0.0006925395 0.006670215 0.9154525 0.9399075
#> C2 0.7578196 0.0009538626 0.005386697 0.7429564 0.7664032
#> C3 0.6933014 0.0003287579 0.005084144 0.6827887 0.7025969
#> 
#> $x_qoi
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 250000 
#> 
#> First order indices:
#>      original          bias  std. error min. c.i.  max. c.i.
#> C1 0.71400016  4.210423e-05 0.002448127 0.7091120 0.71892020
#> C2 0.18089491  3.468145e-05 0.006854263 0.1669723 0.19479433
#> C3 0.04236738 -1.762632e-04 0.006329338 0.0287953 0.05481073
#> 
#> Total indices:
#>      original          bias   std. error  min. c.i.  max. c.i.
#> C1 0.78153485  3.400941e-05 0.0058307860 0.76887925 0.79381579
#> C2 0.23845898  6.110704e-05 0.0021492326 0.23337772 0.24242239
#> C3 0.04681305 -1.058187e-05 0.0003578763 0.04611261 0.04737251
Sobol4R::autoplot(ex4_results$x_single)

Sobol4R::autoplot(ex4_results$x_qoi)

rm(ex4_results)

Sobol and randomness IV: random variables with fixed distribution parameters

We now turn to the process model. The uncertain inputs are the distributional parameters of the individual unit model. The quantity of interest is the time needed to reach a given number of successes.

n <- 100

draw_params <- function(n) {
  data.frame(t(replicate(
    n,
    c(
      1 / runif(1, min = 20,  max = 100),
      1 / runif(1, min = 24,  max = 2000),
      1 / runif(1, min = 24,  max = 120),
      runif(1,  min = 0.05, max = 0.3),
      runif(1,  min = 0.3,  max = 0.7)
    )
  )))
}

X1_process <- draw_params(n)
X2_process <- draw_params(n)
set.seed(4669)
gensolp1 <- sobol4r_design(
  X1    = X1_process,
  X2    = X2_process,
  order = 2,
  nboot = 10
)
MM <- 50

Yp1 <- process_fun_row_wise(gensolp1$X, M = MM)
Yp2 <- process_fun_mean_to_M(gensolp1$X, M = MM, nrep = 10)
xp1 <- sensitivity::tell(gensolp1, Yp1)
xp2 <- sensitivity::tell(gensolp1, Yp2)
print(xp1)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 700 
#> 
#> First order indices:
#>        original        bias std. error   min. c.i. max. c.i.
#> X1  0.278917014 -0.07847893  0.2065262  0.07005799 0.6670722
#> X2 -0.009680856 -0.04000430  0.1799449 -0.22670841 0.4053189
#> X3  0.134364681 -0.04240028  0.1939272 -0.10351185 0.5689621
#> X4  0.116140455 -0.04292560  0.2017516 -0.14794723 0.5629771
#> X5  0.336779215 -0.03638448  0.1522807  0.18050722 0.7272754
#> 
#> Total indices:
#>      original         bias std. error   min. c.i. max. c.i.
#> X1 0.66170348  0.006773165 0.15511050 0.423221019 0.8489875
#> X2 0.09615523  0.009498338 0.02629171 0.056679657 0.1232045
#> X3 0.03578188  0.003511799 0.01392988 0.009682675 0.0506120
#> X4 0.63251105  0.099239178 0.14120462 0.259268101 0.7497794
#> X5 0.14750480 -0.002367062 0.02904764 0.100426378 0.1891590
print(xp2)
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 700 
#> 
#> First order indices:
#>     original         bias std. error   min. c.i. max. c.i.
#> X1 0.4071748 -0.063636493  0.1631568  0.27550746 0.8152276
#> X2 0.2090858  0.009138605  0.1129780  0.05742674 0.4362972
#> X3 0.2282092  0.007633700  0.1094396  0.09441220 0.4604817
#> X4 0.2116146  0.027940394  0.2012275 -0.12810334 0.4372343
#> X5 0.4040308 -0.013610653  0.1412412  0.20253207 0.6856409
#> 
#> Total indices:
#>       original          bias   std. error   min. c.i.   max. c.i.
#> X1 0.507347527 -7.498224e-03 0.1098713561 0.256369663 0.669338287
#> X2 0.003894622  2.390915e-04 0.0007537223 0.002698195 0.005038152
#> X3 0.003770138 -5.071994e-05 0.0012352511 0.001016542 0.005163826
#> X4 0.556305209 -1.429157e-02 0.0969573233 0.315859067 0.676893883
#> X5 0.116963250 -2.114866e-03 0.0279731509 0.092409682 0.167265219
Sobol4R::autoplot(xp1)

Sobol4R::autoplot(xp2)

ex5_results <- sobol_example_process(order = 2)
ex5_results
#> $xp_single
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 700 
#> 
#> First order indices:
#>     original        bias std. error  min. c.i. max. c.i.
#> X1 0.3251878 -0.11956089  0.3003891 0.05142644 0.8768130
#> X2 0.2709196 -0.06616596  0.2367619 0.09601432 0.8667671
#> X3 0.2529777 -0.09381375  0.2528680 0.05249973 0.8711076
#> X4 0.6503453 -0.07717083  0.1991161 0.50133138 1.1809233
#> X5 0.4728082 -0.09376040  0.3386293 0.17668752 1.4241019
#> 
#> Total indices:
#>      original        bias std. error    min. c.i.  max. c.i.
#> X1 0.40911579 0.094246717 0.24311335 -0.085629474 0.60818764
#> X2 0.03122528 0.006236267 0.02097528 -0.015760932 0.05126478
#> X3 0.01955240 0.004392401 0.01269195 -0.009580275 0.02594799
#> X4 0.48288571 0.042363613 0.11435748  0.166869403 0.57045155
#> X5 0.21775282 0.031662770 0.08754701 -0.027346891 0.26068068
#> 
#> $xp_qoi
#> 
#> Call:
#> sensitivity::soboljansen(model = NULL, X1 = X1, X2 = X2, nboot = nboot)
#> 
#> Model runs: 700 
#> 
#> First order indices:
#>     original        bias std. error   min. c.i. max. c.i.
#> X1 0.3483802 -0.16043994  0.3215662  0.05893805 1.0534591
#> X2 0.1871901 -0.07703889  0.2160598  0.01647143 0.7183039
#> X3 0.1394390 -0.06937329  0.2202040 -0.03495543 0.6741310
#> X4 0.6651748 -0.08008972  0.1684943  0.49885673 1.0749781
#> X5 0.4470737 -0.13859876  0.2533281  0.23713323 0.9783885
#> 
#> Total indices:
#>       original         bias  std. error     min. c.i.   max. c.i.
#> X1 0.299244088 0.0591835611 0.159565072 -0.1305486243 0.485596396
#> X2 0.004117920 0.0010084811 0.001572003  0.0005187457 0.005306349
#> X3 0.004106141 0.0009891752 0.002028857 -0.0016666262 0.005185107
#> X4 0.440489215 0.0654289413 0.120584267  0.1996023024 0.501476240
#> X5 0.194195448 0.0003466733 0.032737243  0.1403634094 0.243823212
Sobol4R::autoplot(ex5_results$xp_single)

Sobol4R::autoplot(ex5_results$xp_qoi)

rm(ex5_results)