R群集与Tanimoto / Jaccard

时间:2011-04-22 11:44:43

标签: r matrix distance

输入文件是

Mydata <- read.table(con <- textConnection('
gene treatment1 treatment2 treatment3
aaa 1 0 1
bbb 1 1 1
ccc 0 0 0
eee 0 1 0
'), header=TRUE)
close(con)

Mydata是

  gene treatment1 treatment2 treatment3
1  aaa          1          0          1
2  bbb          1          1          1
3  ccc          0          0          0
4  eee          0          1          0

为了构建集群,我已经完成了

d <- dist(mydata, method = "euclidean")
fit <- hclust(d, method="ward") 
plot(fit)

我根据“欧几里德”距离得到了集群。

在我之前的stackoverflow消息中 How to use R to compute Tanimoto/Jacquard Score as distance matrix

我发现我也可以用R来计算tanimoto-jacquard距离矩阵。你能不能教我如何将tanimoto-jacquard与前面的步骤结合起来得到一个基于tanimoto-jacquard距离而不是euclidean计算的距离矩阵的聚类?非常感谢。

1 个答案:

答案 0 :(得分:5)

你有什么不明白的? ?vegdist告诉我们它会返回类"dist"的对象,因此您只需删除dist(....)行并将其替换为一个调用vegdist(....)。例如:

require(vegan)
d <- vegdist(Mydata[, -1], method = "jaccard")
fit <- hclust(d, method="ward") 
plot(fit)

您需要删除第一列(并且应该在您在Q中显示的欧几里德版本中完成),因为这不是应该用于形成相异矩阵的数据。

这会产生警告:

Warning message:
In vegdist(Mydata[, -1], method = "jaccard") :
  you have empty rows: their dissimilarities may be meaningless in method jaccard

因为第3行不包含形成它与其他样本之间的jaccard距离的信息。您可能想要考虑在这种情况下jaccard是否最合适。

OP现在希望基因标签为行名。最简单的选择是在使用row.names的{​​{1}}参数读取数据时告诉R这个:

read.table()

,并提供:

mydata2 <- read.table(con <- textConnection("gene treatment1 treatment2 treatment3
aaa 1 0 1
bbb 1 1 1
ccc 0 0 0
eee 0 1 0
"), header = TRUE, row.names = 1)
close(con)

或者,如果数据已经在R中并且重新加载和重做以前的计算很痛苦,只需将> mydata2 treatment1 treatment2 treatment3 aaa 1 0 1 bbb 1 1 1 ccc 0 0 0 eee 0 1 0 列分配给行名称并删除gene列(使用原始{ {1}}):

gene

,并提供:

mydata