如何 select 树状图中的所有簇,低于某个截止值,在 r

How to select all clusters, in a dendrogram, below a certain cutoff, in r

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

"X9_resid_matrix"

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

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

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

y 轴的范围从零到九。

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

意思是如果只有 31 个簇是零距离,我想要一个代码,计算机将使用它来告诉我那 31 个零距离簇是什么。

命令:

cutree(hc, h=0)

当我 运行 它时似乎没有这样做。

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

我想要一个在高度为1处切割树状图的命令,并且只显示1和2。

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

"lower" 元素中的每个分支本身都是树状图,可以像往常一样绘制和操作。这是一个小例子:

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)

然后可以使用 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)

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