R群集与Tanimoto/Jaccard

Cat*_*ine 1 r distance matrix

输入文件是

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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

d <- dist(mydata, method = "euclidean")
fit <- hclust(d, method="ward") 
plot(fit)
Run Code Online (Sandbox Code Playgroud)

我得到了基于"欧几里德"距离的集群.

在我之前的stackoverflow消息中 如何使用R来计算Tanimoto/Jacquard Score作为距离矩阵

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

Rei*_*son 5

你有什么不明白的??vegdist告诉我们它返回一个类的对象,"dist"所以你可以删除该dist(....)行并用一个调用替换它vegdist(....).例如:

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

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

这将产生一个警告:

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

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

OP现在希望基因标签为行名.最简单的选择是在读取数据时告诉R,使用以下row.names参数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)
Run Code Online (Sandbox Code Playgroud)

赠送:

> mydata2
    treatment1 treatment2 treatment3
aaa          1          0          1
bbb          1          1          1
ccc          0          0          0
eee          0          1          0
Run Code Online (Sandbox Code Playgroud)

或者,如果数据已经在R中,并且重新加载和重做以前的计算很痛苦,只需将gene列分配给行名称并删除gene列(使用原始文件mydata):

rownames(mydata) <- mydata$gene
mydata <- mydata[, -1]
Run Code Online (Sandbox Code Playgroud)

赠送:

> mydata
    treatment1 treatment2 treatment3
aaa          1          0          1
bbb          1          1          1
ccc          0          0          0
eee          0          1          0
Run Code Online (Sandbox Code Playgroud)