在R中从距离矩阵获取坐标

10

有没有一个将距离矩阵转换为一组坐标的软件包?我看了下面的问题。我希望有一个这样的软件包。

从距离矩阵中找到点的坐标

我考虑过使用Sammons投影,但据我所知,它是一个优化器,并为您提供最佳解决方案。我认为应该有一种算法来获取此问题的唯一解。


1
由于您可以旋转数据集而不影响距离矩阵,因此这个问题并没有唯一的解决方案。 - Backlin
2个回答

9
多维缩放(MDS)旨在将数据的距离矩阵投影到较低的维度 k,在您的情况下,期望的 k = 2,同时尽可能保持数据点之间的距离:
# Multidimensional scaling
library(MASS)
set.seed(1)
labels <- as.factor(sample(LETTERS[1:5], 100, replace=TRUE))
dat <- mvrnorm(n=100, mu = c(1:4), Sigma=matrix(1:16, ncol=4)) + as.numeric(labels)^2
#> dim(dat)
#[1] 100   4

# Euclidean distance matrix (100x100)
d <- dist(dat)

# Classical MDS for distance matrix d
# http://en.wikipedia.org/wiki/Multidimensional_scaling
mds <- cmdscale(d, k = 2)
x <- mds[,1]
y <- mds[,2]

plot(x,y, col=rainbow(5)[as.numeric(labels)], pch=16, main="MDS for object 'dat'")
legend("topright", legend=unique(labels), col=rainbow(5)[unique(as.numeric(labels))], pch=16)

进一步阅读:https://stats.stackexchange.com/questions/14002/whats-the-difference-between-principal-components-analysis-and-multidimensional

mds projection


感谢您的出色答案。但是,正如我在上面评论的那样,这是一个确切的解决方案还是另一种优化器? - Avinash
1
这是一个特征值问题(例如此答案), 因此它可以被视为一种优化。 如果存在精确解,则返回精确解,如果不存在精确解,则不会失败,而是给出近似解。 - Vincent Zoonekynd

2

查找一个名为多维缩放(Multi-Dimensional Scaling,MDS)的算法。在R中实现该算法的函数是stats包中的cmdscale函数:

多维缩放将一组不相似性转换为一组点,使得这些点之间的距离大致等于不相似性。

文档还提供了一个示例,其中将距离矩阵转换为xy坐标的两个向量,然后进行绘制。


这不是另一种优化吗?我链接的另一个问题中定义的算法对我来说很有意义。MDS是否也做同样的事情? 正如已经指出的那样,没有唯一的解决方案,但它有一个解决方案,因此我认为在可以实现精确解决方案时不需要近似/最优解决方案。除非我完全误解了MDS,否则请原谅我的无知。 - Avinash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接