A minimalist framework to define State Space Models (SSM) and their associated logdensities to feed into inference algorithms.
This package defines the basic interface needed to run inference on State Space Models as the following:
# State wrapper
abstract type AbstractStateSpaceModel end
"""
Emits a new state candidate from latent dynamics
"""
function transition!! end
"""
Scores the emission transition
"""
function emission_logdensity end
As a concrete example, the following snippet of pseudo-code defines a linear Gaussian state space model:
using SSMProblems, Distributions, Random
# Model definition
T, sig_u, sig_v = 10, 0.1, 0.2
observations = rand(T)
struct LinearSSM <: AbstractStateSpaceModel end
# Model dynamics
function transition!!(rng::AbstractRNG, model::LinearSSM)
return rand(rng, Normal(0, 1))
end
function transition!!(rng::AbstractRNG, model::LinearSSM, state::Float64, ::Int)
return rand(rng, Normal(state, 1))
end
function emission_logdensity(model::LinearSSM, state::Float64, observation::Float64, ::Int)
return logpdf(Normal(0, 1), observation)
end