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.

Type: Package
Title: Truncated Multivariate Normal and t Distribution Simulation
Version: 0.1.3
Date: 2022-10-09
Author: Kaifeng Lu
Maintainer: Kaifeng Lu <kaifenglu@gmail.com>
Description: Simulation of random vectors from truncated multivariate normal and t distributions based on the algorithms proposed by Yifang Li and Sujit K. Ghosh (2015) <doi:10.1080/15598608.2014.996690>.
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Imports: Rcpp (≥ 1.0.7)
LinkingTo: Rcpp, RcppArmadillo
RoxygenNote: 7.2.1
Suggests: testthat (≥ 3.0.0), tmvmixnorm
Encoding: UTF-8
Config/testthat/edition: 3
NeedsCompilation: yes
Packaged: 2022-10-09 21:25:56 UTC; kaifeng
Repository: CRAN
Date/Publication: 2022-10-09 21:50:04 UTC

Truncated Multivariate Normal and t Distribution Simulation

Description

Simulation of random vectors from truncated multivariate normal and t distributions based on the algorithms proposed by Yifang Li and Sujit K. Ghosh (2015) <doi:10.1080/15598608.2014.996690>. We allow the mean, lower and upper bounds to differ across samples to accommodate regression problems. The algorithms are implemented in C++ and hence are highly efficient.

Author(s)

Kaifeng Lu, kaifenglu@gmail.com

References

Yifang Li and Sujit K. Ghosh. Efficient Sampling Methods for Truncated Multivariate Normal and Student-t Distributions Subject to Linear Inequality Constraints. Journal of Statistical Theory and Practice. 2015;9:712-732. doi: 10.1080/15598608.2014.996690


Random Generation for Truncated Multivariate Normal

Description

Draws from truncated multivariate normal distribution subject to linear inequality constraints represented by a matrix.

Usage

rtmvnorm(
  mean,
  sigma,
  blc = NULL,
  lower,
  upper,
  init = NULL,
  burn = 10,
  n = NULL
)

Arguments

mean

n x p matrix of means. The number of rows is the number of observations. The number of columns is the dimension of the problem.

sigma

p x p covariance matrix.

blc

m x p matrix of coefficients for linear inequality constraints. If NULL, the p x p identity matrix will be used.

lower

n x m or 1 x m matrix of lower bounds for truncation.

upper

n x m or 1 x m matrix of upper bounds for truncation.

init

n x p or 1 x p matrix of initial values. If NULL, default initial values will be generated.

burn

number of burn-in iterations. Defaults to 10.

n

number of random samples when mean is a vector.

Value

Returns an n x p matrix of random numbers following the specified truncated multivariate normal distribution.

Examples

# Example 1: full rank blc
d = 3;
rho = 0.9;
sigma = matrix(0, d, d);
sigma = rho^abs(row(sigma) - col(sigma));
blc = diag(1,d);
n = 1000;
mean = matrix(rep(1:d,n), nrow=n, ncol=d, byrow=TRUE);
set.seed(1203)
result = rtmvnorm(mean, sigma, blc, -1, 1, burn=50)
apply(result, 2, summary)

# Example 2: use the alternative form of input
set.seed(1203)
result = rtmvnorm(mean=1:d, sigma, blc, -1, 1, burn=50, n=1000)
apply(result, 2, summary)

# Example 3: non-full rank blc
d = 3;
rho = 0.5;
sigma = matrix(0, d, d);
sigma = rho^abs(row(sigma) - col(sigma));
blc = matrix(c(1,1,1,0,1,0,1,0,1), ncol=d);
n = 100;
mean = matrix(rep(1:d,n), nrow=n, ncol=d, byrow=TRUE);
set.seed(1228)
result = rtmvnorm(mean, sigma, blc, -1, 1, burn=10)
apply(result, 2, summary)

# Example 4: non-full rank blc, alternative form of input
set.seed(1228)
result = rtmvnorm(mean=1:d, sigma, blc, -1, 1, burn=10, n=100)
apply(result, 2, summary) 

# Example 5: means, lower, or upper bounds differ across samples
d = 3;
rho = 0.5;
sigma = matrix(0, d, d);
sigma = rho^abs(row(sigma) - col(sigma));
blc = matrix(c(1,0,1,1,1,0), ncol=d, byrow=TRUE)
n = 100;
set.seed(3084)
mean = matrix(runif(n*d), nrow=n, ncol=d);
result = rtmvnorm(mean, sigma, blc, -1, 1, burn=50)
apply(result, 2, summary)


Random Generation for Truncated Multivariate t

Description

Draws from truncated multivariate t distribution subject to linear inequality constraints represented by a matrix.

Usage

rtmvt(
  mean,
  sigma,
  nu,
  blc = NULL,
  lower,
  upper,
  init = NULL,
  burn = 10,
  n = NULL
)

Arguments

mean

n x p matrix of means. The number of rows is the number of observations. The number of columns is the dimension of the problem.

sigma

p x p covariance matrix.

nu

degrees of freedom for Student-t distribution.

blc

m x p matrix of coefficients for linear inequality constraints. If NULL, the p x p identity matrix will be used.

lower

n x m or 1 x m matrix of lower bounds for truncation.

upper

n x m or 1 x m matrix of upper bounds for truncation.

init

n x p or 1 x p matrix of initial values. If NULL, default initial values will be generated.

burn

number of burn-in iterations. Defaults to 10.

n

number of random samples when mean is a vector.

Value

Returns an n x p matrix of random numbers following the specified truncated multivariate t distribution.

Examples

# Example 1: full rank blc
d = 3;
rho = 0.5;
sigma = matrix(0, d, d);
sigma = rho^abs(row(sigma) - col(sigma));
nu = 10;
blc = diag(1,d);
n = 1000;
mean = matrix(rep(1:d,n), nrow=n, ncol=d, byrow=TRUE);
set.seed(1203)
result = rtmvt(mean, sigma, nu, blc, -1, 1, burn=50)
apply(result, 2, summary)

# Example 2: use the alternative form of input
set.seed(1203)
result = rtmvt(mean=1:d, sigma, nu, blc, -1, 1, burn=50, n)
apply(result, 2, summary)

# Example 3: non-full rank blc, different means
d = 3;
rho = 0.5;
sigma = matrix(0, d, d);
sigma = rho^abs(row(sigma) - col(sigma));
nu = 10;
blc = matrix(c(1,0,1,1,1,0), nrow=d-1, ncol=d, byrow=TRUE)
n = 100;
set.seed(3084)
mean = matrix(runif(n*d), nrow=n, ncol=d);
result = rtmvt(mean, sigma, nu, blc, -1, 1, burn=50)
apply(result, 2, summary)


Random Generation for Truncated Univariate Normal

Description

Draws from truncated univariate normal distribution within an interval.

Usage

rtnorm(mean, sd = 1, lower, upper, n = NULL)

Arguments

mean

vector of means. The length is the number of observations.

sd

standard deviation. Defaults to 1.

lower

a scalar of lower bound for truncation, or a vector of lower bounds with the same length as mean.

upper

a scalar of upper bound for truncation, or a vector of upper bounds with the same length as mean.

n

number of random samples when mean is a scalar.

Value

Returns a vector of random numbers following the specified truncated univariate normal distribution.

Examples

set.seed(1203)
x = rtnorm(mean=rep(1,1000), sd=2, lower=-2, upper=3)
summary(x)

# use the alternative form of input
set.seed(1203)
x = rtnorm(mean=1, sd=2, lower=-2, upper=3, n=1000)
summary(x)

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.