LightBayes
This is a Julia package that implements several light-weight Bayesian models, primarily for supporting the research on Bayesian inference and estimation.
Note: This package is still in the experimental stage, and is primarily for support internal research purpose. Also, it has not been registered at the official registry METADATA.jl.
Setup
As it has not been officially registered, you may not use Pkg.add
to install the package. Instead, you should check it out directly as
# enter the directory that hosts the Julia repositories
cd ~/.julia/v0.4
# clone the package
git clone https://github.com/lindahua/LightBayes.jl.git LightBayes
# run the tests to make sure it works
cd LightBayes
julia test/runtests.jl
API
This package introduces an abstract type:
# The base type for all likelihood models,
# which connect the parameters with observations
abstract LikelihoodModel
Here, we assume that both the parameter space and observation space are always vector spaces.
Methods for Prior
Prior distributions are simply using the distributions in the Distributions package. However, for those distributions that may serve as a prior here, we introduce additional methods:
# Let pri be a prior distribution
# compute the unnormalized log-pdf for given parameters
# θ can be either a single parameter or an array of
# multiple parameters
logupdf(pri, θ)
logupdf!(r, pri, θ)
# compute the log-partition value
logpar(pri)
# compute the posterior distribution, given sufficient
# statistics collected from observations
posterior(pri, sstats)
# find the mode of the posterior distribution
# This is useful for MAP estimation
posterior_mode(pri, sstats)
posterior_mode!(r, pri, sstats)
# sample from the posterior distribution
posterior_rand(pri, sstats)
posterior_rand!(r, pri, sstats)
Methods for Likelihood Model
# Let md be a likelihood model
# return a distribution, given parameter
d = withparams(md, θ)
# get the number of samples in X, w.r.t. md
n = nsamples(md, X)
# compute sufficient statistics, given observed data
ss = suffstats(md, X)
ss = suffstats(md, X, inds)
# to get a posterior given data, one can write
post = posterior(pri, suffstats(md, X))
Models
Currently, we implement the following likelihood models
# x ~ N(θ, σ^2), where σ^2 is fixed a priori
# conjugate prior type: IsoNormal
immutable IsoGaussModel <: LikelihoodModel
σ::Float64
end