2. 差异表达分析的基本原理归纳总结
做RNA-seq差异分析,很多人上手就是跑DESeq2或edgeR。但你要是不懂背后的原理,调参就是瞎调。今天我就把这套底层的逻辑掰开揉碎了讲清楚。
2.1 什么是差异表达分析?
说白了,就是比较两组样本里,哪些基因的表达量有统计学意义上的显著变化。比如用药组 vs 对照组,敲除组 vs 野生型,癌症组织 vs 正常组织。
差异分析的核心输入是一个计数矩阵——每一行是基因,每一列是样本,每个格子是对齐到该基因的read数。输出呢,是一张差异基因列表,里面包含了log₂倍变化、p值、校正后p值这些指标。
关键认知:差异分析的输入是整数计数,不是FPKM/RPKM,也不是TPM。我遇到过有人把FPKM直接丢进DESeq2,结果跑出来一堆假阳性。切记——DESeq2和edgeR都只认原始整数计数。
2.2 为什么不能直接比较表达量?
直觉上,一个基因在A样本有1000条read,在B样本有500条read,你可能会觉得它在A里表达更高。但事情没那么简单。
三个因素会干扰这种直接比较:
- 测序深度不同: A样本测了4000万条read,B样本只测了2000万条。A的计数天然就大,不归一化根本没法比。
- 基因长度差异: 同一个基因在不同样本里长度是一样的,但不同基因之间长度差异很大。长度越长,能比对上去的read就越多。
- 文库组成效应: 这个我重点说一下。少数高表达基因如果发生了差异表达,会挤压其他基因的比对空间,造成一种"所有基因都变了"的假象。这是归一化要解决的核心问题。
我的习惯:拿到一个新数据集,我先用plotRLE()或plotPCA()看一眼样本间的整体偏差。如果批次效应或文库组成效应很明显,归一化参数就得格外小心。
所以,差异分析不能直接比原始计数。你得先归一化,再建模,最后做统计检验。
2.3 统计模型的核心:负二项分布
RNA-seq的计数数据有两个特点:
- 离散性: 计数是整数,不是连续值。
- 过离散: 方差大于均值。这是生物学重复带来的——同一基因在同组样本里,表达量会有波动。
泊松分布要求方差等于均值,但RNA-seq数据显然不满足。所以DESeq2和edgeR都用了负二项分布(也叫Gamma-Poisson分布)。它在泊松的基础上加了一个散度参数,用来描述方差和均值之间的关系。
数学形式很简单:
Var(Y) = μ + α · μ²
其中μ是均值,α是散度参数。α越大,数据越分散。α=0时退化为泊松分布。
我曾经踩过的坑: 有一次做时间序列差异分析,3个生物学重复,结果散度参数估计出来是负的。后来发现是两个样本的标签搞混了。如果你碰到散度参数为负、或者模型无法收敛,先别急着调参数——回去检查样本注释和比对质量。
2.4 归一化方法
DESeq2和edgeR各自用了不同的归一化策略。下面这个表格可以帮你快速理解差异。
| 工具 | 归一化方法 | 核心思想 | 适用场景 |
|---|---|---|---|
| DESeq2 | RLE (Relative Log Expression) | 以所有基因为参考,计算每个样本相对于"伪参考样本"的中位比例因子 | 大多数常规转录组;对文库组成效应较稳健 |
| edgeR | TMM (Trimmed Mean of M-values) | 剔除两端的M值,用加权平均估计比列因子 | 文库组成效应较大时表现更稳;适合TMM默认参数 |
| limma/voom | CPM / log-CPM + 权重 | 先转成CPM,再用voom估计均值-方差权重 | 适用于大样本或多因素实验 |
实际上,DESeq2的RLE和edgeR的TMM在大部分数据集上结果非常接近。我个人的建议是:如果你不确定选哪个,就用DESeq2的RLE,它在默认参数下的稳定性更好。
2.5 多重假设检验校正
做完差异检验,你拿到了一堆p值。假设你分析了20000个基因,如果直接用p < 0.05筛选,那假阳性就有1000个——这显然不可接受。
为什么?因为每个基因的检验是独立的,20000次检验里,纯随机也会产生约5%的显著性结果。这就是多重比较问题。
常见的校正方法有以下几种:
- Bonferroni校正: 把阈值除以基因数。太严格了,在转录组分析中几乎不用。
- BH (Benjamini-Hochberg) 校正: 控制FDR(假发现率)。这是差异分析的标配。DESeq2和edgeR默认输出的padj/p值就是BH校正后的结果。
- q-value: 基于阳性FDR的方法,比BH更激进一些,但不太常用。
筛选原则: 我一般用 padj < 0.05 和 |log₂FC| > 1 作为初筛条件。padj控制假阳性,log₂FC控制效应大小。两个条件一起用,可以大幅减少报告出去的假阳性。
2.6 差异分析完整流程
把上面讲的内容串起来,完整的差异分析流程就是下面这张图的样子。我建议你把它打印出来贴在工位上。
整个流程看下来,你会发现核心就四步:归一化 → 建模 → 检验 → 校正。DESeq2和edgeR在这四个步骤上都用了类似但不同的策略,这也是下一章我们对比的重点。
一个小技巧: 我在做流程测试时,经常先用DESeq2的estimateSizeFactors()看一眼归一化因子的分布。如果某个样本的因子超过0.5-2的范围,我就会回去检查一下这个样本是不是有问题。这比直接跑完整分析要快很多。
嗯,到这里差异分析的核心原理你应该已经清楚了。归一化解决可比性问题,负二项分布解决过离散问题,BH校正解决多重比较问题。这三件事搞明白,后面的工具对比你就知道该看什么了。