Library

Library

Important concepts

ContinuousTimeProcess{T}

Types inheriting from the abstract type ContinuousTimeProcess{T} characterize the properties of a T-valued stochastic process, play a similar role as distribution types like Exponential in the package Distributions.

source
SamplePath{T} <: AbstractPath{T}

The struct

struct SamplePath{T}
    tt::Vector{Float64}
    yy::Vector{T}
    SamplePath{T}(tt, yy) where {T} = new(tt, yy)
end

serves as container for discretely observed ContinuousTimeProcesses and for the sample path returned by direct and approximate samplers. tt is the vector of the grid points of the observation/simulation and yy is the corresponding vector of states.

It supports getindex, setindex!, length, copy, vcat, start, next, done, endof.

source

Like VSamplePath, but with assumptions on tt and dimensionality. Planned replacement for VSamplePath

source
Base.valtypeFunction.
valtype(::ContinuousTimeProcess) -> T

Returns statespace (type) of a ContinuousTimeProcess{T].

source
Bridge.outertypeFunction.
outertype(P::ContinuousTimeProcess) -> T

Returns the type of outer(x), where x is a state of P

source

Ordinary differential equations and quadrature

ODESolver

Abstract (super-)type for solving methods for ordinary differential equations.

source
Bridge.solve!Function.
solve!(method, F, X::SamplePath, x0, P) -> X, [err]
solve!(method, X::SamplePath, x0, F) -> X, [err]

Solve ordinary differential equation $(d/dx) x(t) = F(t, x(t))$ or $(d/dx) x(t) = F(t, x(t), P)$ on the fixed grid X.tt writing into X.yy .

method::R3 - using a non-adaptive Ralston (1965) update (order 3).

method::BS3 use non-adaptive Bogacki–Shampine method to give error estimate.

Call _solve! to inline. "Pretty fast if x is a bitstype or a StaticArray."

source
solve!(::EulerMaruyama, Y, u, W, P) -> X

Solve stochastic differential equation $dX_t = b(t,X_t)dt + σ(t,X_t)dW_t$ using the Euler-Maruyama scheme in place.

source
Bridge.R3Type.
R3

Ralston (1965) update (order 3 step of the Bogacki–Shampine 1989 method) to solve $y(t + dt) - y(t) = \int_t^{t+dt} F(s, y(s)) ds$.

source
Bridge.BS3Type.
BS3

Ralston (1965) update (order 3 step of the Bogacki–Shampine 1989 method) to solve $y(t + dt) - y(t) = \int_t^{t+dt} F(s, y(s)) ds$. Uses Bogacki–Shampine method to give error estimate.

source
Bridge.LeftRuleType.
LeftRule <: QuadratureRule

Integrate using left Riemann sum approximation.

source
fundamental_matrix(tt, P)

Compute fundamental solution.

source

Brownian motion

Stochastic differential equations

Bridge.aFunction.
a(t, x, P::ProcessOrCoefficients)

Fallback for a(t, x, P) calling σ(t, x, P)*σ(t, x, P)'.

source
StatsBase.sampleFunction.
sample(tt, P, x1=zero(T))

Sample the process P on the grid tt exactly from its transitionprob(-ability) starting in x1.

source
sample(::Thinning, T, P::InhomogPoisson) -> tt
source
StatsBase.sample!Function.
sample!(X, P, x1=zero(T))

Sample the process P on the grid X.tt exactly from its transitionprob(-ability) starting in x1 writing into X.yy.

source
Bridge.quvarFunction.
quvar(X)

Computes the (realized) quadratic variation of the path X.

source
Bridge.bracketFunction.
bracket(X)
bracket(X,Y)

Computes quadratic variation process of X (of X and Y).

source
Bridge.itoFunction.
ito(Y, X)

Integrate a stochastic process Y with respect to a stochastic differential dX.

source
Bridge.girsanovFunction.
girsanov(X::SamplePath, P::ContinuousTimeProcess, Pt::ContinuousTimeProcess)

Girsanov log likelihood $\mathrm{d}P/\mathrm{d}Pt(X)$

source
Bridge.lpFunction.
lp(s, x, t, y, P)

Log-transition density, shorthand for logpdf(transitionprob(s,x,t,P),y).

source
Bridge.llikelihoodFunction.
llikelihood(X::SamplePath, P::ContinuousTimeProcess)

Log-likelihood of observations X using transition density lp.

source
llikelihood(X::SamplePath, Pº::LocalGammaProcess, P::LocalGammaProcess)

