-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
69 changed files
with
8,287 additions
and
196 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,3 +22,7 @@ README.html | |
_region_* | ||
cache | ||
inst/doc/* | ||
doc | ||
Meta | ||
/doc/ | ||
/Meta/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,32 +2,33 @@ Package: sparseMVN | |
Type: Package | ||
Title: Multivariate Normal Functions for Sparse Covariance and Precision | ||
Matrices | ||
Version: 0.2.1.1 | ||
Date: 2018-03-26 | ||
Authors@R: person(given="Michael", family="Braun", email="[email protected]", role=c("aut","cre","cph")) | ||
Version: 0.2.2 | ||
Date: 2021-10-19 | ||
Authors@R: person(given="Michael", family="Braun", email="[email protected]", role=c("aut","cre","cph"),comment=c(ORCID="0000-0003-4774-2119")) | ||
Maintainer: Michael Braun <[email protected]> | ||
URL: http://www.smu.edu/Cox/Departments/FacultyDirectory/BraunMichael | ||
URL: https://braunm.github.io/sparseMVN/, https://github.com/braunm/sparseMVN/ | ||
BugReports: https://github.com/braunm/sparseMVN/issues/ | ||
Description: Computes multivariate normal (MVN) densities, and | ||
samples from MVN distributions, when the covariance or | ||
precision matrix is sparse. | ||
License: MPL (>= 2.0) | ||
Depends: | ||
R (>= 3.4.0) | ||
Imports: | ||
Matrix (>= 1.2.12), | ||
Matrix (>= 1.3), | ||
methods | ||
Suggests: | ||
mvtnorm (>= 1.0.6), | ||
plyr, | ||
dplyr (>= 1.0), | ||
tidyr (>= 1.1), | ||
ggplot2 (>= 3.3), | ||
forcats (>= 0.5), | ||
mvtnorm (>= 1.0.6) , | ||
knitr, | ||
bookdown, | ||
kableExtra, | ||
testthat, | ||
dplyr (>= 0.5.0), | ||
scales, | ||
reshape2, | ||
trustOptim (>= 0.8.5), | ||
xtable (>= 1.8), | ||
ggplot2 (>= 2.2.1), | ||
tidyr (>= 0.6.1) | ||
Roxygen: list(wrap=FALSE) | ||
trustOptim (>= 0.8.5) | ||
Encoding: UTF-8 | ||
VignetteBuilder: knitr | ||
RoxygenNote: 7.1.0 | ||
RoxygenNote: 7.1.2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
#' @rdname dmvn.sparse | ||
#' @title Compute density from multivariate normal distribution | ||
#' @param x numeric matrix, where each row is an MVN sample. | ||
#' @param mu mean (numeric vector) | ||
#' @param CH An object of class dCHMsimpl or dCHMsuper that represents | ||
#' the Cholesky factorization of either the precision (default) or covariance | ||
#' matrix. See details. | ||
#' @param prec If TRUE, CH is the Cholesky decomposition of the precision | ||
#' matrix. If false, it is the decomposition for the covariance matrix. | ||
#' @param log If TRUE (default), returns the log density, else returns density. | ||
#' @return A density or log density for each row of x | ||
#' @section Details: | ||
#' This function use sparse matrix operations to compute the | ||
#' log density of a multivariate normal distribution. The user must compute | ||
#' the Cholesky decomposition first, using the Cholesky function in the Matrix | ||
#' package. This function operates on a sparse symmetric matrix, and returns | ||
#' an object of class dCHMsimpl or dCHMsuper (this depends on the algorithm | ||
#' that was used for the decomposition). This object contains information about | ||
#' any fill-reducing permutations that were used to preserve sparsity. The | ||
#' rmvn.sparse and dmvn.sparse functions use this permutation information, even | ||
#' if pivoting was turned off. | ||
#' | ||
#' @examples | ||
#' require(Matrix) | ||
#' m <- 20 | ||
#' p <- 2 | ||
#' k <- 4 | ||
#' | ||
#' ## build sample sparse covariance matrix | ||
#' Q1 <- tril(kronecker(Matrix(seq(0.1,p,length=p*p),p,p),diag(m))) | ||
#' Q2 <- cbind(Q1,Matrix(0,m*p,k)) | ||
#' Q3 <- rbind(Q2,cbind(Matrix(rnorm(k*m*p),k,m*p),Diagonal(k))) | ||
#' V <- tcrossprod(Q3) | ||
#' CH <- Cholesky(V) | ||
#' | ||
#' x <- rmvn.sparse(10,rep(0,p*m+k),CH, FALSE) | ||
#' y <- dmvn.sparse(x[1,],rep(0,p*m+k), CH, FALSE) | ||
#' | ||
#' @export | ||
dmvn.sparse <- function(x, mu, CH, prec=TRUE, log=TRUE) { | ||
|
||
if (is.vector(x) | (is.atomic(x) & NCOL(x)==1)) { | ||
x <- matrix(x,nrow=1) | ||
} | ||
|
||
k <- length(mu) | ||
n <- NROW(x) | ||
if (!(k>0)) { | ||
stop("mu must have positive length") | ||
} | ||
|
||
if (!(k==dim(CH)[1])) { | ||
stop("dimensions of mu and CH do not conform") | ||
} | ||
if (k!=NCOL(x)) { | ||
stop("x must have same number of columns as the length of mu") | ||
} | ||
if (!is.logical(prec)) { | ||
stop("prec must be either TRUE or FALSE") | ||
} | ||
A <- expand(CH) | ||
detL <- sum(log(Matrix::diag(A$L))) | ||
C <- -0.918938533204672669541*k ## -k*log(2*pi)/2 | ||
xmu <- t(x)-mu | ||
z <- as.matrix(A$P %*% xmu) | ||
|
||
if (prec) { | ||
y <- Matrix::crossprod(A$L,z) ## L' %*% x | ||
log.dens <- C + detL - Matrix::colSums(y*y)/2 | ||
} else { | ||
y <- solve(A$L, z) ## Ly = x | ||
log.dens <- C - detL - Matrix::colSums(y*y)/2 | ||
} | ||
|
||
if (log) return (log.dens) else return (exp(log.dens)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,5 +14,4 @@ | |
#' @importFrom stats rnorm | ||
#' @encoding UTF-8 | ||
#' @keywords package | ||
NULL | ||
|
||
"_PACKAGE" |
Oops, something went wrong.