[R] Efficient way to convert covariance to Euclidian distance matrix
S Ellison
S.Ellison at lgcgroup.com
Thu Oct 31 12:16:38 CET 2013
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Takatsugu Kobayashi
>
> I am struggling to come up with an efficient vectorized way to convert
> 20Kx20K covariance matrix to a Euclidian distance matrix as a surrogate for
> dissimilarity matrix. Hopefully I can apply multidimensional scaling for
> mapping these 20K points (commercial products).
>
> I understand that Distance(ij) = sigma(i) + sigma(j) - 2cov(ij).
I suspect there's a typo or two in here.
sigma(i)^2 + sigma(j)^2 - 2cov(ij)
would be the variance of a difference x[i ]- x[j]. That's not in the same units as the difference itself, so one might well want the standard deviation of the difference, that is, sqrt(sigma(i)^2 + sigma(j)^2 - 2cov(ij)).
I don't envy your attempt to work with 20k*20k matrices, though. That's about 3Gbytes per object, and a lot of distances for MDS to optimise.
If it's just about visual display, perhaps prcomp on the original data would provide (visually) similar results without the overhead of a large covariance matrix?
S Ellison
*******************************************************************
This email and any attachments are confidential. Any use...{{dropped:8}}
More information about the R-help
mailing list