您如何比较两个树状图(在 R 中)之间的“相似性”?

     2023-03-31     300

关键词:

【中文标题】您如何比较两个树状图(在 R 中)之间的“相似性”?【英文标题】:How do you compare the "similarity" between two dendrograms (in R)? 【发布时间】:2010-02-07 21:23:28 【问题描述】:

我有两个树状图,我希望将它们相互比较,以了解它们有多“相似”。但我不知道有任何方法可以做到这一点(更不用说实现它的代码,比如在 R 中)。

有什么线索吗?

更新(2014-09-13):

自从提出这个问题后,我编写了一个名为dendextend 的 R 包,用于树状图的可视化、操作和比较。该软件包位于CRAN 上,并附带detailed vignette。包括cor_copheneticcor_bakers_gammaBk/Bk_plot等功能。以及用于直观比较两棵树的tanglegram 函数。

【问题讨论】:

::looks up dendrogram:: 现在你让我好奇了。这种比较首先存在什么指标? 您确定要这样做吗?树状图只是数据的表示。我认为(直接)比较这两个树状图中划分的数据会提供更多信息。 【参考方案1】:

比较树状图与比较层次聚类并不完全相同,因为前者包括分支的长度以及分裂,但我也认为这是一个好的开始。我建议您阅读 E. B. Fowlkes & C. L. Mallows (1983)。 “一种比较两个层次聚类的方法”。美国统计协会杂志 78 (383): 553–584 (link)。

他们的方法是基于在每个级别 k 切割树,得到一个度量 Bk,将分组比较到 k 个集群中,以及然后检查 Bk vs k 图。 Bk 度量是基于查看成对的对象并查看它们是否属于同一个集群。

我确信可以基于这种方法编写代码,但首先我们需要知道树状图在 R 中是如何表示的。

【讨论】:

这对 Aniko 很有帮助 - 谢谢!我将进一步阅读。 亲爱的 Aniko, 自从我开始这个话题以来,我已经编写了一个名为 dendextend 的 R 包,其中包含多个用于比较树状图的函数。具体来说:cor_copheneticcor_bakers_gammaBk / Bk_plot。该软件包还附带一个详细说明这些功能的小插图。 小插图链接:cran.r-project.org/web/packages/dendextend/vignettes/…【参考方案2】:

如您所知,Dendrograms 源于层次聚类 - 所以您真正要问的是如何比较两个层次聚类运行的结果。我知道没有标准指标,但我会查看找到的集群数量并比较类似集群之间的成员相似性。 Here 是我同事写的关于聚类苏格兰威士忌的层次聚类的一个很好的概述。

【讨论】:

嗨,保罗,谢谢你的回答,我稍后会通读。谢谢,塔尔【参考方案3】:

看看this page:

我也有类似的问题问here

似乎我们可以使用 cophenetic correlation 来衡量两个树状图之间的相似性。但目前 R 中似乎没有用于此目的的功能。

于 2014 年 9 月 18 日编辑: stats 包中的 cophenetic 函数能够计算并列相异矩阵。并且可以使用cor函数计算相关性。正如@Tal 指出的那样,as.dendrogram 函数返回了不同顺序的树,如果我们根据树状图结果计算相关性,则会导致错误的结果。如dendextend包中的函数cor_cophenetic函数示例所示:

set.seed(23235)
ss <- sample(1:150, 10 )
hc1 <- iris[ss,-5] %>% dist %>% hclust("com")
hc2 <- iris[ss,-5] %>% dist %>% hclust("single")
dend1 <- as.dendrogram(hc1)
dend2 <- as.dendrogram(hc2)
# cutree(dend1)
cophenetic(hc1)
cophenetic(hc2)
# notice how the dist matrix for the dendrograms have different orders:
cophenetic(dend1)
cophenetic(dend2)
cor(cophenetic(hc1), cophenetic(hc2)) # 0.874
cor(cophenetic(dend1), cophenetic(dend2)) # 0.16
# the difference is becasue the order of the distance table in the case of
# stats:::cophenetic.dendrogram will change between dendrograms!

