SSJ
V. 2.6.

umontreal.iro.lecuyer.stochprocess
Class VarianceGammaProcess

java.lang.Object
  extended by umontreal.iro.lecuyer.stochprocess.StochasticProcess
      extended by umontreal.iro.lecuyer.stochprocess.VarianceGammaProcess
Direct Known Subclasses:
VarianceGammaProcessDiff

public class VarianceGammaProcess
extends StochasticProcess

This class represents a variance gamma (VG) process {S(t) = X(t;θ, σ, ν) : t >= 0}. This process is obtained as a subordinate of the Brownian motion process B(t;θ, σ) using the operational time G(t;1, ν) (see):

X(t;θ, σ, ν) : = B(G(t;1, ν), θ, σ).

See also for applications to modelling asset returns and option pricing.

The process is sampled as follows: when generatePath() is called, the method generatePath() of the inner GammaProcess is called; its path is then used to set the observation times of the BrownianMotion. Finally, the method generatePath() of the BrownianMotion is called. Warning: If one wants to reduced the variance as much as possible in a QMC simulation, this way of proceeding is not optimal. Use the method generatePath(uniform01) instead.

If one calls the nextObservation method, the operational time is generated first, followed by the corresponding brownian motion increment, which is then returned.

Note that if one wishes to use bridge sampling with the nextObservation method, both the gamma process G and the Brownian motion process B should use bridge sampling so that their observations are synchronized.


Constructor Summary
VarianceGammaProcess()
           
VarianceGammaProcess(double s0, BrownianMotion BM, GammaProcess Gamma)
          Constructs a new VarianceGammaProcess.
VarianceGammaProcess(double s0, double theta, double sigma, double nu, RandomStream stream)
          Constructs a new VarianceGammaProcess with parameters θ = theta, σ = sigma, ν = nu and initial value S(t0) = s0.
 
Method Summary
 double[] generatePath()
          Generates and returns the path.
 double[] generatePath(double[] uniform01)
          Similar to the usual generatePath(), but here the uniform random numbers used for the simulation must be provided to the method.
 BrownianMotion getBrownianMotion()
          Returns a reference to the inner BrownianMotion.
 GammaProcess getGammaProcess()
          Returns a reference to the inner GammaProcess.
 double getNu()
          Returns the value of the parameter ν.
 double getSigma()
          Returns the value of the parameter σ.
 RandomStream getStream()
          Returns the random stream of the BrownianMotion process, which should be the same as for the GammaProcess.
 double getTheta()
          Returns the value of the parameter θ.
 double nextObservation()
          Generates the observation for the next time.
 void resetStartProcess()
          Resets the observation index and counter to 0 and applies the resetStartProcess method to the BrownianMotion and the GammaProcess objects used to generate this process.
 void setObservationTimes(double[] t, int d)
          Sets the observation times on the VarianceGammaProcess as usual, but also sets the observation times of the underlying GammaProcess.
 void setParams(double s0, double theta, double sigma, double nu)
          Sets the parameters S(t0) = s0, θ = theta, σ = sigma and ν = nu of the process.
 void setStream(RandomStream stream)
          Resets the RandomStream's.
 
Methods inherited from class umontreal.iro.lecuyer.stochprocess.StochasticProcess
generatePath, getArrayMappingCounterToIndex, getCurrentObservation, getCurrentObservationIndex, getNbObservationTimes, getObservation, getObservationTimes, getPath, getSubpath, getX0, hasNextObservation, setObservationTimes, setX0
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

VarianceGammaProcess

public VarianceGammaProcess()

VarianceGammaProcess

public VarianceGammaProcess(double s0,
                            double theta,
                            double sigma,
                            double nu,
                            RandomStream stream)
Constructs a new VarianceGammaProcess with parameters θ = theta, σ = sigma, ν = nu and initial value S(t0) = s0. stream is used to generate both the BrownianMotion B and the GammaProcess G in.


VarianceGammaProcess

public VarianceGammaProcess(double s0,
                            BrownianMotion BM,
                            GammaProcess Gamma)
Constructs a new VarianceGammaProcess. The parameters θ and σ are set to the parameters μ and σ, respectively, of the BrownianMotion BM and the parameter ν is set to the parameter ν of the GammaProcess Gamma. The parameters μ and x0 of the GammaProcess are overwritten to equal 1 and 0 respectively. The initial value of the process is S(t0) = 1#1.

Method Detail

nextObservation

public double nextObservation()
Generates the observation for the next time. It also works with bridge sampling; however both BrownianMotionBridge and GammaProcessBridge must be used in the constructor in that case. Furthermore, for bridge sampling, the order of the observations is that of the bridge, not sequential order.

Overrides:
nextObservation in class StochasticProcess

generatePath

public double[] generatePath()
Generates and returns the path. To do so, it first generates the complete path of the inner GammaProcess and sets the observation times of the inner BrownianMotion to this path. This method is not optimal to reduce the variance in QMC simulations; use generatePath(double[] uniform01) for that.

Specified by:
generatePath in class StochasticProcess

generatePath

public double[] generatePath(double[] uniform01)
Similar to the usual generatePath(), but here the uniform random numbers used for the simulation must be provided to the method. This allows to properly use the uniform random variates in QMC simulations. This method divides the table of uniform random numbers uniform01 in two smaller tables, the first one, containing the odd indices of uniform01 which are used to generate the path of the inner GammaProcess, and the even indices (in the second table) are used to generate the path of the inner BrownianMotion. This way of proceeding reduces the variance as much as possible for QMC simulations.


resetStartProcess

public void resetStartProcess()
Resets the observation index and counter to 0 and applies the resetStartProcess method to the BrownianMotion and the GammaProcess objects used to generate this process.

Overrides:
resetStartProcess in class StochasticProcess

setParams

public void setParams(double s0,
                      double theta,
                      double sigma,
                      double nu)
Sets the parameters S(t0) = s0, θ = theta, σ = sigma and ν = nu of the process. Warning: This method will recompute some quantities stored internally, which may be slow if called repeatedly.


getTheta

public double getTheta()
Returns the value of the parameter θ.


getSigma

public double getSigma()
Returns the value of the parameter σ.


getNu

public double getNu()
Returns the value of the parameter ν.


setObservationTimes

public void setObservationTimes(double[] t,
                                int d)
Sets the observation times on the VarianceGammaProcess as usual, but also sets the observation times of the underlying GammaProcess. It furthermore sets the starting value of the GammaProcess to t[0].

Overrides:
setObservationTimes in class StochasticProcess

setStream

public void setStream(RandomStream stream)
Resets the RandomStream's. Warning: this method sets both the RandomStream of the BrownianMotion and of the GammaProcess to the same RandomStream.

Specified by:
setStream in class StochasticProcess

getStream

public RandomStream getStream()
Returns the random stream of the BrownianMotion process, which should be the same as for the GammaProcess.

Specified by:
getStream in class StochasticProcess

getBrownianMotion

public BrownianMotion getBrownianMotion()
Returns a reference to the inner BrownianMotion.


getGammaProcess

public GammaProcess getGammaProcess()
Returns a reference to the inner GammaProcess.


SSJ
V. 2.6.

To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.