Type: Package
Title: An MCMC Sampler Using the t-Walk Algorithm
Version: 2.0.0
Maintainer: Rodrigo Fonseca Villa <rodrigo03.villa@gmail.com>
Description: Implements the t-walk algorithm, a general-purpose, self-adjusting Markov Chain Monte Carlo (MCMC) sampler for continuous distributions as described by Christen & Fox (2010) <doi:10.1214/10-BA603>. The t-walk requires no tuning and is robust for a wide range of target distributions, including high-dimensional and multimodal problems. This implementation includes an option for running multiple chains in parallel to accelerate sampling and facilitate convergence diagnostics.
License: GPL-3
Encoding: UTF-8
RoxygenNote: 7.3.2
Imports: parallel, stats, utils
Suggests: mvtnorm, coda, devtools, roxygen2, knitr, rmarkdown, ellipse, ggplot2, ggthemes, gridExtra, reshape2, viridis
VignetteBuilder: knitr
URL: https://github.com/rodrigosqrt3/Rtwalk
BugReports: https://github.com/rodrigosqrt3/Rtwalk/issues
NeedsCompilation: no
Packaged: 2026-01-28 23:38:33 UTC; rodri
Author: Rodrigo Fonseca Villa [aut, cre]
Repository: CRAN
Date/Publication: 2026-02-02 10:50:02 UTC

Generate a proposal for the Blow kernel

Description

Generate a proposal for the Blow kernel

Usage

kernel_blow(n_dim, p_phi, x, xp)

Arguments

n_dim

Dimension of the parameter space.

p_phi

Probability of updating each coordinate.

x

Current point 'x'.

xp

Current point ‘x’'.

Value

A list with the 'proposal', 'n_phi', and 'phi'.


Generate a proposal for the Hop kernel

Description

Generate a proposal for the Hop kernel

Usage

kernel_hop(n_dim, p_phi, x, xp)

Arguments

n_dim

Dimension of the parameter space.

p_phi

Probability of updating each coordinate.

x

Current point 'x'.

xp

Current point ‘x’'.

Value

A list with the 'proposal', 'n_phi', and 'phi'.


Generate a proposal for the Traverse kernel

Description

Generate a proposal for the Traverse kernel

Usage

kernel_traverse(n_dim, p_phi, x, xp, beta)

Arguments

n_dim

Dimension of the parameter space.

p_phi

Probability of updating each coordinate.

x

Current point 'x'.

xp

Current point ‘x’'.

beta

Step parameter beta.

Value

A list with the 'proposal' and 'n_phi' (number of moved coordinates).


Generate a proposal for the Walk kernel

Description

Generate a proposal for the Walk kernel

Usage

kernel_walk(n_dim, p_phi, aw, x, xp)

Arguments

n_dim

Dimension of the parameter space.

p_phi

Probability of updating each coordinate.

aw

Scale parameter 'a_w' (default 1.5).

x

Current point 'x'.

xp

Current point ‘x’'.

Value

A list with the 'proposal' and 'n_phi'.


Calculate the log of the proposal density for the Blow kernel

Description

Calculate the log of the proposal density for the Blow kernel

Usage

log_density_blow(n_phi, phi, h, x, xp)

Arguments

n_phi

Number of moved coordinates.

phi

Boolean vector indicating moved coordinates.

h

Proposed point.

x

Reference point.

xp

Reference point.

Value

The value of -log(g(h)).


Calculate the log of the proposal density for the Hop kernel

Description

Calculate the log of the proposal density for the Hop kernel

Usage

log_density_hop(n_phi, phi, h, x, xp)

Arguments

n_phi

Number of moved coordinates.

phi

Boolean vector indicating moved coordinates.

h

Proposed point.

x

Reference point.

xp

Reference point.

Value

The value of -log(g(h)).


Simulate the beta parameter for the Traverse kernel

Description

Samples beta from the proposal distribution in Section 2.2 of Christen & Fox (2010).

Usage

simulate_beta(at = 6)

Arguments

at

Shape parameter 'a_t' (default 6).

Value

A numeric value for beta.


Run the t-walk MCMC Algorithm

Description

This function implements the t-walk algorithm by Christen & Fox (2010), a general-purpose MCMC sampler that does not require manual tuning. The function can run multiple independent MCMC chains in parallel to accelerate execution and facilitate convergence diagnostics.

Usage

twalk(log_posterior, n_iter, x0, xp0, n_chains = 1, n_cores = NULL, ...)

Arguments

log_posterior

A function that takes a parameter vector as its first argument and returns the scalar log posterior density. Additional arguments can be passed to this function via '...'.

n_iter

The number of iterations to run for each chain.

x0

A numeric vector with the initial values for the first point ('x').

xp0

A numeric vector with the initial values for the second point (‘x’').

n_chains

The number of independent MCMC chains to run. Defaults to '1', which runs a single chain sequentially. If greater than 1, parallel mode is activated.

n_cores

The number of CPU cores to use in parallel mode. If 'NULL' (default), it will attempt to use all available cores minus one.

...

Additional arguments to be passed to the 'log_posterior' function.

Value

A list containing:

all_samples

A matrix with the combined samples from all chains.

acceptance_rate

The average acceptance rate across all chains.

total_iterations

The total number of samples generated (n_iter * n_chains).

n_dim

The dimension of the parameter space.

individual_chains

If 'n_chains > 1', a list containing the raw results from each separate chain, useful for diagnostics like R-hat.

Examples

# Example 1: Sampling from a Bivariate Normal (sequential mode)
# The 'mvtnorm' package is required for this example
if (requireNamespace("mvtnorm", quietly = TRUE)) {
  log_post <- function(x) {
    mvtnorm::dmvnorm(x, mean = c(0, 0), sigma = matrix(c(1, 0.8, 0.8, 1), 2, 2), log = TRUE)
  }

  # Run with fewer iterations for a quick example
  # Set a seed for reproducibility
  set.seed(123)
  result_seq <- twalk(log_posterior = log_post, n_iter = 5000,
                          x0 = c(-1, 1), xp0 = c(1, -1))

  plot(result_seq$all_samples, pch = '.', main = "t-walk Samples (Sequential)")
}


# Example 2: The same problem in parallel (will run faster)
# Using 2 chains. n_iter is now per chain.
if (requireNamespace("mvtnorm", quietly = TRUE)) {
  set.seed(123)
  result_par <- twalk(log_posterior = log_post, n_iter = 2500,
                          x0 = c(-1, 1), xp0 = c(1, -1), n_chains = 2)

  plot(result_par$all_samples, pch = '.', main = "t-walk Samples (Parallel)")
}


Run a single t-walk move (step)

Description

Selects one of the four kernels, generates a proposal, and calculates the Metropolis-Hastings acceptance probability.

Usage

twalk_move(
  n_dim,
  log_post_fun,
  support_fun,
  x,
  U,
  xp,
  Up,
  at = 6,
  aw = 1.5,
  p_phi = min(n_dim, 4)/n_dim,
  p_traverse = 0.4918,
  p_walk = 0.4918,
  p_blow = 0.0082,
  ...
)

Arguments

...

Arguments passed to 'log_post_fun' and 'support_fun'.

Value

A list containing the proposal and the acceptance probability.