试图厘清热图相关的一些细节
森严森语:
生活中很多时候我都习惯于不知所以而为之,其结果通常坏。原因在于经常的盲目自信和偶尔不愿承认自己的无知。
上篇推文介绍了利用Origin绘制热图的方法,推文一经发出,我就察觉到这是极其草率的。原因在于我自己压根儿还没有搞清楚热图的来龙去脉,就拿一堆乱七八糟的数据乱搞一通。
我觉得草率,还有几点:
于是,这两天就试图写一篇关于热图细节性问题的推文,以期扩展对热图的认知。
事先说好,这篇推文可能还是不能说的很清楚。因为下面的有些观点我没有去找源头。
【进入正题】
先上一组数据。还是使用上篇推文中的数据。
先不着急可视化,先来想一个问题,这个数据是什么呢?
因为我找来的数据,我肯定知道这是tpm值。先不管什么是tpm值。
再想一个问题,tpm能不能直接拿来做热图?如果不能直接拿来用,要进行怎样的处理?
此时显然还不能回答这样的问题。
【基本的认知】
不管上面的数据到底是什么,都知道这些数据来自于RNA-Seq,那就先来想为什么要做RNA-Seq?
这个问题比较好回答。
当条锈菌侵染小麦后会出现表型的变化。
这时,我们会以常理推测表型出现变化,很大程度上是由于小麦被条锈菌侵染后,小麦的某些蛋白含量出现了变化,而影响蛋白含量变化的直接原因就是来自基因表达的变化。于是,我们就要想办法测量小麦被条锈菌侵染后小麦全部基因表达变化的基因列表。
这就需要进行RNA-Seq了。
【RNA-Seq】
RNA-Seq之后,通常会得到count和tpm值。较早些时候进行RNA-Seq后,可能会得到除了count之外的FPKM值或RPKM值。
这里长话短说。
实际上RNA-Seq之后并不会直接得到FPKM值、RPKM值或tpm值。那为什么会有这些值出现呢?
思考一个问题:
gene1有1000条测序reads,gene2有10000条测序reads,那么是不是可以说
gene2的表达量一定比gene1高?
显然,没那么简单。至少我们可以考虑到造成这种情况的一部分原因在于gene1和gene2的长度不一样,此时,就需要对mapping到gene的reads count进行矫正。
再思考一个问题:
gene1有1000条测序reads,条锈菌侵染后gene1有2000条测序reads,那么是
不是可以说gene1的表达量在条锈菌侵染后发生了变化呢?
至少这个时候就需要考虑整体测序量的问题,同样需要矫正。
至此,就产生了FPKM值、RPKM值或tpm值。
【FPKM值、RPKM值或tpm值的概念】
RPKM:Reads Per Kilobase per Million
FPKM:Fragments Per Kilobase per Million
TPM:Transcripts Per Kilobase Million
这里具体的理解和推导就不重复了,感兴趣的可以去下面链接仔细查看。
https://zhuanlan.zhihu.com/p/325902055
https://zhuanlan.zhihu.com/p/38536790
https://zhuanlan.zhihu.com/p/50811365
https://www.plob.org/article/16013.html
https://www.rna-seqblog.com/rpkm-fpkm-and-tpm-clearly-explained/
https://www.jianshu.com/p/cecc5bc62105
(部分内容参考以上来源)
扯的有点远。
FPKM、RPKM和TPM都是对数据进行了标准化之后的数值。目前来说,主流使用TPM值。具体的答案可在上面的链接中寻找。
【回归主题】
迫不及待就像作图,已经知道,上述我展示的数据就是经过标准化的tpm值了,这个值是可以直接拿来热图可视化的。话不多说,直接出图。
这个结果其实还蛮不错。乍一看感觉挺像那么回事。但是仔细一看,还是存在一些问题。这么看可能不是很明显。我们换种效果再看。
可以很直观的发现,图中红色圈内和绿色圈内的tpm值命名相差很大,但是在颜色上很难区分,这就没有达到我们要进行比较的目的。
而且这种情况通常很难避免。这时候就需要在tpm的基础上进一步处理。之所以可以对tpm值进行进一步处理,是因为更多的时候我们并不关心基因表达量的高低,我们更关心的是类似小麦gene1在pst侵染之后表达趋势的问题。
通常我们会对tpm值进行取对数、正态标准化和0-1标准化。
【对数转换】
取对数时,我们经常在论文中看到log2(tpm+1),实质上这个底数我们可以取2,也可以取e或10.
之所以不用log2(tpm)是因为很多时候我们得到不少基因在某些sample中没有表达,即tpm值为0,而对数的真数不能为0,于是,一般的,我们会进行log2(tpm+1)来处理。
这里我分别取底数为2和10来看看。
底数取2或10似乎没什么变化,但是可以很明显的看到刚才红色圈和绿色圈内的色差很容易区分了。
这样就达到目的了。
需要思考一个问题:
此时,同一gene在不同sample间,或者同一sample中不同gene的表达量
是否可以比较?
【正态标准化】
这里通常需要思考,要进行行标准化还是列标准化?很显然,行标准化与列标准化是不同的。
行标准化后,可以比较每个gene在不同sample中的表达情况。但,行与行之间绝对数值不能再进行比较了。
列标准化后,可以比较每个sample中不同gene的表达情况。但,列与列之间绝对数值不能再进行比较了。
不过,不管进行列标准化还是行标准化,表达趋势是可以在跨行列进行比较的。通过下图来体会一下。
【0-1标准化】
0-1标准化和正态标准化类似,同样,通过下图进行体会。
能发现什么呢?
对行进行0-1标准化后,使得每一行表达量最高值为1,最低值为0;
对列进行0-1标准化后,使得每一列表达量最高值为1,最低值为0。
【聚类】
对tpm值进行以上三种方式的转换之后,使得可视化效果极大地改善,但是,有时为了对表达模式进一步分析,就需要聚类分析,以便通过热图可视化挑选最优的候选基因进行后续研究。那就聚类看看
可以看到,通过行聚类,将表达趋势相似的行聚类到一起,这样看起来就更舒服了。
先写到这里,关于热图,以后应该还会写。
-----------“但愿每次回忆,对生活都不感到负疚。”-----------