r中dist函数之间的区别

时间:2016-03-08 15:16:33

标签: r cluster-analysis vegan

我想计算二元矩阵的相异性指数,并在R中找到了几个函数,但我无法让它们同意。我使用jaccard系数作为四个函数的示例:vegdist()sim()designdist()dist()。我将使用结果进行聚类分析。

library(vegan)
library(simba)

#Create random binary matrix
function1 <- function(m, n) {
  matrix(sample(0:1, m * n, replace = TRUE), m, n)
}
test <- function1(30, 20)

#Calculate dissimilarity indices with jaccard coefficient
dist1 <- vegdist(test, method = "jaccard")
dist2 <- sim(test, method = "jaccard")
dist3 <- designdist(test, method = "a/(a+b+c)", abcd = TRUE)
dist4 <- dist(test, method = "binary")

有谁知道为什么dist1dist4dist2dist3不同?

1 个答案:

答案 0 :(得分:0)

我也把它作为答案。这里是您计算的差异的主要评论:

  • dist1:您必须在binary=TRUE中设置vegan::vegdist()(这是 记录)。

  • dist2simba::sim()计算Jaccard相似度,您必须使用1-dist2?sim文档给出了Jaccard相似性的错误公式,但在代码中使用了正确的公式。但是,记录的公式定义了相似性。

  • dist3:您的vegan::designdist()公式给出了Jaccard的相似性,您应该将其更改为相异性。有很多方法可以做到这一点,下面的代码给出了一个。

  • dist4:这是正确完成的。

用这些替换你的最后四行将起到作用,并在所有函数中给出数字相同的结果:

#Calculate dissimilarity indices with jaccard coefficient
dist1 <- vegdist(test, method = "jaccard", binary = TRUE)
dist2 <- 1 - sim(test, method = "jaccard")
dist3 <- designdist(test, method = "(b+c)/(a+b+c)", abcd = TRUE)
dist4 <- dist(test, method = "binary")