dmvnorm <- function (x, mean, sigma) { if (is.vector(x)) { x <- matrix(x, ncol = length(x)) } if (missing(mean)) { mean <- rep(0, length = ncol(x)) } if (missing(sigma)) { sigma <- diag(ncol(x)) } if (ncol(x) != ncol(sigma)) { stop("x and sigma have non-conforming size") } if (nrow(sigma) != ncol(sigma)) { stop("sigma meanst be a square matrix") } if (length(mean) != nrow(sigma)) { stop("mean and sigma have non-conforming size") } retval <- exp(-mahalanobis(x, center = mean, cov = sigma)/2) det <- prod(eigen(sigma, sym = TRUE)$values) retval <- retval/(sqrt(det) * sqrt(2 * pi)^ncol(x)) retval }