1. RNA-seq差异表达分析简介:为什么需要两种方法

做RNA-seq差异表达分析,DESeq2和edgeR几乎是绕不开的两个名字。

很多人刚开始接触时都会问:既然目的都是找差异基因,为什么非要搞出两种方法?选一个不就行了?

嗯,这个问题我当年也困惑过。后来在几个项目里分别踩过坑,才慢慢理解——不是因为开发者闲得慌,而是数据本身有不同脾气。

1.1 核心目标:都是找差异基因

先明确一点:DESeq2和edgeR要解决的问题完全一样——给定一个基因表达计数矩阵,判断哪些基因在两个(或更多)条件之间有显著变化。

输入数据长啥样?

基因ID  对照组_样本1  对照组_样本2  处理组_样本1  处理组_样本2
GeneA    120           95            340           310
GeneB     8             12            15            11
GeneC    4500          5100          4300          4800

每一行是一个基因,每一列是一个样本,格子里的数字是比对到该基因上的reads数。这种整数计数的数据,就是两者共同的战场。

但同样面对整数计数,两套方法背后的统计学假设却不一样。说白了,它们对“噪音从哪里来”这件事,看法不同。

1.2 根本差异:对离散度的建模方式不同

RNA-seq数据有个天然问题:方差大于均值。如果你做过测序实验就知道,同一个基因在生物学重复之间,计数波动往往挺大。这种“过离散”现象,不能用简单的泊松分布来碰运气。

DESeq2和edgeR都用了负二项分布来建模。但具体怎么估计离散度参数,差别就大了。

比较维度DESeq2edgeR
离散度估计策略先拟合基因-均值关系曲线,再向曲线收缩使用经验贝叶斯,先估计共同离散度,再向共同值收缩
处理低表达基因自带Cook's distance,能自动识别离群点需要手动过滤低表达基因,否则影响离散度估计
小样本(2~3重复)收缩较强,假阳性控制更好如果表达量低,有时容易假阳性偏高
大样本(>5重复)收缩减轻,结果趋于保守可以利用更多数据,估计更准,功效更高
输出内容shrunken log2 fold change + p-valuelogFC + p-value + FDR

我记得有一次项目,样本只有两个生物学重复,对照组和处理组各两个。用edgeR跑出来一大堆显著基因,但热图一看,全是低表达基因在某个样本里突然冒出来两个reads造成的假象。换DESeq2重新跑,那些假阳性就消失了。从那以后,遇到极小样本,我个人会优先考虑DESeq2。

反过来,如果有八个重复以上,edgeR的表现经常比DESeq2更灵敏。它能用更精确的离散度估计为真差异基因“撑腰”。

1.3 两种方法的选择逻辑:看场景下菜碟

你问我哪个更好?说实话,不存在“更好”,只有“更合适”。

来看这张流程图,帮你快速定位该用哪个。

DESeq2 vs edgeR 选择流程 DESeq2 与 edgeR 选择决策流程图 RNA-seq 计数矩阵 样本重复数 <= 3? 是 否 推荐 DESeq2 收缩稳健,假阳性低 再看数据特征 重复数 >= 5 再细分 重复数 >= 5? 是 → edgeR 更灵敏 两者均可,交叉验证 推荐 edgeR

你看,核心判断依据就是样本量。小样本时DESeq2的收缩机制能帮你扛住波动;大样本时edgeR能释放更多统计功效。

当然,这只是一个快速指南。实际项目中,我通常会两个都跑一遍,然后看重叠基因——如果两个方法的结果基本一致,那心里就踏实多了。如果差异很大,那就得回头检查数据质量了。

1.4 数据预处理:两者都不能跳过的一步

不管用哪个方法,原始计数矩阵不能直接往里塞。有几个共同的坑,我先帮你标记出来。

  • 低表达基因过滤:DESeq2内部做了自动化处理,但edgeR需要你手动调。我个人习惯用 filterByExpr 函数。
  • 库大小差异校正:都是通过计算每个样本的细胞/文库大小因子来归一化,但具体算法略有不同——DESeq2用中位数比值的几何平均,edgeR用TMM。
  • 批次效应:如果实验有批次问题,千万不要直接扔进去。用 limma::removeBatchEffect 先调整,或者把批次因子放到设计矩阵里。
一个小技巧: 在跑差异分析前,先做个PCA。如果主成分图上处理组和对照组分不开,那就算算法再强也救不了。检查数据质量的时间,永远花得值。

1.5 绕不开的共同假设

虽然方法不同,但两者都依赖一个假设:大部分基因没有差异表达。这个假设是用来自动估计离散度的基础。

如果你做的实验是基因编辑敲除某个关键转录因子,几千个基因同时变化——这种情况其实不太符合这个假设。两种方法处理起来都会吃力,结果也要格外小心解读。

我记得有次做双突变体的RNA-seq,对照组和处理组差异极大,超过一半的基因都在变化。edgeR跑完结果非常激进,DESeq2相对保守,但两者重叠不到60%。后来用qPCR验证了几十个基因,发现DESeq2的假阳性率更低一些。那次之后我更确信:极端情况下,两个结果都做验证是唯一靠谱的方式。

1.6 为什么需要两种方法:给你一个对照

总结一下根本原因:算法设计时对噪声的容忍度和信息利用方式不同,导致不同数据规模、不同表达丰度下,两个方法各有优劣。

有对照,才能交叉验证。如果一个基因在两个方法中都是显著差异,那它是最可靠的一批。如果一个基因只在其中一个方法中显著,需要仔细看看它的表达量、离散度,甚至原始计数。

记住这句话: 差异表达分析不是“一锤子买卖”,而是一次需要反复校对的统计推断。准备两套工具,比只靠一个锤子强得多。

接下来的章节,我会一步步带你拆解DESeq2的完整工作流:从离散度估计到收缩后的log2 fold change计算。你准备好了吗?