# Adaptive Mixture Metropolis (AMM)¶

Implementation of the Roberts and Rosenthal [64] adaptive (multivariate) mixture Metropolis [39][40][51] sampler for simulating autocorrelated draws from a distribution that can be specified up to a constant of proportionality.

## Stand-Alone Function¶

amm!(v::AMMVariate, SigmaF::Cholesky{Float64}, logf::Function; adapt::Bool=true)

Simulate one draw from a target distribution using an adaptive mixture Metropolis sampler. Parameters are assumed to be continuous and unconstrained.

Arguments

• v : current state of parameters to be simulated. When running the sampler in adaptive mode, the v argument in a successive call to the function should contain the tune field returned by the previous call.
• SigmaF : Cholesky factorization of the covariance matrix for the non-adaptive multivariate normal proposal distribution.
• logf : function to compute the log-transformed density (up to a normalizing constant) at v.value.
• adapt : whether to adaptively update the proposal distribution.

Value

Returns v updated with simulated values and associated tuning parameters.

Example

The following example samples parameters in a simple linear regression model. Details of the model specification and posterior distribution can be found in the Supplement.

################################################################################
## Linear Regression
##   y ~ N(b0 + b1 * x, s2)
##   b0, b1 ~ N(0, 1000)
##   s2 ~ invgamma(0.001, 0.001)
################################################################################

using Mamba

## Data
data = [
:x => [1, 2, 3, 4, 5],
:y => [1, 3, 3, 3, 5]
]

## Log-transformed Posterior(b0, b1, log(s2)) + Constant
logf = function(x)
b0 = x[1]
b1 = x[2]
logs2 = x[3]
r = data[:y] - b0 - b1 * data[:x]
(-0.5 * length(data[:y]) - 0.001) * logs2 -
(0.5 * dot(r, r) + 0.001) / exp(logs2) -
0.5 * b0^2 / 1000 - 0.5 * b1^2 / 1000
end

## MCMC Simulation with Adaptive Multivariate Metopolis Sampling
n = 5000
burnin = 1000
sim = Chains(n, 3, names = ["b0", "b1", "s2"])
theta = AMMVariate([0.0, 0.0, 0.0])
SigmaF = cholfact(eye(3))
for i in 1:n
amm!(theta, SigmaF, logf, adapt = (i <= burnin))
sim[i,:,1] = [theta[1:2], exp(theta[3])]
end
describe(sim)

## AMMVariate Type¶

### Declaration¶

AMMVariate <: VectorVariate

### Fields¶

• value::Vector{VariateType} : vector of sampled values.
• tune::AMMTune : tuning parameters for the sampling algorithm.

### Constructors¶

AMMVariate(x::Vector{VariateType}, tune::AMMTune)
AMMVariate(x::Vector{VariateType}, tune=nothing)

Construct a AMMVariate object that stores sampled values and tuning parameters for adaptive mixture Metropolis sampling.

Arguments

• x : vector of sampled values.
• tune : tuning parameters for the sampling algorithm. If nothing is supplied, parameters are set to their defaults.

Value

Returns a AMMVariate type object with fields pointing to the values supplied to arguments x and tune.

## AMMTune Type¶

type AMMTune

### Fields¶

• adapt::Bool : whether the proposal distribution has been adaptively tuned.
• beta::Real : proportion of weight given to draws from the non-adaptive proposal with covariance factorization SigmaF, relative to draws from the adaptively tuned proposal with covariance factorization SigmaLm, during adaptive updating. Fixed at beta = 0.05.
• m::Integer : number of adaptive update iterations that have been performed.
• Mv::Vector{Float64} : running mean of draws v during adaptive updating. Used in the calculation of SigmaLm.
• Mvv::Vector{Float64} : running mean of v * v' during adaptive updating. Used in the calculation of SigmaLm.
• scale::Real : fixed value 2.38^2 in the factor (scale / length(v)) by which the adaptively updated covariance matrix is scaled—adopted from Gelman, Roberts, and Gilks [28].
• SigmaF::Cholesky{Float64} : factorization of the non-adaptive covariance matrix.
• SigmaLm::Matrix{Float64} : lower-triangular factorization of the adaptively tuned covariance matrix.

## Sampler Constructor¶

Construct a Sampler object for adaptive mixture Metropolis sampling. Parameters are assumed to be continuous, but may be constrained or unconstrained.

Arguments

• params : stochastic nodes to be updated with the sampler. Constrained parameters are mapped to unconstrained space according to transformations defined by the Stochastic link() function.

• Sigma : covariance matrix for the non-adaptive multivariate normal proposal distribution. The covariance matrix is relative to the unconstrained parameter space, where candidate draws are generated.

• adapt : type of adaptation phase. Options are
• :all : adapt proposal during all iterations.
• :burnin : adapt proposal during burn-in iterations.
• :none : no adaptation (multivariate Metropolis sampling with fixed proposal).

Value

Returns a Sampler type object.

Example

See the Examples section.