General Usage


This package offers a number of common discrete-time, continuous-time, and noise process objects for generating realizations of stochastic processes as numpy arrays.

The diffusion processes are approximated using the Euler–Maruyama method.

Here are the currently supported processes and how to access their classes:

  • stochastic.processes

    • continuous

      • BesselProcess

      • BrownianBridge

      • BrownianExcursion

      • BrownianMeander

      • BrownianMotion

      • CauchyProcess

      • FractionalBrownianMotion

      • GammaProcess

      • GeometricBrownianMotion

      • InverseGaussianProcess

      • MixedPoissonProcess

      • MultifractionalBrownianMotion

      • PoissonProcess

      • SquaredBesselProcess

      • VarianceGammaProcess

      • WienerProcess

    • diffusion

      • DiffusionProcess (generalized)

      • ConstantElasticityVarianceProcess

      • CoxIngersollRossProcess

      • ExtendedVasicekProcess

      • OrnsteinUhlenbeckProcess

      • VasicekProcess

    • discrete

      • BernoulliProcess

      • ChineseRestaurantProcess

      • DirichletProcess

      • MarkovChain

      • MoranProcess

      • RandomWalk

    • noise

      • BlueNoise

      • BrownianNoise

      • ColoredNoise

      • PinkNoise

      • RedNoise

      • VioletNoise

      • WhiteNoise

      • FractionalGaussianNoise

      • GaussianNoise

Usage patterns

The sample() method

To use stochastic, import the process you want and instantiate with the required parameters. Every process class has a sample method for generating realizations. The sample methods accept a parameter n for the quantity of steps in the realization, but others (Poisson, for instance) may take additional parameters. Parameters can be accessed as attributes of the instance.

from stochastic.processes.discrete import BernoulliProcess

bp = BernoulliProcess(p=0.6)
s = bp.sample(16)
success_probability = bp.p

Continuous processes provide a default parameter, t, which indicates the maximum time of the process realizations. The default value is 1. The sample method will generate n equally spaced increments on the interval [0, t].

The sample_at() method

Some continuous processes also provide a sample_at() method, in which a sequence of time values can be passed at which the object will generate a realization. This method ignores the parameter, t, specified on instantiation.

from stochastic.processes.continuous import BrownianMotion

bm = BrownianMotion(drift=1, scale=1, t=1)
times = [0, 3, 10, 11, 11.2, 20]
s = sample_at(times)

The times() method

Continuous-time processes also provide a method times() which generates the time values (using numpy.linspace) corresponding to a realization of n steps. This is particularly useful for plotting your samples.

import matplotlib.pyplot as plt
from stochastic.processes.continuous import FractionalBrownianMotion

fbm = FractionalBrownianMotion(hurst=0.7, t=1)
s = fbm.sample(32)
times = fbm.times(32)

plt.plot(times, s)

The algorithm option

Some processes provide an optional parameter algorithm, in which one can specify which algorithm to use to generate the realization using the sample() or sample_at() methods. See class-specific documentation for implementations.

from stochastic.processes.noise import FractionalGaussianNoise

fgn = FractionalGaussianNoise(hurst=0.6, t=1)
s = fgn.sample(32, algorithm='hosking')