3. 常用的 RNA-seq 分析模型:DESeq2、edgeR、limma-voom、机器学习模型简介
好,我们进入正题。
RNA-seq 差异表达分析,说白了就是回答一个问题:
这个基因在两个条件下,到底有没有显著变化?
你手头可能有一张表达矩阵,行是基因,列是样本,数字是 counts。但直接拿这些 counts 做 t 检验?不行。为什么?因为 RNA-seq 数据天生有三大难题:均值-方差关系、文库大小差异、以及低表达基因的高噪声。我前几年刚入行时,就曾直接拿 raw counts 跑 t 检验,结果假阳性率高得吓人,被审稿人一顿痛批。从此我记住了:工具选对,事半功倍。
这一章,我就把常用的模型给你捋一遍。我会重点讲三个经典模型,再简单提一下机器学习方法。你不需要每个都精通,但得知道什么时候用谁。
3.1 DESeq2:稳健派代表
DESeq2 是我个人最常用的模型之一。它的核心思想是:假设基因的 counts 服从负二项分布,然后估计每个基因的离散度参数,再通过一个类似 Wald 检验或 LRT(似然比检验)来做假设检验。
它的一个关键步骤是归一化,用的是“中位数比率法”。这种方法比简单用总 counts 归一化要稳健很多。如果某个高表达基因在一个样本中异常高,它不会把整个归一化因子拉偏。
你写代码通常这样跑:
library(DESeq2)
dds <- DESeqDataSetFromMatrix(
countData = count_matrix,
colData = col_data,
design = ~ condition
)
dds <- DESeq(dds)
res <- results(dds, contrast = c("condition", "treated", "control"))
输出结果里,最重要的是 log2FoldChange 和 padj(校正后的 p 值)。
design = ~ batch + condition 做校正。
3.2 edgeR:速度快,准度高
edgeR 和 DESeq2 是兄弟模型,也是基于负二项分布。但它的归一化方法用的是 TMM(Trimmed Mean of M-values)。说白了,就是去掉那些极端高表达和低表达的基因,只以中间部分做基准。
我个人的感觉是:edgeR 速度比 DESeq2 快一截,尤其是你跑几千个样本的时候。它的核心差异在于用了一个经验贝叶斯的精确检验或者准似然 F 检验。
library(edgeR)
dge <- DGEList(counts = count_matrix, group = group_factor)
dge <- calcNormFactors(dge, method = "TMM")
dge <- estimateDisp(dge)
et <- exactTest(dge)
topTags(et)
filterByExpr(dge) 过滤掉低表达基因,结果才合理。
3.3 limma-voom:从微阵列“借”来的将军
limma 本来是为微阵列芯片设计的,用线性模型 + 经验贝叶斯做差异表达。RNA-seq 数据进来后,voom 方法把它“翻译”成 limma 能吃的样子。
具体来说,voom 将 counts 变成 log2 CPM,然后估算每个基因的均值-方差权重,最后丢给 limma 做线性建模。我总觉得,这个方法其实是一种更灵活的折中方案:你想在模型中加多个协变量?limma-voom 配合度很高。
library(limma)
library(edgeR)
dge <- DGEList(counts = count_matrix)
dge <- calcNormFactors(dge)
v <- voom(dge, design = model.matrix(~ condition))
fit <- lmFit(v, design)
fit <- eBayes(fit)
topTable(fit, coef = "conditiontreated")
3.4 三种模型的差异对比
我把它们的核心差异整理成一张表,方便你快速对比:
| 特性 | DESeq2 | edgeR | limma-voom |
|---|---|---|---|
| 分布假设 | 负二项分布 | 负二项分布 | 线性模型 + 方差权重 |
| 归一化方法 | 中位数比率 | TMM | TMM + logCPM |
| 优势场景 | 小样本(3-5)、稳健 | 大样本、快速 | 复杂设计、多协变量 |
| 输出指标 | log2FC, padj, baseMean | logFC, FDR, CPM | logFC, adj.P.Val, AveExpr |
| 假阳性控制 | 严格,适合敏感分析 | 中等,适合筛选 | 偏宽松,适合探索 |
你想想看:如果你的实验只有 2 组,每组 3 个样本,我推荐 DESeq2。如果样本量有 10 个以上,edgeR 或 limma-voom 都行,主要取决于设计复杂度。
3.5 机器学习模型简介
近两年,越来越多的研究开始用机器学习模型直接做分类或差异基因筛选。常见的方法有:
- 随机森林(Random Forest):可以给基因排重要性,适合大量特征的初步筛选。
- 支持向量机(SVM):小样本高维数据下表现不错,但需要调参数。
- 深度学习(如 autoencoder):主要用于降维或构建 latent 特征,不适合直接做差异检验。
- XGBoost / LightGBM:梯度提升树,对特征交互敏感,但容易过拟合。
好了,这就是本章的模型总览。你记住一个原则:先理解数据特点,再选模型,不要习惯性只用一个。我建议你把三个统计模型都跑一遍,看看哪些基因是稳定出名的,再结合机器学习做个交叉验证,结果会更有说服力。