Skip to content
All library documents

Generating Correlated Quasi-Random Variables with Sobol Sequences

Article Quant Q&A · Author: Vanity

Summary

This document describes a simulation problem: generating several correlated variables from a Sobol quasi-random sequence in MATLAB. The author contrasts a Cholesky-based transformation of standard normal draws with an attempted method that transforms Sobol uniform values through the inverse normal distribution. For a second variable, the example combines the first with an independent normal draw using a correlation coefficient and a residual scale factor.

The request is to extend that construction to six correlated variables while generating the sequence only once, since sequence generation is described as time-consuming. The document does not provide an answer or a completed algorithm, so it offers no evidence that the proposed hybrid method works as intended or preserves the benefits of quasi-random sampling. It is best read as a statement of the simulation challenge and a partial two-variable construction, with implementation and validation left unresolved.

Key ideas

  • The author seeks correlated quasi-random draws for simulation using Sobol sequences.
  • A Cholesky factor can transform independent standard normal draws to impose a correlation structure.
  • The attempted alternative transforms Sobol uniform values to normal values and combines a second variable with independent noise.
  • The requested extension is to six correlated variables while generating the sequence once.
  • No solution or validation of the proposed approach is included.

Tags

Full text
# Generating Correlated Quasi Random Numbers


# Generating Correlated Quasi Random Numbers












Hi I am trying to generate correlated quasi random numbers using a sobol sequence in matlab. My Problem is the Following: Using "standard" random numbers it is easy to generate the 6 correlated random variables (NumberOfSteps X NumberOfSimulations) I need, using a cholesky decomposition:

```
L = chol(CorrelationMatrix,"lower");  
for i=1:NumberOfSimulations  
Z = L*randn(4,NumberOfSteps);  
for t=2:NumberOfSteps  
.....Z1(i,t);  
.....Z2(i,t);
```

Since i only want to generate the sequence once (very time consuming) the only way i found to generate two correlated r.v. is the following:

```
Ps = sobolset(NumberOfSteps);  
Ps = scramble(Ps,'MatousekAffineOwen');  
U = net(Ps,NumberOfSimulations);  
Z1 = norminv(U);  

Z2 = Rho.*Z1 + sqrt(1-Rho^2).*randn(NumberOfSimulations,NumberOfSteps);
```

Unfortunately I have No idea how I can extend this to 6 correlated random varibles. Can anyone help me?

Best regards, Alex

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.