今天看的视频教程前面讲了一大堆理论,把我都吓到了,弄到最后只是用gplots包画了个聚类热图而已。不过学点理论倒也不是坏事,至少有助于理解。
什么是聚类
将不同元素按照彼此相似性的大小按照一定的规则进行组织或者分类
聚类的应用
- 基因之间存在共表达
- 共表达的基因可能具有相似的生物功能
- 从具有相似表达谱的基因去推测其功能
- 利用不同基因表达模式对样本进行分类,找到潜在的分子标志物
- 更好的可视化
常用的聚类方法
- k-均值聚类
- 等级聚类
k-均值聚类
将所有点放入k个不重叠的类中,使得每个类中基因相似度高,而类之间基因的相似度低
过程
- 选择合适的聚类数据k
- 初始化k个聚类中心μ1-μk
- 从所有数据点中挑选k个点
- 将数据随机分为k类,以每类的中心作为聚类中心
- 计算每个数据点与每个中心的相似性,将数据点归类到最相似聚类中心所属的类中去
- 当所有数据归类完毕后,重新计算每个聚类的中心,作为新的聚类中心
- 重复计算所有数据点与新的聚类中心的相似性,并且再次归类
- 当聚类中心不再发生变化时,聚类停止
缺点
- 依赖于初始点的设置,可能不是全局最优解
- 需要预先知道分类的个数
- 可以通过比较类内部的举例和类之间的距离来评价聚类的质量
- 探索性的选择k
可视化
- 对于超过2维的数据,提取最高的两个主成分(PC)
等级聚类
应用
- 进化树
- 不同物种同源蛋白序列的相似性
原理
- 基因被看作是一个向量
- 通过元素与元素之间的距离,将不同的元素归类
结果
一个嵌套型的形式,适合于关注不同水平的分类细节,在聚类系统中较小的类嵌套在较大的类中,形成层层包含的组织形式
层次聚类的R实现
gplots
实例操作
setwd("")
library("gplots")
#基因表达量的原始数据
raw.dat=read.table("exprSet.txt", header=T)
#原始数据中包含的基因可能非常多,全部写到热图里去会很慢,而且挤在一起也看不清楚
#所以最好先做差异分析,把变化最显著的50或100个基因先挑出来,再画聚类热图
#TopGenes.txt里是需要写进热图的基因(一行一个)
topGenes=read.table("TopGenes.txt", header=F)
topGenes=as.matrix(topGenes)
data=raw.dat[,-1]
rownames(data) = raw.dat[, 1]
data=as.matrix(data)
data = data[topGenes,]
#heatmap.2是gplots包中的函数
heatmap.2(data, col = greenred(73), scale='row', dendrogram='both',density.info='density')