e2m {prospectr} | R Documentation |
A function for transforming a matrix from its Euclidean space to its Mahalanobis space
e2m(X, sm.method = c("svd", "eigen"))
# test data ## Not run: X <- matrix(rnorm(500),ncol=5) # Normal way to compute the Mahalanobis distance md1 <- sqrt(mahalanobis(X, center = colMeans(X), cov = cov(X))) # Projection approach for computing the Mahalanobis distance #1. Projecting from the Euclidean to the Mahalanobis space Xm <- e2m(X, sm.method = 'svd') #2. Use the normal Euclidean distance on the Mahalanobis space md2 <- sqrt(rowSums((sweep(Xm, 2, colMeans(Xm), '-'))^2)) # Plot the results of both methods plot(md1, md2) # Test on a real dataset #Mahalanobis in the spectral space data(NIRsoil) X <- NIRsoil$spc Xm <- e2m(X, sm.method = 'svd') md2 <- sqrt(rowSums((sweep(Xm, 2, colMeans(Xm), '-'))^2)) md1 <- sqrt(mahalanobis(X, center = colMeans(X), cov = cov(X))) # does not work#' #Mahalanobis in the PC space pc <- 20 pca <- prcomp(X, center=TRUE,scale=TRUE) X <- pca$x[, 1:pc] X2 <- sweep(pca$x[,1:pc,drop=FALSE],2,pca$sdev[1:pc],'/') md4 <- sqrt(rowSums((sweep(Xm, 2, colMeans(Xm), '-'))^2)) md5 <- sqrt(rowSums((sweep(X2, 2, colMeans(X2), '-'))^2)) md3 <- sqrt(mahalanobis(X, center = colMeans(X), cov = cov(X))) # does work ## End(Not run)