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 by ReversibleJump.

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.UniformNormalLocalProposalType
UniformNormalLocalProposal(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}\]

source

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.SliceType
Slice(window)

Slice sampler with fixed search interval.

Arguments

  • window::AbstractVector: Initial search interval window.
source
WidebandDoA.SliceSteppingOutType
SliceSteppingOut(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.
source
WidebandDoA.SliceDoublingOutType
SliceDoublingOut(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.
source

For more information, refer to the original paper by Neal[N2003].

Info

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.RandomWalkMetropolisType
RandomWalkMetropolis(sigma) <: AbstractMetropolis

Isotropic Gaussian random walk proposal.

Arguments

  • sigma::Real: Standard deviation of the Gaussian proposal.
source
WidebandDoA.IndependentMetropolisType
IndependentMetropolis(proposal) <: AbstractMetropolis

Independent Metropolis Hastings sampler. (Also known as the independence sampler.)

Arguments

  • proposal::UnivariateDistribution: Univariate distribution.
source
WidebandDoA.MetropolisMixtureType
MetropolisMixture(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 probability 1 - imh_weight (default: 0.2)
source

To use these, however, the following wrapper has to be used:

WidebandDoA.WidebandIsoIsoMetropolisType
WidebandIsoIsoMetropolis(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$.
source

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.