来自预制链接矩阵的树状图

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 从距离矩阵重新进行聚类。

【讨论】:

以上是关于来自预制链接矩阵的树状图的主要内容,如果未能解决你的问题,请参考以下文章

带有名称的 Scipy 树状图

BZOJ 2738 矩阵乘法(整体二分+二维树状数组)

距离矩阵的树状图或其他图

R聚类分析和具有相关矩阵的树状图

R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放hclust包层次聚类(创建距离矩阵聚类绘制树状图dendrogram,在树状图上绘制红色矩形框)

使用凝聚算法绘制树状图