Rev Language Reference


mvScaleBactrian - Scaling Move Employing Bactrian Distribution

Scales a parameter by a Bactrian-distributed factor.

Usage

mvScaleBactrian(Real x, RealPos lambda, Bool tune, RealPos weight, Probability tuneTarget)

Arguments

x : Real (<stochastic> pass by reference)
The variable this move operates on.
lambda : RealPos (pass by value)
The strength of the proposal.
Default : 1
tune : Bool (pass by value)
Should we tune lambda during burnin?
Default : TRUE
weight : RealPos (pass by value)
The weight determines the relative frequency with which this move will be attempted. For details, see the description of the 'moveschedule' parameter on the documentation page for 'mcmc()'.
Default : 1
tuneTarget : Probability (pass by value)
The acceptance probability targeted by auto-tuning.
Default : 0.44

Details

Proposes multiplicative changes to a real-valued parameter using a Bactrian kernel -- a bimodal distribution centered at zero, obtained as a mixture of two unimodal component distributions. Specifically, `mvScaleBactrian` scales parameter values by a random factor of exp(lambda * delta), where lambda is a tuning parameter and delta is drawn from a mixture of two normal distributions following Yang & Rodríguez (2013: Supplementary Information, Eq. 19): u ~ Unif(0, 1) x ~ N(0, 1) delta = m + x * sqrt(1 - m^2) if u < 0.5 = -m + x * sqrt(1 - m^2) otherwise with m set to 0.95. As a result, the move is less likely to propose very small steps and encourages larger changes, which improves mixing efficiency and reduces autocorrelation. Since multiplicative updates do not change the sign, `mvBactrianScale` is most often applied to parameters that are constrained to be positive.

Example

moves = VectorMoves()
speciation_rate ~ dnGamma(2, 4)
moves.append( mvScaleBactrian(speciation_rate, weight=5) )

See Also