Learn R Programming

VBMS (version 1.0.0)

vbms: Variational Bayesian Algorithm for Multi-Source Heterogeneous Models.

Description

This package implements a variational Bayesian algorithm for high-dimensional multi-source heterogeneous linear models. It simultaneously performs parameter estimation and variable selection. The algorithm supports two model settings: (1) local models, where variable selection is only #' applied to homogeneous coefficients, and (2) global models, where variable selection is also #' performed on heterogeneous coefficients. Two forms of Spike-and-Slab priors are available: the #' Laplace distribution and the Gaussian distribution as the Slab component.

Usage

vbms(
  X,
  Z,
  Y,
  global,
  prior,
  max_iter = 1000,
  tol = 1e-06,
  a = 1,
  b = 10,
  lambda = 1
)

Value

mu_hom

The mean of the homogeneous coefficients

sigma_hom

The variance of homogeneous coefficients

gamma_hom

Selection indicators for homogeneous coefficients

mu_het

The mean of the heterogeneous coefficients

sigma_het

The variance of heterogeneous coefficients

gamma_het

Selection indicators for heterogeneous coefficients (NULL for local models)

Arguments

X

Homogeneous covariates

Z

Heterogeneous covariates

Y

Response covariates

global

Indicates whether variable selection is required for het coefficients, if TRUE, Variable selection will be made for het coefficients.

prior

Forms of Slab distribution in Spike-and-Slab prior, "laplace" or "gauss".

max_iter

Maximum number of iterations, Defaut:1000

tol

Algorithm convergence tolerance, Defaut:1e-6

a

A prior of Beta distribution, Defaut:1

b

A prior of Beta distribution, Defaut:10

lambda

A prior of Laplace distribution, Defaut:1

Examples

Run this code
# Simulate multi-source heterogeneous data
n <- 50  # number of samples per source
K <- 3   # number of sources
p <- 100  # number of homogeneous covariates
q <- 5    # number of heterogeneous covariates

set.seed(1)
theta <- matrix(c(c(-1,0.5,1,-0.5,2),rep(0,p-5)), ncol = 1)
beta <- matrix(1, nrow = q, ncol = K)
for (k in 1:K) {
  beta[,k] <- matrix(c(rep(log(k+1),5),rep(0,q-5)), ncol = 1)
}

zdata <- MASS::mvrnorm(K*n, rep(0,q), diag(q))
Z <- array(data=zdata,dim=c(n,q,K))
xdata <- MASS::mvrnorm(K*n, rep(0,p), diag(p))
X <- array(data=xdata,dim=c(n,p,K))
Y <- matrix(0, nrow = n, ncol = K)

for (k in 1:K) {
  Y[,k] <- MASS::mvrnorm(1, X[,,k]%*%theta+Z[,,k]%*%beta[,k], diag(n))
}

# Fit local model with Laplace prior
res <- vbms(X, Z, Y, global=FALSE, prior='laplace')

# View results
print(head(res$mu_hom))      # Homogeneous coefficients mean
print(head(res$gamma_hom))   # Homogeneous variable selection
print(res$mu_het)            # Heterogeneous coefficients mean

Run the code above in your browser using DataLab