Generating Correlated Quasi-Random Variables with Sobol Sequences
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.