来自CLUSTERGRAM对象的置换矢量(MATLAB)

问题描述:

我使用Bioinformatics Toolbox(ver 3.7)中的CLUSTERGRAM对象。 MATLAB版本R2011a。来自CLUSTERGRAM对象的置换矢量(MATLAB)

我想获得的行置换向量和列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和树状图一样,最有可能由于最优的叶子排序计算(我不想禁用它)。

例如,对于从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]; 

clustergram example

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

任何人都可以建议一个很好的选择吗?我知道我可以创建一个结合了图像c和树状图函数的相似图形,但是在聚类图中叶子排序要比树状图要好得多(最佳)。

+0

难道你不会从get(cgo,'ColumnLabels')'和'get(cgo,'RowLabels')''获取信息吗? – Jonas

+0

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

+0

按要求完成:) – Jonas

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

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

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

应该返回行置换。

+0

这比我想象的还要容易。一个更正:'originalLabels'应该作为第二个参数,因为我需要矢量从原始数据中重新生成clustergram。非常感谢! – yuk

+0

@yuk:ok,编辑(顺便说一句:你也有权编辑) – Jonas