Inference
We provide more details on the inference functionalities provided by WidebandDoA
and ReversibleJump
.
RJMCMC Samplers
Currently, ReversibleJump
provides two RJMCMC samplers:
ReversibleJumpMCMC(order_prior, jump_proposal, mcmc_kernel; jump_rate)
NonReversibleJumpMCMC(jump_proposal, mcmc_kernel; jump_rate)
ReversibleJumpMCMC
is the birth-death-update reversible jump MCMC sampler proposed by Green [G1995], while NonReversibleJumpMCMC
is the non-reversible counterpart described in the paper, and originally proposed by Gagnon and Doucet[GD2020].
Arguments
order_prior
: A prior on the model order.jump_proposal
: A jump proposal provided by WidebandDoA.mcmc_kernel
: An RJMCMC sampler provided byReversibleJump
.
Keyword Arguments
jump_rate::Real
: Upper bound on the probabiliy of proposing a jump move.
Jump Proposals
We only provide a single option for the jump proposals:
WidebandDoA.UniformNormalLocalProposal
— TypeUniformNormalLocalProposal(mu, sigma)
Uniform proposal over the DoAs and a log-normal propsal over the SNR parameters of a source.
Arguments
mu
: Mean of the log-normal proposal on the SNR parameter.sigma
: Standard deviation of the log-normal proposal on the SNR parameter.
This corresponds to the following proposal:
\[\begin{aligned} \phi_j &\sim q\left(\phi\right) = \mathsf{Uniform}\left(-\frac{\pi}{2}, \frac{\pi}{2}\right) \\ \gamma_j &\sim q\left(\gamma\right) = \text{\sf{}Log-Normal}\left(\text{\tt{}mu}, \text{\tt{}sigma}\right) \end{aligned}\]
This should be wrapped with
IndepJumpProposal(prop)
This can then be used as follows:
jump = IndepJumpProposal(prop)
rjmcmc = ReversibleJumpMCMC(order_prior, jump, mcmc)
MCMC Samplers
Slice Samplers
For the update move, we provide the following selection of MCMC samplers:
WidebandDoA.Slice
— TypeSlice(window)
Slice sampler with fixed search interval.
Arguments
window::AbstractVector
: Initial search interval window.
WidebandDoA.SliceSteppingOut
— TypeSliceSteppingOut(max_stepping_out, window)
SliceSteppingOut(window)
Slice sampler with the stepping-out procedure.
Arguments
max_stepping_out::Int
: Maximum number of stepping outs. (default: 32)window::AbstractVector
: Initial search interval window.
WidebandDoA.SliceDoublingOut
— TypeSliceDoublingOut(max_doubling_out, window)
SliceDoublingOut(window)
Slice sampler with the doubling-out procedure.
Arguments
max_stepping_out::Int
: Maximum number of doubling outs. (default: 8)window::AbstractVector
: Initial search interval window.
For more information, refer to the original paper by Neal[N2003].
For sampling from WidebandIsoIsoModel
, the first element of the window is used for the DoA parameter $\phi$, and the last element is used for $\log\lambda$. Therefore, use the following: window = [phi_window, loglambda_window]
.
For example, this can be used as followS:
mcmc = SliceSteppingOut([2.0, 2.0]),
rjmcmc = ReversibleJump.NonReversibleJumpMCMC(jump, mcmc; jump_rate=0.9)
Metropolis-Hastings Samplers
We also provide Metropolis-Hastings samplers:
WidebandDoA.RandomWalkMetropolis
— TypeRandomWalkMetropolis(sigma) <: AbstractMetropolis
Isotropic Gaussian random walk proposal.
Arguments
sigma::Real
: Standard deviation of the Gaussian proposal.
WidebandDoA.IndependentMetropolis
— TypeIndependentMetropolis(proposal) <: AbstractMetropolis
Independent Metropolis Hastings sampler. (Also known as the independence sampler.)
Arguments
proposal::UnivariateDistribution
: Univariate distribution.
WidebandDoA.MetropolisMixture
— TypeMetropolisMixture(imh, rwmh; imh_weight) <: AbstractMetropolis
Mixture kernel of an IMH kernel and RWMH kernel, as originally used by Andrieu and Doucet[AD1999].
Arguments
imh::IndependentMetropolis
: IMH kernel.rwmh::RandomWalkMetropolis
: RWMH kernel.imh_weight::Real
: Mixture weight of selecting the IMH kernel. RWMH kernel is proposed with probability1 - imh_weight
(default: 0.2)
To use these, however, the following wrapper has to be used:
WidebandDoA.WidebandIsoIsoMetropolis
— TypeWidebandIsoIsoMetropolis(phi_kernel, loglambda_kernel)
Wrapper for Metropolis-Hastings (MH) kernels applied to WidebandIsoIsoModel
.
Arguments
phi_kernel::AbstractMetropolis
: MH kernel for the direction-of-arrival parameter $\phi$.loglambda_kernel::AbstractMetropolis
: MH kernel for the SNR parameter $\log\lambda$.
For example, this can be used as followS:
mcmc = WidebandIsoIsoMetropolis(
MetropolisMixture(
IndependentMetropolis(Uniform(-π/2, π/2)),
RandomWalkMetropolis(0.5)
),
RandomWalkMetropolis(0.5)
)
rjmcmc = ReversibleJump.NonReversibleJumpMCMC(jump, mcmc; jump_rate=0.9)
- G1995Green, Peter J. "Reversible jump Markov chain Monte Carlo computation and Bayesian model determination." Biometrika 82.4 (1995): 711-732.
- GD2020Gagnon, Philippe, and Arnaud Doucet. "Nonreversible jump algorithms for Bayesian nested model selection." Journal of Computational and Graphical Statistics 30.2 (2020): 312-323.
- N2003Neal, Radford M. "Slice sampling." The annals of statistics 31.3 (2003): 705-767.
- AD1999Andrieu, Christophe, and Arnaud Doucet. "Joint Bayesian model selection and estimation of noisy sinusoids via reversible jump MCMC." IEEE Transactions on Signal Processing 47.10 (1999): 2667-2676.