【问题标题】:The difference between dist functions in rr中dist函数的区别
【发布时间】:2016-03-08 15:16:33
【问题描述】:

我想计算二进制矩阵的相异指数,并在 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 不同吗?

【问题讨论】:

  • 你研究过文档吗?如果这没有提供答案,您是否研究过源代码?
  • 然后你忘记了包 stringdist :-)。它有一个用于进行 Jaccard 距离的度量,但基于 q-gram 配置文件。
  • 我无法从文档中得到我的问题的答案,而且我阅读源代码的能力也不是很强,所以我希望对你们有所帮助。
  • 如果你想在 vegan vegdist 中使用二进制差异,你必须这样说:使用 vegdist(test, method="jaccard", binary=TRUE)dist3 的等式定义了 similarities 而不是 dissimilarities。对于不同之处,请使用designdist(test, "(b+c)/(a+b+c)", abcd=TRUE)1 - designdist(test, "a/(a+b+c)", abcd=TRUE)。从名称上看,sim 函数也定义了相似之处。在 R 中,您通常需要聚类分析中的差异,至少在使用标准工具时是这样。

标签: r cluster-analysis vegan


【解决方案1】:

我也将此作为答案。这里是您计算的差异的主要 cmets:

  • 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 工具都假定您有 dis 相似之处。这是一种设计选择。其他一些软件有不同的设计选择,但在 R 中使用 R 方式。
猜你喜欢
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2019-11-27
相关资源
最近更新 更多