The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Package {LangevinFlow}


Type: Package
Title: Langevin Diffusion Samplers with a C++ Backend
Version: 0.1.0
Description: Provides lightweight, dependency-minimal implementations of Langevin diffusion based Markov chain Monte Carlo samplers, including the Unadjusted Langevin Algorithm (ULA) and the Metropolis-Adjusted Langevin Algorithm (MALA). The core sampling loops are written in C++ via 'Rcpp' and 'RcppArmadillo' for performance, while exposing a simple R-level interface where the user supplies the gradient of the negative log-density (and, for MALA, the negative log-density itself). Intended as a building block for Bayesian inference and stochastic optimization rather than a full probabilistic programming framework. Methods follow Roberts and Tweedie (1996) <doi:10.2307/3318418> and Roberts and Rosenthal (1998) <doi:10.1111/1467-9868.00123>.
License: MIT + file LICENSE
Encoding: UTF-8
Depends: R (≥ 3.5.0)
Imports: Rcpp (≥ 1.0.0), stats, graphics
LinkingTo: Rcpp, RcppArmadillo
Suggests: testthat (≥ 3.0.0), knitr, rmarkdown, covr
VignetteBuilder: knitr
RoxygenNote: 7.3.3
URL: https://github.com/BehroozMoosavi/LangevinFlow
BugReports: https://github.com/BehroozMoosavi/LangevinFlow/issues
Config/testthat/edition: 3
NeedsCompilation: yes
Packaged: 2026-05-26 20:57:48 UTC; behroozmoosavi
Author: Behrooz Moosavi ORCID iD [aut, cre]
Maintainer: Behrooz Moosavi <bem159@pitt.edu>
Repository: CRAN
Date/Publication: 2026-05-29 12:30:03 UTC

LangevinFlow: Langevin Diffusion Samplers with a C++ Backend

Description

Provides Markov chain Monte Carlo samplers based on overdamped Langevin diffusion. The unadjusted variant (ula) implements the Euler-Maruyama discretization directly; the Metropolis-adjusted variant (mala) corrects the discretization bias with an accept/reject step.

Sign convention

All samplers expect the user to supply derivatives of the potential U(x) = -\log \pi(x), not the log-density itself. That is, if your target density is \pi(x) \propto \exp(-\beta U(x)), you pass U and \nabla U. This matches the physics convention in the Langevin SDE

dX_t = -\nabla U(X_t)\,dt + \sqrt{2/\beta}\,dW_t.

Main functions

Author(s)

Maintainer: Behrooz Moosavi bem159@pitt.edu (ORCID)

References

Roberts, G. O., & Tweedie, R. L. (1996). Exponential convergence of Langevin distributions and their discrete approximations. Bernoulli, 2(4), 341-363.

Roberts, G. O., & Rosenthal, J. S. (1998). Optimal scaling of discrete approximations to Langevin diffusions. Journal of the Royal Statistical Society, Series B, 60(1), 255-268.

See Also

Useful links:


Metropolis-Adjusted Langevin Algorithm

Description

Asymptotically exact sampler for \pi(x) \propto \exp(-\beta U(x)). At each step a Langevin proposal is generated as in ula and then accepted or rejected by the Metropolis-Hastings rule so that \pi is exactly invariant. Optimal acceptance rates are typically near 0.574 in high dimension (Roberts & Rosenthal, 1998).

Usage

mala(init_x, U, grad_u, step_size, n_iter, beta = 1, burn_in = 0L)

Arguments

init_x

Numeric vector. Starting state of the chain.

U

Function. Takes a numeric vector of length length(init_x) and returns the scalar potential U(x) = -\log \pi(x) (additive constants do not matter).

grad_u

Function. Returns the gradient of U; same shape convention as for ula.

step_size

Positive numeric scalar. Discretization step \gamma.

n_iter

Positive integer. Number of iterations.

beta

Positive numeric scalar. Inverse temperature; defaults to 1.

burn_in

Non-negative integer, strictly less than n_iter. Defaults to 0.

Value

An object of class "langevin_chain" (see ula for structure). The acceptance_rate component is populated and accepted is a logical vector indicating per-iteration outcomes (post-burn-in).

References

Roberts, G. O., & Rosenthal, J. S. (1998). Optimal scaling of discrete approximations to Langevin diffusions. Journal of the Royal Statistical Society, Series B, 60(1), 255-268.

See Also

ula

Examples

# Standard 2D Gaussian: U(x) = 0.5 * ||x||^2.
set.seed(1)
U      <- function(x) 0.5 * sum(x^2)
grad_u <- function(x) x
fit <- mala(init_x = c(3, -3), U = U, grad_u = grad_u,
            step_size = 0.3, n_iter = 2000, burn_in = 500)
summary(fit)


Plot a Langevin Chain

Description

Trace plot for each dimension, plus a marginal histogram. For high-dimensional chains, only the first max_dim coordinates are shown.

Usage

## S3 method for class 'langevin_chain'
plot(x, max_dim = 4L, ...)

Arguments

x

An object of class "langevin_chain".

max_dim

Maximum number of coordinates to display. Defaults to 4.

...

Passed to plot.

Value

Called for side effect. Returns x invisibly.


Summarize a Langevin Chain

Description

Computes per-coordinate posterior summaries (mean, standard deviation, and selected quantiles) from a fitted Langevin chain.

Usage

## S3 method for class 'langevin_chain'
summary(object, probs = c(0.025, 0.5, 0.975), ...)

Arguments

object

An object of class "langevin_chain".

probs

Numeric vector of probabilities for quantile computation.

...

Currently unused.

Value

Invisibly, a data frame of summaries. Printed by default.


Unadjusted Langevin Algorithm

Description

Draws a Markov chain whose stationary distribution approximates \pi(x) \propto \exp(-\beta U(x)) using the Euler-Maruyama discretization of the overdamped Langevin diffusion. The discretization introduces a bias that vanishes as step_size tends to zero; for an asymptotically exact sampler, use mala.

Usage

ula(init_x, grad_u, step_size, n_iter, beta = 1, burn_in = 0L)

Arguments

init_x

Numeric vector. Starting state of the chain. Its length defines the dimension.

grad_u

Function. Takes a numeric vector of length length(init_x) and returns the gradient of U(x) = -\log \pi(x), as a numeric vector of the same length. See the sign convention in ?LangevinFlow.

step_size

Positive numeric scalar. Discretization step \gamma.

n_iter

Positive integer. Number of iterations to run.

beta

Positive numeric scalar. Inverse temperature; defaults to 1.

burn_in

Non-negative integer. Number of initial samples to discard. Must be strictly less than n_iter. Defaults to 0.

Value

An object of class "langevin_chain", which is a list with components:

samples

Numeric matrix of post-burn-in samples; rows index iterations and columns index dimensions.

algorithm

Character string "ULA".

step_size, beta, n_iter, burn_in, dimension

Echoed inputs.

acceptance_rate

NA for ULA (no accept/reject step).

elapsed_secs

Wall-clock runtime of the sampler in seconds.

References

Roberts, G. O., & Tweedie, R. L. (1996). Exponential convergence of Langevin distributions and their discrete approximations. Bernoulli, 2(4), 341-363.

See Also

mala

Examples

# Standard 2D Gaussian target: U(x) = 0.5 * ||x||^2, grad_U(x) = x.
set.seed(1)
grad_u <- function(x) x
fit <- ula(init_x = c(3, -3), grad_u = grad_u,
           step_size = 0.05, n_iter = 2000, burn_in = 500)
summary(fit)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.