>But still each one of them looks everything but "random". This is due to the nature of low discrepancy sequences.
True
> Is then reasonable to have one entire path where the generated sample is either a series of zeros or it has very low variability?
Sure it is ! Using a Sobol generator will provide you with a sample which will be statistically as close as possible to the multivariate normal law. Here is the way I have understood it the first time. Read Wilmott forum or a good book like Glasserman, or Joshi’s ones for a much more detailed and clearer explanation.
Consider an example in dimension 1, say an exotic European option which has a non analytically tractable payoff. If you want to compute its value using a MC method you have to simulate a one dimensional normal law. In some way, this expectation computation can be viewed as an integral with respect to a normal measure. Alternatively it can also be viewed it as an integral with respect to the Lebesgue measure on the [0, 1] segment if one uses the following change of variable:
Y ->InverseCummulativeNormal(x).
[O,1] -> R
Then your problem is equivalent to a simple numerical integration problem. If you decide to compute this integral using a growing sequence of evaluation points then you will naturally find the Sobol sequence in one dimension …
Hope this help,
François
PS:
-----Original
Message-----
From:
[hidden email]
[mailto:[hidden email]] On Behalf Of Andrea Loddo
Sent: Thursday,
May 31, 2007 4:41
PM
To: [hidden email]
Subject: Re: [Quantlib-users]
InverseCumulativeRsg
Thanks
guys, everything works perfectly. :)
Just one consideration regarding low discrepancy sequences. If I
run your code, Francois,
as well as mine, the first sequence I get is just a series of zeros. Then the
sequences start to have some variability. But still each one of them
looks everything but "random". This is due to the nature of low
discrepancy sequences.
So, let's suppose that I have to price a contingent claim, such as a
plain Vanilla call option. In this case the dimension will be simply the number
of time steps from the settlement date to the maturity date. Is then reasonable
to have one entire path where the generated sample is either a series of zeros
or it has very low variability?
Regards,
Andrea.
On 5/31/07, DU VIGNAUD DE VILLEFORT FRANCOIS GASAPRD PHI <[hidden email]> wrote:
Hi Andrea,
Here is a sample code which produces the "expected" results
typedef InverseCumulativeRsg<SobolRsg , InverseCumulativeNormal> SobolGenerator;
typedef SobolGenerator::sample_type SobolGeneratorSampleType;
typedef SobolGeneratorSampleType::value_type SobolGeneratorValueType;
void main() {
Size dimension = 3;
SobolRsg sobol (dimension , 0) ;
InverseCumulativeNormal invCumNorm (0 , 1) ;
SobolGenerator myRSG (sobol, invCumNorm);
for (Size i=0; i< 50; ++i) {
const SobolGeneratorSampleType& sample = myRSG.nextSequence();
const SobolGeneratorValueType& values = sample.value;
copy(values.begin(), values.end(), ostream_iterator<Real>( cout, "\t" ) );
cout << "\n";
}
}
hope this help,
François
-----Original Message-----
From: [hidden email][mailto:[hidden email]]
On Behalf Of Andrea Loddo
Sent: Thursday,
May 31, 2007 2:12
PM
To: [hidden email]
Subject: [Quantlib-users]
InverseCumulativeRsg
Hi all,
What I need a random sequence generator that I instantiate in
this way:
Size dimension = 3;
SobolRsg sobol ( dimension , 0 ) ;
InverseCumulativeNormal invCumNorm ( 0 , 1 ) ;
InverseCumulativeRsg<SobolRsg , InverseCumulativeNormal>
myRSG ( sobol , invCumNorm ) ;
Everything works perfectly. The only thing I don't get is the
concept of dimensionality. I would expect the member
x_.value
of myRSG to be an Array of 3 elements. The member n_, which
should be the dimension of the Array, is correctly set to 3 but apparently just
one normal random number is generated. Is there any way to generate as many
numbers as I need through the parameter dimension?
Any help will be appreciated.
Andrea.
| Free forum by Nabble | Edit this page |