Diffusion Models

The stochastic.processes.diffusion module provides classes for generating discretely sampled continous-time diffusion processes using the Euler–Maruyama method.

class stochastic.processes.diffusion.DiffusionProcess(speed=1, mean=0, vol=1, volexp=0, t=1, rng=None)[source]

Generalized diffusion process.

A base process for more specific diffusion processes.

The process \(X_t\) that satisfies the following stochastic differential equation with Wiener process \(W_t\):

\[dX_t = \theta_t (\mu_t - X_t) dt + \sigma_t X_t^{\gamma_t} dW_t\]

Realizations are generated using the Euler-Maruyama method.

Note

Since the family of diffusion processes have parameters which generalize to functions of t, parameter attributes will be returned as callables, even if they are initialized as constants. e.g. a speed parameter of 1 accessed from an instance attribute will return a function which accepts a single argument and always returns 1.

Parameters
  • speed (func) – the speed of reversion, or \(\theta_t\) above

  • mean (func) – the mean of the process, or \(\mu_t\) above

  • vol (func) – volatility coefficient of the process, or \(\sigma_t\) above

  • volexp (func) – volatility exponent of the process, or \(\gamma_t\) above

  • t (float) – the right hand endpoint of the time interval \([0,t]\) for the process

  • rng (numpy.random.Generator) – a custom random number generator

sample(n, initial=1.0)[source]

Generate a realization.

Parameters
  • n (int) – the number of increments to generate

  • initial (float) – the initial value of the process

property t

End time of the process.

times(n)

Generate times associated with n increments on [0, t].

Parameters

n (int) – the number of increments

class stochastic.processes.diffusion.ConstantElasticityVarianceProcess(drift=1, vol=1, volexp=1, t=1, rng=None)[source]

Constant elasticity of variance process.

_images/constant_elasticity_variance_process.png

The process \(X_t\) that satisfies the following stochastic differential equation with Wiener process \(W_t\):

\[dX_t = \mu X_t dt + \sigma X_t^\gamma dW_t\]

Realizations are generated using the Euler-Maruyama method.

Note

Since the family of diffusion processes have parameters which generalize to functions of t, parameter attributes will be returned as callables, even if they are initialized as constants. e.g. a speed parameter of 1 accessed from an instance attribute will return a function which accepts a single argument and always returns 1.

Parameters
  • drift (float) – the drift coefficient, or \(\mu\) above

  • vol (float) – the volatility coefficient, or \(\sigma\) above

  • volexp (float) – the volatility-price exponent, or \(\gamma\) above

  • t (float) – the right hand endpoint of the time interval \([0,t]\) for the process

  • rng (numpy.random.Generator) – a custom random number generator

sample(n, initial=1.0)

Generate a realization.

Parameters
  • n (int) – the number of increments to generate

  • initial (float) – the initial value of the process

property t

End time of the process.

times(n)

Generate times associated with n increments on [0, t].

Parameters

n (int) – the number of increments

class stochastic.processes.diffusion.CoxIngersollRossProcess(speed=1, mean=0, vol=1, t=1, rng=None)[source]

Cox-Ingersoll-Ross process.

_images/cox_ingersoll_ross_process.png

A model for instantaneous interest rate.

The process \(X_t\) that satisfies the following stochastic differential equation with Wiener process \(W_t\):

\[dX_t = \theta (\mu - X_t) dt + \sigma \sqrt{X_t} dW_t\]

Realizations are generated using the Euler-Maruyama method.

Note

Since the family of diffusion processes have parameters which generalize to functions of t, parameter attributes will be returned as callables, even if they are initialized as constants. e.g. a speed parameter of 1 accessed from an instance attribute will return a function which accepts a single argument and always returns 1.

Parameters
  • speed (float) – the speed of reversion, or \(\theta\) above

  • mean (float) – the mean of the process, or \(\mu\) above

  • vol (float) – volatility coefficient of the process, or \(\sigma\) above

  • t (float) – the right hand endpoint of the time interval \([0,t]\) for the process

  • rng (numpy.random.Generator) – a custom random number generator

sample(n, initial=1.0)

Generate a realization.

Parameters
  • n (int) – the number of increments to generate

  • initial (float) – the initial value of the process

property t

End time of the process.

times(n)

Generate times associated with n increments on [0, t].

Parameters

n (int) – the number of increments

class stochastic.processes.diffusion.OrnsteinUhlenbeckProcess(speed=1, vol=1, t=1, rng=None)[source]

Ornstein-Uhlenbeck process.

_images/ornstein_uhlenbeck_process.png

The process \(X_t\) that satisfies the following stochastic differential equation with Wiener process \(W_t\):

\[dX_t = - \theta X_t dt + \sigma dW_t\]

Realizations are generated using the Euler-Maruyama method.

Note

Since the family of diffusion processes have parameters which generalize to functions of t, parameter attributes will be returned as callables, even if they are initialized as constants. e.g. a speed parameter of 1 accessed from an instance attribute will return a function which accepts a single argument and always returns 1.

Parameters
  • speed (float) – the speed of reversion, or \(\theta\) above

  • vol (float) – volatility coefficient of the process, or \(\sigma\) above

  • t (float) – the right hand endpoint of the time interval \([0,t]\) for the process

  • rng (numpy.random.Generator) – a custom random number generator

sample(n, initial=1.0)

Generate a realization.

Parameters
  • n (int) – the number of increments to generate

  • initial (float) – the initial value of the process

property t

End time of the process.

times(n)

Generate times associated with n increments on [0, t].

Parameters

n (int) – the number of increments

class stochastic.processes.diffusion.VasicekProcess(speed=1, mean=1, vol=1, t=1, rng=None)[source]

Vasicek process.

A model for instantaneous interest rate.

_images/vasicek_process.png

The Vasicek process \(X_t\) that satisfies the following stochastic differential equation with Wiener process \(W_t\):

\[dX_t = \theta (\mu - X_t) dt + \sigma dW_t\]

Realizations are generated using the Euler-Maruyama method.

Note

Since the family of diffusion processes have parameters which generalize to functions of t, parameter attributes will be returned as callables, even if they are initialized as constants. e.g. a speed parameter of 1 accessed from an instance attribute will return a function which accepts a single argument and always returns 1.

Parameters
  • speed (float) – the speed of reversion, or \(\theta\) above

  • mean (float) – the mean of the process, or \(\mu\) above

  • vol (float) – volatility coefficient of the process, or \(\sigma\) above

  • t (float) – the right hand endpoint of the time interval \([0,t]\) for the process

  • rng (numpy.random.Generator) – a custom random number generator

sample(n, initial=1.0)

Generate a realization.

Parameters
  • n (int) – the number of increments to generate

  • initial (float) – the initial value of the process

property t

End time of the process.

times(n)

Generate times associated with n increments on [0, t].

Parameters

n (int) – the number of increments