Log-likelihood dPº/dP. (Up to proportionality.)

source
llikelihood(X::SamplePath, P::LocalGammaProcess)

Bridge log-likelihood with respect to reference measure P.P. (Up to proportionality.)

source
Bridge.solveFunction.
solve(method::SDESolver, u, W::SamplePath, P) -> X
solve(method::SDESolver, u, W::SamplePath, (b, σ)) -> X

Solve stochastic differential equation $dX_t = b(t,X_t)dt + σ(t,X_t)dW_t$ using method in place.

Example

solve(EulerMaruyama(), 1.0, sample(0:0.1:10, Wiener()), ((t,x)->-x, (t,x)->I))
import Bridge: b, σ
struct OU <: ContinuousTimeProcess{Float64}
    μ::Float64
end
Bridge.b(s, x, P::OU) = -P.μ*x
Bridge.σ(s, x, P::OU) = I

solve(EulerMaruyama(), 1.0, sample(0:0.1:10, Wiener()), OU(1.4))
source
solve(method::SDESolver, u, W::VSamplePath, P) -> X

Solve stochastic differential equation $dX_t = b(t,X_t)dt + σ(t,X_t)dW_t$ using method.

source
Bridge.eulerFunction.
euler(u, W, P) -> X

Solve stochastic differential equation $dX_t = b(t,X_t)dt + σ(t,X_t)dW_t$ using the Euler scheme.

source
Bridge.euler!Function.
euler!(Y, u, W, P) -> X

Solve stochastic differential equation $dX_t = b(t,X_t)dt + σ(t,X_t)dW_t$ using the Euler scheme in place.

source
EulerMaruyama() <: SDESolver

Euler-Maruyama scheme. Euler is defined as alias.

source
Bridge.EulerType.
EulerMaruyama() <: SDESolver

Euler-Maruyama scheme. Euler is defined as alias.

source
StochasticRungeKutta() <: SDESolver

Stochastic Runge-Kutta scheme for T<:Number-valued processes.

source
StochasticHeun() <: SDESolver

Stochastic heun scheme.

source
Bridge.NoDriftType.
NoDrift(tt, B, β, a)
source

In place solvers

Bridge.R3!Type.
R3!

Inplace Ralston (1965) update (order 3 step of the Bogacki–Shampine 1989 method) to solve $y(t + dt) - y(t) = \int_t^{t+dt} F(s, y(s)) ds$.

source
Bridge.σ!Function.
σ!(t, y, Δw, tmp2, P)

Compute stochastic increment at y, $σ Δw$, modifying tmp2.

source
Bridge.b!Function.
b!(t, y, tmp1, P)

