Download the notebook here! Interactive online version: binder

Sampling

We show how to construct correlated sample with Gaussian copula.

[1]:
import chaospy as cp
import numpy as np

from econsa.correlation import gc_correlation

First we specify the marginal distributions and correlation matrix.

[2]:
corr = [[1.0, 0.6, 0.2], [0.6, 1.0, 0.0], [0.2, 0.0, 1.0]]
marginals = (
    cp.Normal(mu=1230),
    cp.Normal(mu=0.0135),
    cp.Uniform(lower=1.15, upper=3.15),
)

We then transform the correlation matrix using equation (4.5) in Kucherenko et al. (2012).

[3]:
corr_transformed = gc_correlation(marginals, corr)

Now we are ready to use transformed correlation matrix to sample from a Gaussian copula.

[4]:
copula = cp.Nataf(cp.J(*marginals), corr_transformed)
corr_copula = np.corrcoef(copula.sample(100000))

np.round(corr_copula, decimals=4)
[4]:
array([[ 1.    ,  0.6018,  0.2013],
       [ 0.6018,  1.    , -0.0018],
       [ 0.2013, -0.0018,  1.    ]])