【讨论】:

亲爱的@pengchy - 在 R 中有一个类似的函数。它是 cor_cophenetic 函数,来自 dendextend 包。【参考方案4】:

如果您可以访问生成每个树状图的基础距离矩阵(如果您在 R 中生成树状图,您可能会这样做),您不能只使用两个矩阵的对应值之间的相关性吗?我知道这并没有解决您所要求的内容,但它是您所要求的精神的一个很好的解决方案。

【讨论】:

嗨 dsimcha,感谢您的想法。在我的特殊情况下,我只有两者之一的距离矩阵。所以你的解决方案不适用。但再次感谢!【参考方案5】:

查看this 页面,该页面包含大量有关处理树木的软件的信息,包括树状图。我注意到几个处理树比较的工具,虽然我还没有亲自使用过它们中的任何一个。那里还引用了许多参考文献。

【讨论】:

【参考方案6】:

在系统发育学社区中有大量关于树距离度量的文献,但从计算机科学的角度来看,这些文献似乎被忽视了。请参阅 ape 包的 dist.topo 了解两个树距离度量和几个引用(Penny 和 Hardy 1985,Kuhner 和 Felsenstein 1994),它们考虑了树分区的相似性,以及 Robinson-Foulds metric 在phangorn 包。

一个问题是这些指标没有固定的比例,因此它们仅在 1) 树比较或 2) 与某些生成的基线比较的情况下有用,可能通过他出色的 dendextend 包中的permutation tests similar to what Tal has done with Baker's Gamma 进行比较。

如果您有从 R 层次聚类生成的 hclust 或树状图对象,则使用 ape 包中的 as.phylo 会将您的树状图转换为系统发育树,以便在这些函数中使用。

【讨论】:

手动创建树状图 r

...:我正在尝试根据我不是通过hclust或任何其他方式获得的相似性分数来创建树状图。我有两个分支,只是想根据它们的相似程度将它们画出来,然后将它们分支出来。A和B相似度为0.5A是0.2唯一的B是0.3唯一所以A的总高度是0.7,B的... 查看详情

如何手动创建树状图(或“hclust”)对象? (在 R 中)

】如何手动创建树状图(或“hclust”)对象?(在R中)【英文标题】:HowdoImanuallycreateadendrogram(or"hclust")object?(inR)【发布时间】:2011-01-1915:14:24【问题描述】:我有一个树状图作为图像提供给我。由于它不是很大,我可以... 查看详情

r语言绘图——层次聚类图及树状图添加sidebar(代码片段)

...树状图用来表示样本之间以及变量之间的距离远近(或者相似性大小)。R官网目前提供了至少45个可以绘制热图的包(packages),其中比较常见的、可以添加行列注释信息条的聚类作图包有pheatmap、gplots等等。以下简单介绍一下... 查看详情

防止标签在 hclust/树状图中剪裁

