我正在尝试使用包isoMDS
中的函数执行非度量 MDS(R 版本 3.3.3),MASS
但出现此错误:
Error in isoMDS(d): zero or negative distance between objects 1 and 2
这是我正在做的一个例子:
# LOAD LIBRARY
library(MASS)
# CREATE FAKE DATA
a <- c(1, 1, 1, 1)
b <- c(2, 2, 2, 2)
c <- c(3, 3, 4, 5)
d <- c(4, 4, 7, 9)
x <- data.frame(a, b, c, d)
x
a b c d
1 1 2 3 4
2 1 2 3 4
3 1 2 4 7
4 1 2 5 9
# EUCLIDEAN DISTANCE BETWEEN ROWS 1, 2, 3 and 4
d <- dist(x)
d
1 2 3
2 0.000000
3 3.162278 3.162278
4 5.385165 5.385165 2.236068
# NMDS
fit <- isoMDS(d)
Error in isoMDS(d) : distance négative ou nulle entre les objets 1 et 2
我不知道是否有办法解决这个问题,或者我做错了什么。我知道对象 1 和 2 是相同的,这可能就是距离为负数或等于零的原因。我发现我的问题是“常见问题解答”,但我找到的唯一答案之一是:
简短回答:您无法比较包括 NA 在内的距离,因此无法找到距离的单调映射。如果两行的数据确实相同,您可以在执行 MDS 时轻松删除其中的一个,然后将找到的位置分配给另一行。
所以,我的下一个问题是:在执行 MDS 时如何删除行,还有其他方法可以执行 NMDS 吗?
任何帮助将不胜感激!