r中dist函数的区别
The difference between dist functions in r
我想计算二进制矩阵上的相异指数,并在 R 中找到了几个函数,但我无法让它们达成一致。我在vegdist()
、sim()
、designdist()
和dist()
这四个函数中以jaccard系数为例。我将使用结果进行聚类分析。
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")
有谁知道为什么 dist1
和 dist4
与 dist2
和 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 中找到了几个函数,但我无法让它们达成一致。我在vegdist()
、sim()
、designdist()
和dist()
这四个函数中以jaccard系数为例。我将使用结果进行聚类分析。
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")
有谁知道为什么 dist1
和 dist4
与 dist2
和 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")