Skip to content

Instantly share code, notes, and snippets.

@amchercashin
Created February 11, 2016 13:31
Show Gist options
  • Save amchercashin/d19229e8909d06fbbea4 to your computer and use it in GitHub Desktop.
Save amchercashin/d19229e8909d06fbbea4 to your computer and use it in GitHub Desktop.
Returns Multivariate Gaussian probability distribution for data points (rows) of X.
multGaussian = function(X) {
#Number of rows
m <- nrow(X)
#Column means
mu <- colMeans(X)
#Number of columns
k = length(mu)
#Substruct column means from data points (center data to 0)
X_centered <- X - matrix(1, m, 1) %*% matrix(mu, 1, k)
#Compute sum of averaged squared values - variances of columns
sigma2 <- colSums(as.matrix(X_centered) ^ 2) / m
#Make a diagonal variance matrix
sigma2 = diag(sigma2)
#Compute p. Multivariate Gaussian probability Distribution for rows of X
p = (2*pi)^(-k/2) * det(sigma2)^(-1/2) * exp((-1/2) * rowSums(X_centered %*% solve(sigma2) * X_centered))
return(p)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment