edgeR概述:背景、应用场景与基本概念
说起RNA-seq差异表达分析,你可能跟我刚开始接触时一样——面对成千上万个基因的表达量矩阵,心里直打鼓:到底哪些基因真的变了? 这问题看似简单,但数据本身的离散度、文库大小差异、生物学重复的波动……每一个坑都可能让你得到假阳性或假阴性结果。edgeR正是为了解决这个痛点而生的。
我个人习惯把edgeR看作「专为小样本RNA-seq设计的差异分析工具箱」。它最早由Robinson和Smyth在2008年推出,核心思路是用负二项模型处理计数数据的过度离散,再用经验贝叶斯方法稳健地估计基因间的变异。后来的quasi-likelihood(QL)方法更是把可靠性往前推了一大步——我曾在一次项目中用QL方法发现了一个被传统方法漏掉的低表达但生物学意义关键的基因,从那以后就再也没切回原始版本。
为什么需要edgeR?——RNA-seq的数据挑战
你想想看,RNA-seq实验产出的本质是什么?是每个基因的读数(counts)。这些读数受测序深度、基因长度、反转录效率、随机采样波动等影响,并不是简单的正态分布。更麻烦的是,生物学重复之间往往存在天然的异质性——比如两组小鼠肝脏样本,即便处理完全一样,某些基因的表达水平也会因个体差异而上下浮动。
传统t检验或ANOVA直接套用在这些计数数据上,很容易被少数极端值带偏,还忽略了数据本身的离散结构。edgeR祭出的负二项模型,说白了就是给每个基因配一个「离散参数」,专门处理这种均值-方差不独立的情况。
我早期用edgeR时,误把FPKM或TPM当成直接输入,结果模型全乱套。记住:edgeR的输入必须是未经任何标准化原始整数计数(raw counts),且行是基因/转录本,列是样本。千万别给它喂归一化后的数据。
edgeR能做什么?——典型应用场景
- 两组间差异表达基因筛选(case vs control)——最基础也最常见的场景。
- 多组广义线性模型比较(比如时间序列、剂量-反应、多个处理组)——edgeR的glmQLFit等函数就是为这个准备的。
- RNA-seq数据质控与预处理(过滤低表达基因、标准化文库大小)。
- 探索性分析(MDS图、BCV图)辅助解读样本关系。
- quasi-likelihood F检验(对稳健性要求极高的场景)——我一般会在预实验样本量只有3重复的时候首选QL方法。
核心概念一览
| 概念 | 一句话解释 | why important |
|---|---|---|
| 负二项(NB)模型 | 给Poisson套上离散参数,允许方差比均值大 | RNA-seq计数数据典型的方差>均值特性 |
| 经验贝叶斯(EB)收缩 | 借用所有基因的信息来稳定单个基因的离散估计 | 样本量小时,EB极大降低了估算方差 |
| quasi-likelihood (QL) | 在NB基础上再引入一个QL离散参数,对每个基因做二次尺度调整 | 比经典NB更保守,尤其适合小样本和异常值场景 |
如果你只有2~3个重复/组,千万别迷信p值排名。建议先用QLFtest跑一遍,再结合logFC和平均表达量做多维度筛选。我自己经常用volcano + MA双图交叉验证。
edgeR的典型工作流
下面这张图概括了从原始计数到差异基因列表的核心流程,你会发现edgeR基本贯穿了中间所有统计环节:
开始你的第一个edgeR分析
先把包装好。我建议在你的R环境里运行这行命令:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("edgeR")
安装完,加载并看看数据长什么样。我用一个内置数据集举例:
library(edgeR)
data("airway", package = "airway")
expr <- airway@assays@data$counts
head(expr, 4)
输出类似这样的整数矩阵(行是基因,列是样本):
SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516 SRR1039517 SRR1039520 SRR1039521
ENSG000000023490 0 0 0 0 0 0 0
ENSG000000010238 0 0 0 108 89 114 91
ENSG000000017648 131 176 100 99 104 88 168
ENSG000000028420 1 0 0 2 0 1 1
记住:不能有NA,不能有小数,行列名必须准确。如果出现小数位,说明你可能传入了RPKM之类的标准化数据——赶紧回头重新准备原始计数。
edgeR是用负二项模型处理RNA-seq过度离散问题的老兵,而quasi-likelihood是它的「增强装甲」——尤其适合样本量少、要求高可靠性的项目。接下来我会一步步带你从数据导入走到差异基因列表,每个步骤都会配上实际项目里踩过的坑。