r - r中dist函数的区别

标签 r cluster-analysis vegan

我想计算二元矩阵上的相异指数,并在 R 中找到了几个函数,但我无法让它们达成一致。我在四个函数中以杰卡德系数为例: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")

有谁知道为什么dist1dist4dist2 不同和dist3

最佳答案

我也把这个作为答案。以下是您计算出的差异的主要评论:

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

  • dist2:simba::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")

关于r - r中dist函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871157/

相关文章:

r - 对象错误[[名称,精确 = TRUE]] : subscript out of bounds

R rgl 轴刻度和刻度标签之间的距离

r - 计算单词组合频率

r - 如何在rarecurve(纯素包)中单独为线条着色

R 套餐纯素 Decorana

r - 如何在 R 中保存 data.frame?

python - K在scikit learn中表示聚类

r - 如何在集群内集群

algorithm - 如何分类但不使用分类或聚类算法?

r - 在轴 2 和轴 3 上的 R 中的 NMDS 中使用 ordiellipse