如何在Python中以一种显示基因表达值矩阵和树状图的方式进行层次聚类(在本例中为基因表达数据)?我的意思是像这里的例子:
http://www.mathworks.cn/access/helpdesk/help/toolbox/bioinfo/ug/a1060813239b1.html
在子弹点6(图1)之后显示,其中树形图绘制在基因表达矩阵的左侧,其中行已经重新排序以反映聚类。
如何使用numpy / scipy或其他工具在Python中执行此操作?此外,使用欧氏距离作为度量,使用大约11,000个基因的矩阵进行计算是否实用?
编辑:许多人建议使用群集程序包,但我仍然不确定如何在Python中绘制我上面链接的图像类型。如何使用Matplotlib作为热像图矩阵与树形图重叠?感谢。
答案 0 :(得分:4)
包括scipy.cluster
在内的许多聚类方法都是从所有成对距离排序开始的,
在你的情况下大约6000万,不是太大
以下需要多长时间?
import scipy.cluster.hierarchy as hier
import pylab as pl
def fcluster( pts, ncluster, method="average", criterion="maxclust" ):
""" -> (pts, Y pdist, Z linkage, T fcluster, clusterlists)
ncluster = n1 + n2 + ... (including n1 singletons)
av cluster size = len(pts) / ncluster
"""
pts = np.asarray(pts)
Y = scipy.spatial.distance.pdist( pts ) # ~ N^2 / 2
Z = hier.linkage( Y, method ) # N-1
T = hier.fcluster( Z, ncluster, criterion=criterion )
# clusters = clusterlists(T)
return (pts, Y, Z, T)
hier.dendrogram( Z )
如何对矩阵进行置换并很好地绘制 here 在三月份,部分回答。
答案 1 :(得分:2)
您可以使用scipy的cluster.hierarchy模块执行此操作。这些命令实际上甚至非常相似。但是,您必须使用correlation
而不是corr
作为pdist
的参数,而不是cluster
函数scipy的群集模块的名称是fcluster
。此外,对于树形图,函数在scipy中为dendrogram
,而在Matlab中为clustergram
。
您绝对可以使用欧几里德指标(认为它是pdist
的默认值)。我认为用11,000个基因做这个是可行的,因为这将是11000 *(11000-1)/ 2 = 60494500(11000选择2)的距离。这是一个很大的数字,但我认为肯定是可行的。
答案 2 :(得分:2)
有几个人在使用scipy和matplotlib为层次聚类和热图可视化创建原型模块方面取得了一些不错的进展:
How to get flat clustering corresponding to color clusters in the dendrogram created by scipy
我一直在调整这个代码来制作一个完整的层次聚类模块,我可以将其整合到我的一个转录组分析包中。我对使用各种聚类指标和方法以及着色渐变产生热图的最终产品非常满意。代码和示例输出如下所示:
http://altanalyze.blogspot.com/2012/06/hierarchical-clustering-heatmaps-in.html