我想计算二元矩阵上的不同指数,并在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")有人知道为什么dist1和dist4与dist2和dist3不同吗?
发布于 2016-03-10 05:56:58
我也把这个作为回答。这里是您计算出的不同之处的主要注释:
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")https://stackoverflow.com/questions/35871157
复制相似问题