[R] Mahalanobis Distance

David Cross d.cross at tcu.edu
Mon Sep 26 21:55:12 CEST 2011


When I first saw your question, I thought the problem might have something to do with inverting the variance-covariance matrix, S, but that is not the case, I think:

S for s.1 and s.2:

> S
             [,1]         [,2]
[1,] 1.835044e+01 8.392485e-04
[2,] 8.392485e-04 4.093558e-07

inverse(S):

> solve(S)
              [,1]         [,2]
[1,]    0.06013287    -123.2825
[2,] -123.28254430 2695612.8008

So, I am not sure what the difficulty is with your calculations.  However, I wonder how much value there is to computing the Mahalanobis distance with two variables that are measured on such different scales?  

> summary(s.1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -5.282  -3.204  -1.225   0.000   2.111   9.453 

> summary(s.2)
      Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
-1.000e-03 -4.999e-04 -2.203e-06  0.000e+00  4.967e-04  1.008e-03 

How would you interpret such a distance?

David Cross
d.cross at tcu.edu
www.davidcross.us




On Sep 26, 2011, at 2:05 PM, jorgeA wrote:

> Hello R helpers,
> 
> I'm trying to use Mahalanobis distance to calculate distance of two time
> series, to make some comparations with euclidean distance, DTW, etc, but I'm
> having some dificults.
> 
> I have, for example, two objects:
> 
> s.1 <- c( 5.6324702,  1.3994353, -3.2572327, -3.8311846, -1.2248719, 
> 0.9894694, -2.2835332, -5.1969285, -5.2823988, -3.1499400, -1.7307950, 
> 2.8221209,  0.7005370,  4.9601216,  9.4527303)
> 
> s.2 <- c(-1.000489e-03, -8.577807e-04, -7.150633e-04, -5.716564e-04,
> -4.280622e-04, -2.860101e-04, -1.451796e-04, -2.202688e-06,  1.441569e-04, 
> 2.891237e-04,  4.280430e-04,  5.652797e-04,  7.100960e-04,  8.619236e-04, 
> 1.007821e-03)
> 
> when I try to calculate distance with *dist *function and *proxy *package
> like this:
> 
> library(proxy)
> dist(rbind(s.1, s.2), method="mahalanobis")
> 
> I have the following error:
> system is computationally singular: reciprocal condition number =
> 3.84863e-020
> 
> if I try with de* mahalanobis() *function I have the same problem
> test <- rbind(s.1, s.2)
> mahalanobis(test, center=colMeans(test), cov=var(test))
> 
> And trying with diferent series I have the following error:
> "Lapack routine dgesv: system is exactly singular"
> 
> I found some similar errors on the mailing list, but couldn't find some
> useful help for my case.
> 
> 
> Am I doing something wrong? Isn't it possible to use mahalanobis distance
> with that kind of data?
> 
> Thank you very much for your help.
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/Mahalanobis-Distance-tp3844960p3844960.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list