如何在r中选择低于某个截止值的树形图中的所有聚类

时间:2017-07-20 21:20:28

标签: r cut dendrogram

我有一个距离矩阵,227列227行称为

"X9_resid_matrix"

这个矩阵代表了227种蛋白质,并告诉我每种蛋白质之间的差异。因此,在右上角有一个零,因为1,1代表相同的蛋白质,因此它们相同或零不同。数字范围从0到9。

然后我使用以下命令制作树形图:

"plot(hclust(as.dist(X9_resid_matrix)))"

y轴的范围从0到9。

我希望计算机只告诉我低于某个截止点的集群。

意思是如果只有31个距离为零的集群,我想要一个计算机用来告诉我31个零距离集群的代码。

命令:

cutree(hc, h=0)
当我运行它时,

似乎没有这样做。

例如: 我有以下树形图: Click here to view

我想要一个在高度为1时剪切树形图的命令,只显示1和2.

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的函数是cut,它采用树状图对象x并将其切割为高度h以生成一个双元素列表。第一个元素“upper”是修剪后的原始树,第二个元素“lower”是包含修剪分支的列表(有关详细信息,请参阅?dendrogram)。

“下”元素中的每个分支本身都是树形图,并且可以照常绘制和操作。这是一个小例子:

newick <- "((Human:0.01,Chimp:0.03):0.02,(((Whale:0.04,Cow:0.01):0.01,Pig:0.01):0.01,(Dog:0.01,Cat:0.01):0.01):0.04);"
install.packages("phylogram")
dendro <- phylogram::read.dendrogram(text = newick)
plot(dendro)

tree plot

然后可以使用cut命令对树形图对象进行横截面处理:

obj <- cut(dendro, h = 0.09)
obj

这将输出如下所示的列表:

$upper
'dendrogram' with 2 branches and 2 members total, at height 0.1 

$lower
$lower[[1]]
'dendrogram' with 2 branches and 2 members total, at height 0.08 

$lower[[2]]
'dendrogram' with 2 branches and 5 members total, at height 0.06 

请注意,第二个元素obj$lower包含两个子树,这些子树是在0.09高度切割原始树时产生的。要提取和绘制说这些子树中的第二个只使用标准列表子集化语法:

subtree <- obj$lower[[2]]
plot(subtree)

subtree plot

要将hc对象转换为树形图,您可以使用as.dendrogram函数。