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) <: AbstractMetropolisIsotropic Gaussian random walk proposal.
Arguments
sigma::Real: Standard deviation of the Gaussian proposal.
WidebandDoA.IndependentMetropolis — TypeIndependentMetropolis(proposal) <: AbstractMetropolisIndependent Metropolis Hastings sampler. (Also known as the independence sampler.)
Arguments
proposal::UnivariateDistribution: Univariate distribution.
WidebandDoA.MetropolisMixture — TypeMetropolisMixture(imh, rwmh; imh_weight) <: AbstractMetropolisMixture 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.