【问题标题】:Permutation vectors from the CLUSTERGRAM object (MATLAB)来自 CLUSTERGRAM 对象的置换向量 (MATLAB)
【发布时间】:2012-06-13 19:32:05
【问题描述】:

我正在使用来自 Bioinformatics Toolbox(版本 3.7)的 CLUSTERGRAM 对象。 MATLAB 版本 R2011a。

我想为 clustergram 获取行和列的置换向量,就像我可以使用 dendrogram 函数一样:

x = magic(10);
>> [~,~,permrows] = dendrogram(linkage(x,'average','euc'))
permrows =
     9    10     6     7     8     1     2     4     5     3
>> [~,~,permcols] = dendrogram(linkage(x','average','euc'))
permcols =
     6     7     8     9     2     1     3     4     5    10

我发现 clustergram 和 dendrogram 的聚类不一样,很可能是由于优化了叶子排序计算(我不想禁用它)。

例如,对于来自的clustergram:

clustergram(x)

'average''eucledian' 是 clustergram 的默认方法)

向量(如附图所示)应该是:

permrows = [1 2 4 5 3 10 9 6 7 8];
permcols = [1 2 8 9 6 7 10 5 4 3];

那么,如何以编程方式获取这些向量?有人熟悉这个对象吗?

谁能推荐一个好的替代方案?我知道我可以结合 imagesc 和 dendrogram 函数创建一个类似的图形,但是在 clustergram 中的叶子排序比在 dendrogram 中要好得多(最佳)。

【问题讨论】:

  • 你不会从get(cgo,'ColumnLabels')get(cgo,'RowLabels')得到信息吗?
  • @Jonas:我实际上使用其他标签,但您的解决方案可能是一种解决方法。不要临时设置标签,然后获取向量并重置标签。从逻辑上讲,我认为get(cgo,'RowLabels') 会按原始顺序返回标签,但我没有测试。看来setget 的工作方式不同,所以set(cgo,'RowLabels',get(cgo,'RowLabels')) 会给你错误的结果。无论如何,请将其发布为答案。

标签: matlab permutation dendrogram


【解决方案1】:

通过查看文档,我猜想get(gco,'ColumnLabels')get(gco,'RowLabels'),其中gco 是clustergram 对象,应该给你重新排序的标签。请注意,相应的set-methods 以原始顺序接收标签并在内部重新排序它们。

因此,如果您使用了自定义标签 (set(gco,'RowLabels',originalLabels))

[~,permrows] = ismember(get(gco,'RowLabels'),originalLabels)

应该返回行排列。

【讨论】:

  • 这比我想象的还要容易。一个更正:originalLabels 应该作为第二个参数,因为我需要向量来从原始数据中重现集群图。非常感谢!
  • @yuk:好的,已编辑(顺便说一句:您也有权编辑)
猜你喜欢
  • 2017-10-09
  • 2015-01-01
  • 2015-09-07
  • 2016-05-15
  • 2013-05-18
  • 2013-03-04
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多