来自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];
那么,如何以编程方式获取这些向量?任何人都很熟悉这个对象?
任何人都可以建议一个很好的选择吗?我知道我可以创建一个结合了图像c和树状图函数的相似图形,但是在聚类图中叶子排序要比树状图要好得多(最佳)。
答
从看文档,我猜get(gco,'ColumnLabels')
和get(gco,'RowLabels')
,其中gco
是clustergram对象,应该给你重新排序的标签。请注意,相应的set
-方法以原始顺序接收标签并在内部对它们进行重新排序。
因此,如果您使用自定义标签(set(gco,'RowLabels',originalLabels)
)
[~,permrows] = ismember(get(gco,'RowLabels'),originalLabels)
应该返回行置换。
难道你不会从get(cgo,'ColumnLabels')'和'get(cgo,'RowLabels')''获取信息吗? – Jonas
@Jonas:我实际上使用了其他标签,但是您的解决方案可能是一种解决方法。不要将标签临时设置,然后获取矢量,并重置标签。从逻辑上讲,我认为'get(cgo,'RowLabels')'会以原始顺序返回标签,但我没有测试。看起来'set'和'get'的工作方式不同,所以'set(cgo,'RowLabels',get(cgo,'RowLabels'))'会给你错误的结果。无论如何,请将它作为答案发布。 – yuk
按要求完成:) – Jonas