...问题描述】:我正在制作树状图来比较州之间鸟类的歌曲相似性。但是,当我生成绘图时,我无法弄清楚如何防止状态名称被剪裁(clickforexample)。有什么想法吗?代码:var.towhee<-read.csv(file="state 查看详情

改变树状图的分支长度(秘籍图)(代码片段)

...,默认情况下,分支长度与在此步骤中合并的群集的“不相似性”成正比。我想碰碰运气,所以这是一个固定值,因为对我而言,它看起来很奇怪![如果有人对如何解决这个问题有一个想法,我将非常高兴。这里是示例代码libra... 查看详情

如何根据定义的组为树状图的标签着色? (在 R 中)

】如何根据定义的组为树状图的标签着色?(在R中)【英文标题】:Howtocoloradendrogram\'slabelsaccordingtodefinedgroups?(inR)【发布时间】:2015-09-1601:03:58【问题描述】:我在R中有一个24行10,000列的数字矩阵。这个矩阵的行名基本上是文... 查看详情

Python中两个文本文档之间的相似性

】Python中两个文本文档之间的相似性【英文标题】:SimilaritybetweentwotextdocumentsinPython【发布时间】:2017-09-2316:47:06【问题描述】:为您提供了四份文件,编号为1到4,每份文件都有一个句子。根据TF-IDF分数计算,确定与第一个文... 查看详情

如何比较段落之间的相似性 NLP

】如何比较段落之间的相似性NLP【英文标题】:HowtocomparesimilaritiesbetweenparagraphsNLP【发布时间】:2021-10-1316:03:03【问题描述】:我一直在尝试NLP,并使用Doc2Vec模型。我的目标是一个论坛建议的问题功能。例如,如果用户键入一个... 查看详情

如何在python中提取树状图中点之间的距离?

】如何在python中提取树状图中点之间的距离?【英文标题】:HowcanIextractthedistancesbetweenpointswithinadendograminpython?【发布时间】:2021-06-2706:25:59【问题描述】:我在python中执行层次聚类并获得了树状图。我想知道是否有一种方法可... 查看详情

您如何保留原始列以在 r 中两个数据库的 full_join() 中进行比较

】您如何保留原始列以在r中两个数据库的full_join()中进行比较【英文标题】:Howdoyouretainoriginalcolumnforcomparisoninfull_join()oftwodatabasesinr【发布时间】:2021-06-2019:33:11【问题描述】:我正在尝试比较两个数据框,以确定其中一列的差... 查看详情

使用树状图可视化聚类(代码片段)

...用于生物学、遗传学、生态学、社会科学和其他可以根据相似性或相关性对数据进行分组的领域。背景知识:“树状图”一词来自希腊语“dendron”(树)和“gramma”(绘图)。1901年,英国数学家和统计学... 查看详情

如何计算 C# 中两个字符串之间的相似度?

...2-03-2806:33:03【问题描述】:我希望评估两个字符串之间的相似性(包括大小写)并给出一个介于0和1之间的值。我尝试了Levenshtein距离实现,但它只给出整数,不比较内部字母。例如比较“ABCD”和“Abcd”给出的距离为3,而“AOOO... 查看详情

如何对比两个基因外显子

1、可以比较它们的序列,从而确定它们的相似性和差异性。可以做序列比对,对比两个外显子序列之间的相似度,然后比较它们的编码区域,以及外显子之间的编码氨基酸的相似性和差异性。2、可以比较它们的结构,看它们的... 查看详情

怎么比较两个向量组相似度

...相关性是数据属性相关性的度量方法,相似度是数据对象相似性度量的方法,数据对象由多个数据属性描述,数据属性的相关性由相关系数来描述,数据对象的相似性由某种距离度量。许多数据分析算法会涉及相似性度量和相关... 查看详情

如何找到两个不同大小的分布之间的相似性?

】如何找到两个不同大小的分布之间的相似性?【英文标题】:Howtofindthesimilaritybetweentwodifferentlysizeddistributions?【发布时间】:2021-10-2310:31:03【问题描述】:我有两个不同大小(不同数量的样本)的波当前存储为数字列表。是否... 查看详情

在R中使用dendextend修改树状图

】在R中使用dendextend修改树状图【英文标题】:DendrogrammodificationusingdendextendinR【发布时间】:2016-08-1313:43:08【问题描述】:我正在尝试使用dendextend修改和调整集群树状图,使用以下代码:#preparehierarchicalclusterhc=hclust(dist(mtcars))den... 查看详情

r语言绘制核密度图怎么计算重叠

...orov-Smirnov检验(K-S检验)。K-S检验是一种统计检验,用于比较两个样本的分布是否相同。K-S检验的基本思想是比较两个样本的累积分布函数(CDF),如果两个样本的CDF之间的最大差值越大,则两个样本之间的差异越大。所以K-S检... 查看详情

r数据可视化——韦恩图

...反映数据集之间的相交关系。下面,我们来简单介绍一下如何绘制韦恩图绘制韦恩图的包有很多,比如gplots包的venn()函数、limma包的vennDiagram()函数、venneuler包的venneuler()函数。但是这些包绘制出来的图像效果都不是很好,所以我... 查看详情