差异表达基因热图怎么看_热图的解读及边界聚类的意义

热图(heatmap)是分子生物学文章里(尤其是microarray, RNA-seq相关论文)经常出现的图片。但热图一般有哪些用途,具体涉及哪些不同的参数画法,需要清楚了解。

1. 关于热图的用途

热图的用途一般有两个。

以RNA-seq为例,热图可以:

1)直观呈现多样本多个基因的全局表达量变化;

2)呈现多样本或多基因表达量的聚类关系。

第一个很容易理解,通过使用颜色(例如红绿的深浅)来展示多个样本多个基因的表达量高低,既直观又美观。

第二个需要考虑:聚类的对象是什么,是否需要聚类。

这里对典型的聚类进行举例。

例如,下图中即对12个基因的表达量(行代表基因,右侧字符为gene ID)及48个包含正常人和病人的样本(列代表样本,下方字符为样本ID)进行聚类的结果。我们很容易观察到图中基因群及人群样本在系统关系上的分类(图边界上方及图边界左边的树形结构)。

由此,我们从图中了解了人群样本的基因表达模式,并可以对他们进行分类。详细说来,聚类本质上利用的是多组值间两两的差异程度或者相似程度(比如欧式距离、相关系数等)作为依据,对多组值进行层级聚类,以最终得到样本间聚类的远近关系。

aa434e4293fb579983c4282d0af2f039.png
两组人12个基因表达的聚类图

那么什么聚类有什么用呢?

从样本角度讲,聚类可以观察到你采集的不同组别样本是否被分类到一起了。因为,理论上如果样本来自于同一个组,其特征应该是相似的,那么在进行聚类的时候就很容易因为相似就被聚在一起。而如果在实际操作中,某一个应该属于该组的样本被聚类到别的组了,那就说明这个样本本身的变异度很高,或者说在之前的样本采集或者测序过程中出了什么问题,则需要在正式进行接来的分析前考虑把该异常样本剔除掉。如下图如示,对照组(C)的样本聚类中出现了实验组(T),说明实验室组样本T可能有异常,需要进一步溯源其差异原因。必要情况下要予以剔除。

00d9cbf8741d2b9d439ac6b240b1d8a9.png
示例

从基因表达角度讲,聚类可以观察到那些基因群具体比较一致的表达变化。因为基因的上下游关系一般是连锁反应的,也就是说一个基因的表达增加可能能够带动一系列的基因的表达增加。那么从聚类图中就可以看到这个连锁的相关性,也是就看到一群基因被聚集在了一起(如上图边界左边的树状图)。

当你关心样本(或基因)在检测到的表达量水平如何分类,相关关系如何,那么你可以选择聚类。你可以选择:仅在样本水平聚类、仅在基因水平聚类或两者都进行。

但并非任何时候,聚类都是最佳的选择。尤其,当你预先设定好的样本排序或基因排序已经很有生物学意义,并且想在最终的图片中呈现,就应该放弃聚类。例如,你已经按照一个代谢通路对基因排好序,只想通过热图展示这条通路上基因的表达量如何变化。因为聚类会将原来很有生物学意义的基因排列打乱了。那么选择不聚类,维持原来数据的排序就是最好的选择(如下图)

9193f58c1495b0f4bd395a14e302563a.png
植物生长激素代谢通路热图

2. 热图中绘制软件和参数

如果你对R语言有所了解,那么R软件包中的ggplots是不错的选择,ggplots 的heatmap.2 命令中的参数Rowv(行聚类)和Colv(列聚类)。如果你不懂这些编程语言,也有其他简单易用的热图绘制软件供选择,例如专栏中之前介绍的heml1.0。

在对无论是microarray或者RNAseq进行聚类前一定要进行标准化(Normalization)。因为不进行标准化的数值有可能相互差异太大,导致热图的显示扭曲。这种标准化除了是对表达数据进行整理(比如去头去尾,保留数据群的3/4), 还包括对比如z-score变换,如下图有些microarray数据集的热图中可能会出现的图例;再比如有时候进行的log2变换。不过,这些都不会强制的,主要还是看自己数据的表达差异大不大,如果太大,就需要变换一下,使数据范围变窄一点,容易显示。