Compute drift $b$ in y (without factor $Δt$, modifying tmp1.

source

Levy processes

GammaProcess

A GammaProcess with jump rate γ and inverse jump size λ has increments Gamma(t*γ, 1/λ) and Levy measure

\[ν(x)=γ x^{-1}\exp(-λ x), \]

Here Gamma(α,θ) is the Gamma distribution in julia's parametrization with shape parameter α and scale θ.

source
GammaBridge(t, v, P)

A GammaProcess P conditional on htting v at time t.

source
ExpCounting(λ)

Counting process with arrival times arrival(P) = Exponential(1/λ) and unit jumps.

source
CompoundPoisson{T} <: LevyProcess{T}

Abstract type. For a compound Poisson process define rjumpsize(P) -> T and arrival(P) -> Distribution.

source
Bridge.nuFunction.
 nu(k, P)

(Bin-wise) integral of the Levy measure $\nu(B_k)$ (sic).

source
uniformthinning!(X, P::GammaProcess, γᵒ)

Return a Gamma process Y with new intensity γᵒ, such that X-Y has intensity γ-γᵒ and Y and X-Y are independent. In the limit $dt \to \infty$ the new Gamma process has each of is jump removed with probability γᵒ/γ. Overwrites X with Y.

source

Poisson processes

ThinningAlg(λmax)

Sampling method for InhomogPoisson by the 'thinning' algorithm.

Examples:

sample(Thinning(λmax), T, InhomogPoisson(λ))
source
InhomogPoisson(λ)

Inhomogenous Poisson process with intensity function λ(t). See also ThinningAlg.

source

Bessel processes

Bessel3Bridge(t, v, σ)

Bessel(3) bridge from below or above to the point v at time t, not crossing v, with dispersion σ.

source
BesselProp

Bessel type proposal

source

Miscellaneous

Bridge.endpoint!Function.
endpoint!(X::SamplePath, v)

Convenience functions setting the endpoint of X tov`.

source
Bridge.innerFunction.
inner(x[, y])

Short-hand for quadratic form x'x (or x'y).

source
Bridge.cumsum0Function.
cumsum0(x)

Cumulative sum starting at 0 such that cumsum0(diff(x)) ≈ x.

source
Bridge.matFunction.
mat(yy::Vector{SVector})

Reinterpret X or yy to an array without change in memory.

source
Bridge.outerFunction.
outer(x[, y])

Short-hand for quadratic form xx' (or xy').

source
Bridge.CSplineType.
CSpline(s, t, x, y = x, m0 = (y-x)/(t-s), m1 = (y-x)/(t-s))

Cubic spline parametrized by $f(s) = x$ and $f(t) = y$, $f'(s) = m_0$, $f'(t) = m_1$.

source
Bridge.integrateFunction.
integrate(cs::CSpline, s, t)

Integrate the cubic spline from s to t.

source
Bridge.logpdfnormalFunction.
logpdfnormal(x, Σ)

logpdf of centered Gaussian with covariance Σ

source
Bridge.runmeanFunction.
runmean(x)

Running mean of the vector x.

source
Bridge.PSDType.
PSD{T}

Simple wrapper for the lower triangular Cholesky root of a positive (semi-)definite element σ.

source
Bridge.GaussianType.
Gaussian(μ, Σ) -> P

Gaussian distribution with mean μand covarianceΣ. Definesrand(P)and(log-)pdf(P, x). Designed to work withNumbers,UniformScalings,StaticArraysandPSD`-matrices.

Implementation details: On Σ the functions logdet, whiten and unwhiten (or chol as fallback for the latter two) are called.

source
Bridge.refineFunction.
refine(tt, n)

Refine range by decreasing stepsize by a factor n.

source
Bridge.quaternionFunction.
quaternion(m::SMatrix{3,3})

Compute the (rotation-) quarternion of a 3x3 rotation matrix. Useful to create isodensity ellipses from spheres in GL visualizations.

source
Bridge._viridisConstant.
_viridis

Color data of the Viridis map by Nathaniel J. Smith, Stefan van Der Walt, Eric Firing from https://github.com/BIDS/colormap/blob/master/colormaps.py .

source

Online statistics

Online updating of the tuple state = (m, m2, n) where

m - mean(x[1:n])

m2 - sum of squares of differences from the current mean, $\textstyle\sum_{i=1}^n (x_i - \bar x_n)^2$

n - number of iterations

Bridge.mcstartFunction.
mcstart(x) -> state

Create state for random chain online statitics. The entries/value of x are ignored

source
Bridge.mcnextFunction.
mcnext(state, x) -> state

Update random chain online statistics when new chain value x was observed. Return new state.

source
Bridge.mcbandFunction.
mcband(mc)

Compute marginal 95% coverage interval for the chain from normal approximation.

source
Bridge.mcbandmeanFunction.
mcmeanband(mc)

Compute marginal confidence interval for the chain mean using normal approximation

source
Bridge.mcstatsFunction.
mcstats(mc)

Compute mean and covariance estimates.

source
mcmarginalstats(mcstates) -> mean, std

Compute meanand marginal standard deviationsstd` for 2d plots.

source

Linear Processes

Bridge.LinProType.
LinPro(B, μ::T, σ)

Linear diffusion $dX = B(X - μ)dt + σdW$.

source
Bridge.PtildeType.
Ptilde(cs::CSpline, σ)

Affine diffusion $dX = cs(t) dt + σdW$ with cs a cubic spline ::CSpline.

source
LinearNoiseAppr(tt, P, x, a, direction = forward)

Precursor of the linear noise approximation of P. For now no attempt is taken to add in a linearization around the deterministic path. direction can be one of :forward, :backward or :nothing. The latter corresponds to choosing β == 0.

source
LinearAppr(tt, B, β, a)
source
LinProBridge

Bridge process of P::LinPro with μ == 0 conditional on ending in v at time t.

source

Bridges

GuidedProp

General bridge proposal process, only assuming that Pt defines H and r in the right way.

source
GuidedBridge

Guided proposal process for diffusion bridge using backward recursion.

GuidedBridge(tt, P, Pt, v)

Constructor of guided proposal process for diffusion bridge of P to v on the time grid tt using guiding term derived from linear process Pt.

GuidedPBridge(tt, P, Pt, V, H♢)

Guided proposal process for diffusion bridge of P to v on the time grid tt using guiding term derived from linear process Pt. Initialize using Bridge.gpupdate(H♢, V, L, Σ, v)

source
BridgePre() <: SDESolver

Precomputed Euler-Maruyama scheme for bridges using bi.

source
BridgeProp(Target::ContinuousTimeProcess, tt, v, a, cs)

Simple bridge proposal derived from a linear process with time dependent drift given by a CSpline and constant diffusion coefficient a.

source
Bridge.MdbType.
Mdb() <: SDESolver

Euler scheme with the diffusion coefficient correction of the modified diffusion bridge.

source
Bridge.bridgeFunction.
bridge(method, W, P) -> Y

Integrate with method, where P is a bridge proposal.

Examples

cs = Bridge.CSpline(tt[1], tt[end], Bridge.b(tt[1], v[1], P),  Bridge.b(tt[end], v[2], P))
P° = BridgeProp(Pσ, v), Pσ.a, cs)
W = sample(tt, Wiener())
bridge(BridgePre(), W, P°)
source
Bridge.bridge!Function.
bridge!(method, Y, W, P) -> Y

Integrate with method, where P is a bridge proposal overwritingY`.

source
Bridge.VsFunction.
Vs(s, T1, T2, v, P)

Time changed V for generation of U.

source
Bridge.gpV!Function.

gpV!(K::SamplePath, P, KT=zero(T))

Precompute V from $(d/dt)V = BV + β$, $V_T = v$ for a guided proposal.

source
Bridge.rFunction.
r(t, x, T, v, P)

Returns $r(t,x) = \operatorname{grad}_x \log p(t,x; T, v)$ where $p$ is the transition density of the process $P$.

source
Bridge.gpHinv!Function.
gpHinv!(K::SamplePath, P, KT=zero(T))

Precompute $K = H^{-1}$ from $(d/dt)K = BK + KB' + a$ for a guided proposal.

source
Bridge.gpupdateFunction.
gpupdate(H♢, V, L, Σ, v)
gpupdate(P, L, Σ, v)

Return updated H♢, V when observation v at time zero with error Σ is observed.

source

Unsorted

LocalGammaProcess
source
Bridge.compensator0Function.
compensator0(kstart, P::LocalGammaProcess)

Compensator of GammaProcess approximating the LocalGammaProcess. For kstart == 1 (only choice) this is $\nu_0([b_1,\infty)$.

source
Bridge.compensatorFunction.
compensator(kstart, P::LocalGammaProcess)

Compensator of LocalGammaProcess For kstart = 1, this is $\sum_{k=1}^N \nu(B_k)$, for kstart = 0, this is $\sum_{k=0}^N \nu(B_k) - C$ (where $C$ is a constant).

source
Bridge.θFunction.
θ(x, P::LocalGammaProcess)

Inverse jump size compared to gamma process with same alpha and beta.

source
Bridge.softFunction.
soft(t, T1, T2)

Time change mapping s in [T1, T2](U-time) tot`in[T1, T2](X`-time).

source
Bridge.tofsFunction.
tofs(s, T1, T2)

Time change mapping t in [T1, T2] ($X$-time) to s in [T1, T2] (U-time).

source
Bridge.dotVsFunction.
dotVs (s, T1, T2, v, P)

Time changed time derivative of V for generation of U.

source
SDESolver

Abstract (super-)type for solving methods for stochastic differential equations.

source
Increments{S<:AbstractPath{T}}

Iterator over the increments of an AbstractPath. Iterates over (i, tt[i], tt[i+1]-tt[i], yy[i+1]-y[i]).

source
Bridge.sizedtypeFunction.
sizedtype(x) -> T

Return an extended type which preserves size information. Makes one(T) and zero(T) for vectors possible.

source
Bridge.piecewiseFunction.
piecewise(X::SamplePath, [endtime]) -> tt, xx

If X is a jump process with piecewise constant paths and jumps in X.tt, piecewise returns coordinates path for plotting purposes. The second argument allows to choose the right endtime of the last interval.

source
BridgePre!() <: SDESolver

Precomputed, replacing Euler-Maruyama scheme for bridges using bi.

source
Bridge.aeulerFunction.
aeuler(u, s:dtmax:t, P, tau=0.5)

Adaptive Euler-Maruyama scheme from https://arxiv.org/pdf/math/0601029.pdf sampling a path from u at s to t with adaptive stepsize of 2.0^(-k)*dtmax

source