ABCDistances.jl

Performs approximate Bayesian computation (ABC) using various distance functions
Popularity
5 Stars
Updated Last
5 Months Ago
Started In
January 2015

ABCDistances

This pacakge contains several Approximate Bayesian Computation (ABC) algorithms.

It is created for the paper "Adapting the ABC distance function" with the aim of comparing various approaches to distance selection. Code in the examples directory performs the analyses in the paper.

Version 0.0.1 matches the v1 and v2 arXiv submissions and is written for Julia v0.3. Version 0.1.0 matches the published paper (v3 on arXiv) and is written for Julia v0.4. Version 0.1.1 updates v0.1.0 for Julia v0.5. Version 0.2.0 is an update for Julia v0.6.

This document gives a quick usage example then documents the commands.

Example

First code for the model and summary statistics of interest must be set up. Here the model is the g-and-k distribution and the summary statistics are order statistics. Code for simulating from this distribution is included in the package.

using ABCDistances;
quantiles = [1250*i for i in 1:7];
ndataset = 10000;
##Simulate from the model and return summary statistics
function sample_sumstats(pars::Array{Float64,1})
    success = true
    stats = rgk_os(pars, quantiles, ndataset)
    (success, stats)
end

##Generate the observed summary statistics
theta0 = [3.0,1.0,1.5,0.5];
srand(1);
(success, sobs) = sample_sumstats(theta0)

Next the prior distribution is specified. This is simply 4 independent Uniform(0,10) random variables.

using Distributions
import Distributions.length, Distributions._rand!, Distributions._pdf ##So that these can be extended

type GKPrior <: ContinuousMultivariateDistribution
end

function length(d::GKPrior)
    4
end

function _rand!{T<:Real}(d::GKPrior, x::AbstractVector{T})
    x = 10.0*rand(4)
end

function _pdf{T<:Real}(d::GKPrior, x::AbstractVector{T})
    if (all(0.0 .<= x .<= 10.0))
        return 0.0001
    else
        return 0.0
    end
end

Next an ABCInput type is created and populated using the above. Note abcdist must be a subtype of ABCDistance. Several options are defined in distances.jl.

abcinput = ABCInput();
abcinput.prior = GKPrior();
abcinput.sample_sumstats = sample_sumstats;
abcinput.abcdist = WeightedEuclidean(sobs);
abcinput.nsumstats = 7;

Now an ABC algorithm can be run. The following commands run an ABC-rejection algorithm.

The first command (3rd argument is an integer) returns the 200 best fitting simulations from 10000 total.

The second command (3rd argument is floating point) returns any simulations from 10000 total with distance below the threshold specified.

abcRejection(abcinput, 10000, 200)
abcRejection(abcinput, 10000, 0.3)

The next command runs an ABC PMC algorithm. See documentation for details of the arguments.

out = abcPMC3(abcinput, 200, 1/2, 10000);

Marginal estimates of parameter mean and variances can be calculated from ABC PMC output as follows.

parameter_means(out)
parameter_vars(out)