2e9f0a1a2c1df486601109759cab7b61.png
热图中的图例

比如:以RNAseq为例,某低丰度的基因的表达量在RPKM<10以内。而某高丰度基因则RPKM值达到100000+。如果不对数据进行均一化,很难在同一套颜色变化幅度范围内展现如此大尺度的数值变异。而如果进行Log10变换,则分别为log10(100000)=5,log10(10)=1。此时的层次在一个量级,热图的显示也不至于太跨度太大。通常,热图软件都可以选择对绘图数值进行标准正态分布化(Z score)。也就是将一组值通过均一化,使其符合均值为0,方差为1的标准正态分布。

对于大部分的microarray热图图例的变化范围很小,一般是以0为中心,变异范围在±3以内,这些绘图基本都是基于数据的变换后实现的。对于RNAseq而言,由于counts都是正数的,所以其热图在标准化后也还是正数,此时的图例显示一般在0-10之间。

值得注意的是:

在进行均一化时,我们是选择按行均一化、按列均一化还是对所有值均一化。

  • 按行均一化:将每一行数值分别单独处理,使其符合标准正态分布;
  • 按列均一化:将每一列数值分别单独处理,使其符合标准正态分布;
  • 对所有值均一化:将所有的行列数据一起处理,使其符合标准正态分布;

不同处理方式,背后的意义也会有所不同。例如,如果在聚类过程中,你想让高表达的基因对样本的分类起到更大的作用,那么选择“对所有值均一化”也是较好的选择。但通常在热图绘制过程中,我们一般是以基因为单位来观测这些表达量数值的变化的。这意味着,这些基因无论表达量高低,其地位理论上是平等的(至少也是相似的)。即,如果A基因表达量从10变化到20,B基因表达量从100变化到200,我们更关心它们变化的倍数(都是2倍)而不是变化的绝对值(10 vs 190)。那么,我们应该以基因为单位进行归一化。

按基因均一化,可以最大程度地呈现每一个基因的变化信息,避免一个超高表达的基因掩盖了其他基因的变化。因此,在热图绘制中,这是常用的归一化策略。

更新于2020年8月22日

### 如何使用 R 语言创建多样本相关性 为了创建多样本相关性,`ggplot2` 和 `pheatmap` 是两个常用的包。下面详细介绍如何利用这两个工具来实现这一目标。 #### 使用 ggplot2 创建 通过 `ggplot2` 可以完成复杂的数据可视化任务,包括构建。对于基因表达数据分析而言,这不仅能够展示样本间的关联模式,还能结合聚类分析揭示潜在的分组特征[^1]。 ```r library(ggplot2) library(reshape2) # 假设 data_matrix 是一个包含多个样本基因表达量的矩阵 data_melt <- melt(data_matrix) ggplot(data = data_melt, aes(x=Var1, y=Var2)) + geom_tile(aes(fill=value), colour="white") + scale_fill_gradient(low="white", high="steelblue") ``` 此段代码首先加载必要的库并准备数据集;接着调用 `melt()` 函数转换原始矩阵格式为适合绘的形式;最后定义形属性,其中填充颜色由低到高变化,以此直观反映不同水平下的关系强度。 #### 利用 pheatmap 进行更高级别的定制化操作 当涉及到更加复杂的场景时,比如希望同时呈现上下方或两侧边界的树状,则推荐采用 `pheatmap` 包来进行绘制工作。它允许用户轻松调整诸如颜色方案、字体大小等多种样式选项[^4]。 ```r library(pheatmap) # 计算样本之间的皮尔逊相关系数作为输入距离度量标准 correlation_matrix <- cor(t(data_matrix)) # 绘制带有聚类功能的相关性 pheatmap(correlation_matrix, color=colorRampPalette(c("navy","white","firebrick3"))(50), clustering_distance_rows="euclidean", clustering_method="ward.D2" ) ``` 上述脚本先计算转置后的样本间 Pearson 相关性得分构成新的矩阵形式;随后设置自定义的颜色渐变范围以及指定用于生成簇内成员排序的方法论基础——这里选择了欧几里得距离配合 Ward 法最小化离差平方和准则进行优化组合[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值