R与Tanimoto / Jaccard一起聚类

输入文件为
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)
我的数据是
  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消息中 如何使用R计算Tanimoto / Jacquard Score作为距离矩阵 我发现我也可以使用R计算tanimoto-jacquard距离矩阵。您能教我如何将tanimoto-jacquard与之前的步骤结合起来,以基于tanimoto-jacquard距离而不是欧几里得距离计算的距离矩阵获得聚类?非常感谢。     
已邀请:
你不懂什么?
?vegdist
告诉我们它返回了ѭ4class类的对象,因此您可以删除
dist(....)
行并将其替换为一个调用
vegdist(....)
的行。例如:
require(vegan)
d <- vegdist(Mydata[, -1], method = \"jaccard\")
fit <- hclust(d, method=\"ward\") 
plot(fit)
您需要删除第一列(并且应该在您在Q中显示的Euclidean版本中删除),因为这不是用于形成相异矩阵的数据。 这将产生警告:
Warning message:
In vegdist(Mydata[, -1], method = \"jaccard\") :
  you have empty rows: their dissimilarities may be meaningless in method jaccard
因为第3行不包含任何信息来形成它与其他样本之间的jaccard距离。您可能要考虑在这种情况下,提花卡是否最合适。 OP现在希望将基因标签作为行名。最简单的选择是在读取数据时使用
read.table()
的to9ѭ参数告诉R:
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)
给予:
> mydata2
    treatment1 treatment2 treatment3
aaa          1          0          1
bbb          1          1          1
ccc          0          0          0
eee          0          1          0
或者,如果数据已经在R中,并且要重新加载并重做以前的计算很麻烦,只需将
gene
列分配给行名并删除
gene
列(使用原始的
mydata
):
rownames(mydata) <- mydata$gene
mydata <- mydata[, -1]
给予:
> mydata
    treatment1 treatment2 treatment3
aaa          1          0          1
bbb          1          1          1
ccc          0          0          0
eee          0          1          0
    

要回复问题请先登录注册