Type: | Package |
Title: | Bayesian Wavelet Analysis Using Non-Local Priors |
Version: | 1.1 |
Date: | 2025-04-04 |
Description: | Performs Bayesian wavelet analysis using individual non-local priors as described in Sanyal & Ferreira (2017) <doi:10.1007/s13571-016-0129-3> and non-local prior mixtures as described in Sanyal (2025) <doi:10.48550/arXiv.2501.18134>. |
License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
Imports: | Rcpp (≥ 1.0.14), wavethresh |
LinkingTo: | Rcpp, RcppArmadillo |
URL: | https://nilotpalsanyal.github.io/NLPwavelet/ |
BugReports: | https://github.com/nilotpalsanyal/NLPwavelet/issues |
Repository: | CRAN |
Suggests: | knitr, rmarkdown |
NeedsCompilation: | yes |
Packaged: | 2025-04-04 18:02:56 UTC; nsanyal |
Author: | Nilotpal Sanyal [aut, cre] |
Maintainer: | Nilotpal Sanyal <nsanyal@utep.edu> |
Date/Publication: | 2025-04-04 18:20:02 UTC |
Bayesian Wavelet Analysis Using Non-local Priors
Description
Performs Bayesian wavelet analysis using individual non-local priors as described in Sanyal & Ferreira (2017) <DOI:10.1007/s13571-016-0129-3> and non-local prior mixtures as described in Sanyal (2025) <DOI:10.48550/arXiv.2501.18134>.
Details
The main function is BNLPWA
, which has arguments for specifying analysis using individual non-local priors or non-local prior mixtures and various hyperparameter specifications for the wavelet coefficients and scale parameters of the non-local priors. See the manual of BNLPWA
for examples.
Author(s)
Nilotpal Sanyal <nsanyal@utep.edu>
Maintainer: Nilotpal Sanyal <nsanyal@utep.edu>
References
Sanyal, Nilotpal. "Nonlocal prior mixture-based Bayesian wavelet regression." arXiv preprint arXiv:2501.18134 (2025).
Sanyal, Nilotpal, and Marco AR Ferreira. "Bayesian wavelet analysis using nonlocal priors with an application to FMRI analysis." Sankhya B 79.2 (2017): 361-388.
Bayesian Non-Local Prior-Based Wavelet Analysis
Description
BNLPWA
is the main function of this package that performs Bayesian wavelet analysis using individual non-local priors as described in Sanyal & Ferreira (2017) and non-local prior mixtures as described in Sanyal (2025). It currently works with one-dimensional data. The usage is described below.
Usage
BNLPWA(
data,
func=NULL,
method=c("mixture","mom","imom"),
mixprob_dist=c("logit","genlogit","hypsec","gennormal"),
scale_dist=c("polynom","doubleexp"),
r=1,
nu=1,
wave.family="DaubLeAsymm",
filter.number=6,
bc="periodic"
)
Arguments
data |
Vector of noisy data. |
func |
Vector of true functional values. NULL by default. If available, they are used to compute and return mean squared error (MSE) of the estimates. |
method |
"mixture" for non-local prior mixture-based analysis, "mom" or "imom" for individual non-local prior-based analysis. |
mixprob_dist |
Specification for the mixture probabilities of the spike-and-slab prior. Equations given in the Details. |
scale_dist |
Specification for the scale parameters of the non-local priors. Equations given in the Details. |
r |
Integer specifying a) the order of the MOM prior or the shape parameter of the IMOM prior for individual non-local prior-based analysis, or b) the order of the MOM prior for non-local prior mixture-based analysis. |
nu |
Integer specifying the shape parameter of the IMOM prior for non-local prior mixture-based analysis. Not used for individual non-local prior-based analysis. |
wave.family |
The family of wavelets to use - "DaubExPhase" or "DaubLeAsymm". Default is "DaubLeAsymm". |
filter.number |
The number of vanishing moments of the wavelet. Default is 6. |
bc |
The boundary condition to use - "periodic" or "symmetric". Default is "periodic". |
Details
Spike-and-slab prior for the wavelet coefficients
For individual MOM prior-based analysis, the spike-and-slab prior for the wavelet coefficient d_{lj}
is given by
d_{lj} \mid \gamma_l, \tau_l, \sigma^2, r \sim \gamma_l \; \text{MOM}(\tau_l, \sigma^2, r) + (1-\gamma_l) \; \delta(0),
for individual IMOM prior-based analysis, the spike-and-slab prior for the wavelet coefficient d_{lj}
is given by
d_{lj} \mid \gamma_l, \tau_l, \sigma^2, r \sim \gamma_l \; \text{IMOM}(\tau_l, \sigma^2, r) + (1-\gamma_l) \; \delta(0),
and for non-local prior mixture-based analysis, the spike-and-slab prior for the wavelet coefficient d_{lj}
is given by
d_{lj} \mid \gamma_l^{(1)}, \gamma_l^{(2)}, \tau_l^{(1)}, \tau_l^{(2)}, \sigma^2, r, \nu \sim \gamma_l^{(1)} \; \text{MOM}(\tau_l^{(1)}, r, \sigma^2) + (1-\gamma_l^{(1)})\gamma_l^{(2)} \;\text{IMOM}(\tau_l^{(2)}, \nu, \sigma^2) + (1-\gamma_l^{(1)})(1-\gamma_l^{(2)}) \; \delta(0),
where the density of the MOM prior is
mom(d_{lj} | \tau_{l}^{(1)},r,\sigma^{2}) = \widetilde{M}_{r} \left(\tau_{l}^{(1)}\sigma^{2}\right)^{-r-1/2} d_{lj}^{2r} \exp\left(-\frac{d_{lj}^{2}}{2\tau_{l}^{(1)}\sigma^{2}}\right), \quad r>1, \tau_{l}^{(1)}>0, \widetilde{M}_{r} = \frac{(2\pi)^{-1/2}}{(2r-1)!!}
and the density of the IMOM prior is
imom(d_{lj} | \tau_{l}^{(2)},\nu,\sigma^{2}) = \frac{\left(\tau_{l}^{(2)}\sigma^{2}\right)^{\nu/2}}{\Gamma(\nu/2)} |d_{lj}|^{-\nu-1} \exp\left( -\frac{\tau_{l}^{(2)}\sigma^{2}}{d_{lj}^{2}} \right),\quad \nu>1, \tau_{l}^{(2)}>0.
Hyperparameter specifications
For non-local prior mixture-based analysis, the available specifications for the mixture probabilities are
-
Logit:
\gamma_l^{(1)} = \frac{\exp(\theta^{\gamma}_{1} - \theta^{\gamma}_{2}l)} {1 + \exp(\theta^{\gamma}_{1} - \theta^{\gamma}_{2}l)}, \quad \theta^{\gamma}_{1} \in \mathbb{R}, \; \theta^{\gamma}_{2} > 0
\gamma_l^{(2)} = \frac{\exp(\theta^{\gamma}_{3} - \theta^{\gamma}_{4}l)} {1 + \exp(\theta^{\gamma}_{3} - \theta^{\gamma}_{4}l)}, \quad \theta^{\gamma}_{3} \in \mathbb{R}, \; \theta^{\gamma}_{4} > 0
-
Generalized logit or Richards:
\gamma_l^{(1)} = \frac{1}{[1 + \exp\{-(\theta^{\gamma}_{1} - \theta^{\gamma}_{2}l)\}]^{\theta^{\gamma}_{3}}}, \quad \theta^{\gamma}_{1} \in \mathbb{R}, \; \theta^{\gamma}_{2},\theta^{\gamma}_{3} > 0
\gamma_l^{(2)} = \frac{1}{[1 + \exp\{-(\theta^{\gamma}_{4} - \theta^{\gamma}_{5}l)\}]^{\theta^{\gamma}_{6}}}, \quad \theta^{\gamma}_{4} \in \mathbb{R}, \; \theta^{\gamma}_{5},\theta^{\gamma}_{6} > 0;
-
Hyperbolic secant:
\gamma_l^{(1)} = \frac{2}{\pi} \arctan\left[\exp\left(\frac{\pi}{2} \left(\theta^{\gamma}_{1} - \theta^{\gamma}_{2}l\right)\right)\right], \quad \theta^{\gamma}_{1} \in \mathbb{R}, \; \theta^{\gamma}_{2} > 0
\gamma_l^{(2)} = \frac{2}{\pi} \arctan\left[\exp\left(\frac{\pi}{2} \left(\theta^{\gamma}_{3} - \theta^{\gamma}_{4}l\right)\right)\right], \quad \theta^{\gamma}_{3} \in \mathbb{R}, \; \theta^{\gamma}_{4} > 0
-
Generalized normal:
\gamma_l^{(1)} = \frac{1}{2} + \text{sign}(\theta^{\gamma}_{1}-l) \frac{1}{2\Gamma(1/\theta^{\gamma}_{2})} \gamma\left(1/\theta^{\gamma}_{2} ,\left|\frac{\theta^{\gamma}_{1}-l}{\theta^{\gamma}_{3}}\right|^{\theta^{\gamma}_{2}}\right), \quad \theta^{\gamma}_{1} \in \mathbb{R}, \; \theta^{\gamma}_{2},\theta^{\gamma}_{3} > 0
\gamma_l^{(2)} = \frac{1}{2} + \text{sign}(\theta^{\gamma}_{4}-l) \frac{1}{2\Gamma(1/\theta^{\gamma}_{5})} \gamma\left(1/\theta^{\gamma}_{5} ,\left|\frac{\theta^{\gamma}_{4}-l}{\theta^{\gamma}_{6}}\right|^{\theta^{\gamma}_{5}}\right), \quad \theta^{\gamma}_{4} \in \mathbb{R}, \; \theta^{\gamma}_{5},\theta^{\gamma}_{6} > 0
For individual non-local prior based analysis, gamma_l
is defined likewise.
For non-local prior mixture-based analysis, the available specifications for the scale parameters are
-
Polynomial decay:
\tau_{l}^{(1)} = \theta^{\tau}_{1} l^{-\theta^{\tau}_{2}}, \quad \theta^{\tau}_{1},\theta^{\tau}_{2} > 0
\tau_{l}^{(2)} = \theta^{\tau}_{3} l^{-\theta^{\tau}_{4}}, \quad \theta^{\tau}_{3},\theta^{\tau}_{4} > 0
-
Double-exponential decay:
\tau_{l}^{(1)} = \theta^{\tau}_{1} \exp(-\theta^{\tau}_{2} l) + \theta^{\tau}_{3} \exp(-\theta^{\tau}_{4} l), \quad \theta^{\tau}_{1},\theta^{\tau}_{2},\theta^{\tau}_{3},\theta^{\tau}_{4} > 0
\tau_{l}^{(2)} = \theta^{\tau}_{5} \exp(-\theta^{\tau}_{6} l) + \theta^{\tau}_{7} \exp(-\theta^{\tau}_{8} l), \quad \theta^{\tau}_{5},\theta^{\tau}_{6},\theta^{\tau}_{7},\theta^{\tau}_{8} > 0
For individual non-local prior based analysis, tau_l
is defined likewise.
Note: The wavelet computations are performed by using the R package wavethresh.
Value
A list containing the following.
data |
The data vector. |
func.post.mean |
Posterior estimate (mean) of the function that generated the data. |
wavelet.empirical |
Empirical wavelet coefficients obtained by wavelet transformation of the data. |
wavelet.post.mean |
Posterior estimate (mean) of the true wavelet coefficients obtained by wavelet transformation of the underlying function. |
hyperparam |
Estimates of the hyperparameters that specify the spike-and-slab prior for the wavelet coefficients. |
sigma |
Estimate of the standard deviation of the error. |
MSE.mean |
Mean squared error of the estimates, computable only if true functional values are supplied in the input argument |
runtime |
System run-time of the function. |
Author(s)
Nilotpal Sanyal <nsanyal@utep.edu>
Maintainer: Nilotpal Sanyal <nsanyal@utep.edu>
References
Sanyal, Nilotpal. "Nonlocal prior mixture-based Bayesian wavelet regression." arXiv preprint arXiv:2501.18134 (2025).
Sanyal, Nilotpal, and Marco AR Ferreira. "Bayesian wavelet analysis using nonlocal priors with an application to FMRI analysis." Sankhya B 79.2 (2017): 361-388.
See Also
Examples
# Using the well-known Doppler function to
# illustrate the use of the function BNLPWA
# set seed for reproducibility
set.seed(1)
# Define the doppler function
doppler <- function(x) {
sqrt(x * (1 - x)) * sin((2 * pi * 1.05) / (x + 0.05))
}
# Generate true values over a grid of length an integer power of 2
n <- 128 # Number of points
x <- seq(0, 1, length.out = n)
true_signal <- doppler(x)
# Add noise to generate data
sigma <- 0.2 # Noise level
y <- true_signal + rnorm(n, mean = 0, sd = sigma)
# BNLPWA analysis based on MOM prior using logit specification
# for the mixture probabilities and polynomial decay
# specification for the scale parameter
fit_mom <- BNLPWA(data=y, func=true_signal, r=1, wave.family=
"DaubLeAsymm", filter.number=6, bc="periodic", method="mom",
mixprob_dist="logit", scale_dist="polynom")
plot(y,type="l",col="grey") # plot of data
lines(fit_mom$func.post.mean,col="blue") # plot of posterior
# smoothed estimates
fit_mom$MSE.mean
# BNLPWA analysis using non-local prior mixtures using generalized
# logit (Richard's) specification for the mixture probabilities and
# double exponential decay specification for the scale parameter
fit_mixture <- BNLPWA(data=y, func=true_signal, r=1, nu=1, wave.family=
"DaubLeAsymm", filter.number=6, bc="periodic", method="mixture",
mixprob_dist="genlogit", scale_dist="doubleexp")
plot(y,type="l",col="grey") # plot of data
lines(fit_mixture$func.post.mean,col="blue") # plot of posterior
# smoothed estimates
fit_mixture$MSE.mean
# Compare with other wavelet methods
library(wavethresh)
wd <- wd(y, family="DaubLeAsymm", filter.number=6, bc="periodic") # Wavelet decomposition
wd_thresh_universal <- threshold(wd, policy="universal", type="hard")
fit_universal <- wr(wd_thresh_universal)
MSE_universal <- mean((true_signal-fit_universal)^2)
MSE_universal
wd_thresh_sure <- threshold(wd, policy="sure", type="soft")
fit_sure <- wr(wd_thresh_sure)
MSE_sure <- mean((true_signal-fit_sure)^2)
MSE_sure
wd_thresh_BayesThresh <- threshold(wd, policy="BayesThresh", type="hard")
fit_BayesThresh <- wr(wd_thresh_BayesThresh)
MSE_BayesThresh <- mean((true_signal-fit_BayesThresh)^2)
MSE_BayesThresh
wd_thresh_cv <- threshold(wd, policy="cv", type="hard")
fit_cv <- wr(wd_thresh_cv)
MSE_cv <- mean((true_signal-fit_cv)^2)
MSE_cv
wd_thresh_fdr <- threshold(wd, policy="fdr", type="hard")
fit_fdr <- wr(wd_thresh_fdr)
MSE_fdr <- mean((true_signal-fit_fdr)^2)
MSE_fdr
# Compare with non-wavelet methods
# Kernel smoothing
fit_ksmooth <- ksmooth(x, y, kernel="normal", bandwidth=0.05)
MSE_ksmooth <- mean((true_signal-fit_ksmooth$y)^2)
MSE_ksmooth
# LOESS smoothing
fit_loess <- loess(y ~ x, span=0.1) # Adjust span for more or less smoothing
MSE_loess <- mean((true_signal-predict(fit_loess))^2)
MSE_loess
# Cubic spline smoothing
spline_fit <- smooth.spline(x, y, spar=0.5) # Adjust spar for smoothness
MSE_spline <- mean((true_signal-spline_fit$y)^2)
MSE_spline