On 10/31/13 23:14, Takatsugu Kobayashi wrote:
Hi RUsers,

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). Without
replying on a slow loop, I appreciate if anyone can help me out with a
better idea - guess lapply?

As S. Ellison has pointed out, you probably want sigma^2 rather than sigma.

My suspicion is that with a 20K x 20K covariance matrix:

    * nothing will work

    * even if it did, the results would be meaningless numerical noise.

I.e.  Get real.

That being said, for a *reasonable* size of covariance matrix, the following might
do what you want:

    DM <- outer(diag(CM),diag(CM),"+") - 2*CM

where "CM" is the covariance matrix.  And then you might want to do

    DM <- sqrt(DM)

to get back to the original units (as S. Ellison indicated).

    cheers,

    Rolf Turner

______________________________________________
R-help@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.

Reply via email to