Skip to contents

[Experimental] Propose points using a modified version of the No-Underrun Sampler (NURS), a gradient-free variant of the No-U-Turn Sampler (NUTS). Samples are generated by defining a line through an initial live point and drawing candidates from a lattice along this line.

Usage

no_underrun(adaptive_scale, fixed_scale, steps = 3, max_orbits = 8L)

Arguments

adaptive_scale, fixed_scale

Choose one:

  • adaptive_scale: Number between 0 and 1. Updates the width of the sampling lattice based on quantiles of inter-point distances.

  • fixed_scale: Positive number. Sets the width of the sampling lattice, which remains constant throughout sampling.

steps

Positive integer. Number of steps to take when generating a proposal point.

max_orbits

Positive integer. Controls the maximum size of the orbit lattice built by the sampler (2 ^ max_orbits).

Value

An object of class c("nurs", "ernest_lrps") for use with ernest_sampler() to specify sampling behaviour.

Details

The No-Underrun Sampler (NURS) is a gradient-free Markov chain Monte Carlo method, related to both Hit-and-Run and No-U-Turn Samplers. This function adapts NURS for likelihood-restricted prior sampling, ensuring all samples meet a minimum likelihood criterion.

For each steps of the algorithm, we do the following:

  1. From the current live point \(x_0\), sample a direction \(\rho\) from the unit hypersphere, defining a line through \(x_0\).

  2. Propose an initial shift along this line by a distance \(U[-h/2, h/2]\), where \(h\) is the current lattice scale. Accept if the shifted point meets the likelihood criterion \(c\).

  3. Generate an orbit of points around the shifted \(x_0\) as a lattice with spacing \(h\), using a doubling procedure. Stop if (a) the orbit exceeds the unit hypercube, or (b) the recursive condition $$max(l_{left}, l_{right}) < c$$ fails, where \(l_{left}\) and \(l_{right}\) are the likelihoods at the lattice ends.

  4. Randomly select one point from the final lattice as the new live point.

Choose fixed_scale to keep \(h\) constant, or adaptive_scale to update \(h\) from inter-point distances. See References for details on tuning.

Status

This LRPS is experimental and has not been extensively validated across different nested sampling problems. You are encouraged to use it, but please exercise caution interpretting results and report any issues or unexpected behaviour.

References

Bou-Rabee, N., Carpenter, B., Liu, S., & Oberdörster, S. (2025). The No-Underrun Sampler: A Locally-Adaptive, Gradient-Free MCMC Method (Version 2). arXiv. doi:10.48550/ARXIV.2501.18548

Examples

# Basic usage with default parameters
lrps <- no_underrun(adaptive_scale = 0.01)

# Conservative settings for difficult problems
robust_lrps <- no_underrun(
  fixed_scale = 0.01,
  steps = 5
)