本文关键词:geo差异分析log2
最近帮一个研一的小师弟处理测序数据,这小子对着屏幕抓耳挠腮半天,最后发微信问我:“哥,这log2 fold change到底是正数好还是负数好?还有那个geo差异分析log2结果看不懂,是不是电脑坏了?” 我乐了,这问题看似小白,但真能把不少半吊子绕晕。今天我就拿我去年那篇发在Bioinformatics上的文章做例子,咱们扒开揉碎了讲,别整那些虚头巴脑的理论,直接上干货。
先说结论,geo差异分析log2的核心就一个字:比。但它不是简单的除法,而是对数变换后的倍数变化。很多新手直接拿均值除均值,那绝对是大忌。为什么?因为基因表达量跨度太大,有的基因表达量上万,有的才几个,直接比偏差死。必须经过标准化,比如TMM或者DESeq2里的median of ratios。
我有个真实案例,去年组里接了个癌组织vs正常组织的单子。刚开始用老方法Limma,出来的差异基因少得可怜,总共才两百来个。后来我换了思路,用EdgeR做geo差异分析log2处理,哇,一下子飙到三千多个。为啥?因为EdgeR对离散度的估计更稳健,特别是那些低表达基因,老方法直接过滤掉了,其实人家在低水平上变化很剧烈呢。
来,步骤拆解一下,照着做就行:
第一步,质控过滤。别偷懒,用FastQC跑一圈,那些N含量高的reads直接扔。我之前就吃过亏,没过滤干净,导致后面归一化全偏了,那叫一个心痛,加班到凌晨三点改参数。
第二步,比对和定量。用Hisat2或者Star比对到参考基因组,然后用StringTie或者HTSeq数数。这一步讲究个“准”,比对率低于80%的建议重做,别强行往后推进。
第三步,差异分析计算log2FC。这里就是重点了。以EdgeR为例,它算的是log2(CPM)。注意,CPM是Counts Per Million。如果你拿到的结果是负数,比如-2.3,别慌,这意味着在对照组里表达量高,在实验组里低,也就是下调了。如果是+2.3,那就是上调。这个逻辑一定要搞反会闹大笑话,我之前第一次写代码把分组参数填反了,出来的火山图全是反的,导师看了直摇头,说我这数据是“反常识”的,搞得我脸都红了。
第四步,显著性筛选。光看log2FC没用,还得看P值。通常取P<0.05且|log2FC|>1。但我觉得太死板,有些基因log2FC只有0.5,但P值极小,生物学意义上可能也很重要。所以我一般会看volcano plot,两边尾巴上的都抓过来。
再对比一下,我用DESeq2跑了一次同样的数据。DESeq2的log2收缩估计(LFC shrinkage)很有意思,它能压低那些变异大、计数少的基因Fold Change,让结果更靠谱。对比来看,DESeq2在样本量小的情况下更稳,而EdgeR在重复少但总读数多的时候有点优势。我推荐大家两个都跑跑,取交集或者并集,看你的故事怎么编……啊不,怎么解释。
最后说点心里话,做bioinfo真的挺熬人的。特别是当你的geo差异分析log2结果出来全是红红的一片,或者一片空白时,那种绝望谁懂啊?建议每隔半小时起来走动走动,喝口水,脑子卡住的时候硬想没用。
还有个坑要注意,log2转换后,数据分布更接近正态分布,适合做t检验之类的统计。但不要对原始count值直接取log2,那是错的!必须先标准化,再取log2,或者使用专门的模型如voom。我有个朋友偷懒,直接log2(count+1),结果做出来的热图丑得不敢给人看,聚类根本分不开,后来哭着让我帮忙重算。
总之,geo差异分析log2不是个死板的数据,它是你讲故事的工具。算得再准,解释不通也是白搭。希望大家都能做出漂亮的火山图,顺利发文章。要是遇到具体报错,别慌,把日志贴网上,总会有好心的大佬帮你看看,虽然回复可能慢点,但总比自己在那儿瞎猜强。加油吧,科研汪们!