来自预制链接矩阵的树状图
Posted
技术标签:
【中文标题】来自预制链接矩阵的树状图【英文标题】:dendrogram from pre-made linkage matrix 【发布时间】:2021-09-20 17:09:41 【问题描述】:问题: 在 R 中,我需要绘制一个树状图 + 从用不同语言创建的链接矩阵中切割关联的树。根据数据集的性质,之前的处理仅适用于其他语言。所以我需要能够从已经确定的链接矩阵中使用 R。
我有一个从不同语言创建的链接矩阵和相关矩阵。我将两者都保存为 csv 文件,并且可以将其中任何一个作为数据框读取到 R 中。
我的方法 我想将链接矩阵转换为 R 中的 hclust 对象,以便我可以传递给 as.dendrogram,然后使用 cutree。
当我运行as.hclust(df)
时,我得到了错误:
Error in as.hclust.default(df) : argument 'x' cannot be coerced to class “hclust” Consider providing an as.hclust.data.frame() method
as.hclust 只接受 dist、Diana 或 Agnes 对象 我无法将数据框转换为这些对象中的任何一个以继续进行下游分析。
另一种方法是使用相关矩阵,但我没有看到一种方法来回溯构建有意义的树状图的物理距离。
我可以在 Python 中使用 scipy.cluster.hierarchy.cut_tree,但是 remain unresolved 的函数存在记录问题,所以我想使用 R。
非常感谢
【问题讨论】:
【参考方案1】:我不确定您会如何称呼“链接矩阵”,或者是否有跨包的“标准”格式,但在这些情况下有助于使用 str
:
x <- matrix(rnorm(30), ncol = 3)
hc <- hclust(dist(x), method = "complete")
str(hc)
List of 7
$ merge : int [1:9, 1:2] -5 -6 -8 -4 -2 -3 -1 6 5 -7 ...
$ height : num [1:9] 0.714 0.976 1.381 1.468 2.065 ...
$ order : int [1:10] 2 6 10 3 8 5 7 1 4 9
$ labels : NULL
$ method : chr "complete"
$ call : language hclust(d = dist(x), method = "complete")
$ dist.method: chr "euclidean"
- attr(*, "class")= chr "hclust"
因此,由此可以推断出它是一个简单的 S3 结构,并且应该可以使用您已经确定的分步数据创建一个模仿,如下所示:
my_hc <- list(
merge = <your data>,
height = <your data>,
order = <your data>,
labels = NULL,
method = "complete",
call = "some_optional_string",
dist.method = "your_custom_distance"
)
class(my_hc) <- "hclust"
否则,如果可用或计算上可行,您可以让 R 从距离矩阵重新进行聚类。
【讨论】:
以上是关于来自预制链接矩阵的树状图的主要内容,如果未能解决你的问题,请参考以下文章
R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放hclust包层次聚类(创建距离矩阵聚类绘制树状图dendrogram,在树状图上绘制红色矩形框)