4. 模型假设:负二项分布与均值-方差关系

说到DESeq2和edgeR的结果为什么经常不一样,我得先聊一个核心问题——它们俩对数据的基本假设。说实话,很多人跑完差异分析,看到两个工具给的结果不同,就开始怀疑代码写错了。其实啊,很可能是忽略了这两个工具的模型起点就不完全一样。

我习惯把这个问题归结为三个字:方差假设。你想想看,RNA-seq数据的本质是什么?是计数。对计数数据建模,最自然的想法是泊松分布。但为什么实际没人直接用泊松呢?

核心结论:RNA-seq数据的方差通常大于均值,违反了泊松分布“方差=均值”的假设。DESeq2和edgeR都采用负二项分布来建模,引入了一个额外的离散度参数来处理过度离散。

为什么泊松分布不够用?

先来个简单的例子。假设我们测了一个基因,它在两个条件下的平均表达量都是100。按照泊松分布,方差也应该是100,标准差就是10。也就是说,大部分样本的计数会在90到110之间波动。

但实际RNA-seq数据呢?我做过一个项目,某个看家基因的平均表达量是5000,可6个重复样本的计数却是:4200、5100、4900、5600、4800、5300。你算算方差,远大于均值。这种方差过大的现象,统计上叫过度离散。

分布类型 均值-方差关系 适用场景
泊松分布 方差 = 均值 技术重复、测序深度极高且生物学变异极小
负二项分布 方差 = 均值 + 离散度 × 均值² 生物学重复、真实RNA-seq数据

表格里这个公式很关键。你看,负二项分布的方差由两部分组成:一部分是泊松部分的均值(测序噪声),另一部分是一个二次项,由离散度参数控制。这个二次项就是处理过度离散的关键。

均值-方差关系的具体形式

DESeq2和edgeR都用负二项分布,但它们在如何估计和处理离散度上存在差异。这就导致了最终结果的不同。

先看基础公式。假设基因g在样本j中的真实表达量为μgj,那么它的计数Kgj服从负二项分布:

K_gj ~ NB(μ_gj, α_g)

Var(K_gj) = μ_gj + α_g * μ_gj²

这里的α_g就是基因特异的离散度参数。当α_g = 0时,负二项就退化成了泊松。α_g越大,方差偏离均值越厉害。

我在项目中遇到过一种情况:某个基因的表达量很低,平均只有5左右,但它的离散度特别大。结果DESeq2和edgeR对这个基因的p值判定就完全相反。为什么?因为两个工具对离散度的先验假设和收缩方式不同。

个人习惯:我每次跑差异分析前,都会先画一个均值-方差散点图。如果看到方差随均值呈二次增长的趋势,那就放心用负二项。如果方差和均值差不多是一条斜线,那可能数据本身就有问题(比如重复样本太相似)。

DESeq2 vs edgeR:离散度估计的差异

来个表格,清晰对比一下两个工具在模型假设上的关键差异:

维度 DESeq2 edgeR
离散度先验 拟似然先验,默认所有基因共享一个全局趋势 经验贝叶斯,基于加权条件似然
收缩方式 将基因特异离散度向全局趋势收缩 将基因特异离散度向全局共同离散度和趋势离散度收缩
低表达基因处理 强收缩,低表达基因离散度被拉向全局趋势 中等收缩,保留更多基因特异信息
均值-方差曲线 参数化拟合(由所有基因拟合一条光滑曲线) 非参数化或半参数化拟合

看这个表格,你就能明白为什么结果会有差异了。特别是低表达基因,DESeq2的收缩更狠,结果更保守;edgeR相对更放松,容易筛出更多基因。我自己做模拟数据对比时,这个差异非常明显。

什么时候两个工具的结果会一致?

这里分享一个经验:当生物学重复足够多(比如每组6个以上)时,两个工具的结果高度一致。因为重复多了,离散度估计就稳定了,先验假设的影响就小了。

我曾经踩过的坑:有个项目每组只有2个生物学重复,我同时跑了DESeq2和edgeR。结果筛选出的差异基因,只有30%是重叠的。当时我还以为是数据有问题,后来发现就是离散度估计不稳定导致的。

均值-方差关系的可视化理解

直接看公式和表格可能有点抽象。我来画一张图,把整个逻辑串起来。

这张图展示了从原始计数数据出发,到最终模型假设建立的完整流程:

负二项分布模型假设核心逻辑 原始RNA-seq计数 候选模型:泊松分布 方差 = 均值 检查:实际数据是否满足泊松假设? 核心模型:负二项分布 Var = μ + α·μ² 均值-方差关系 二次增长,解决过度离散 离散度参数 α 全局收缩 vs 基因特异估计 DESeq2 vs edgeR 的差异 根源就在α的估计方式

这张图把整个逻辑链条串起来了。从原始计数出发,我们发现泊松分布太理想化,实际数据方差更大。所以必须引入负二项分布,用离散度参数α来描述均值-方差关系。而DESeq2和edgeR的差异,归根结底就是对α的估计策略不同。

实践中的关键参数:离散度

在实际操作中,有几个数值值得关注:

  • α < 0.01:离散度很低,数据接近泊松,DESeq2和edgeR结果几乎一致。
  • α 在 0.01 ~ 0.1:中度离散,两个工具开始在低表达基因上出现差异。
  • α > 0.1:高离散度,结果分歧显著,需要谨慎解释。

我个人习惯在跑差异分析前,先跑一个简单的离散度估计:

# R代码示例:查看基因的均值-方差关系
library(DESeq2)

# 假设dds是已构建的DESeqDataSet
plotDispEsts(dds, main="Mean-Dispersion Relationship")

# 如果看到点(基因)围绕红色曲线紧密分布,说明模型拟合良好
# 如果点很分散,可能是数据质量有问题

避坑指南:我曾经处理过一批肿瘤样本数据,离散度特别大(α接近0.5)。当时两个工具给出的差异基因列表,重叠率连40%都不到。后来我重新检查了样本,发现有3个样本的library size异常大,去除了它们之后,离散度降到了0.05,两个工具的结果也基本一致了。

总结一下核心要点

  • RNA-seq计数数据的方差 > 均值,必须用负二项分布处理过度离散。
  • 负二项分布的方差公式为:μ + α·μ²,α是离散度参数。
  • DESeq2和edgeR在离散度α的估计方式上存在差异,导致结果不同。
  • 样本量越少、离散度越大,两个工具的结果差异越明显。
  • 检查均值-方差关系,是判断模型是否合适的第一步。

嗯,到这里,模型假设这部分就讲清楚了。你理解了负二项分布和均值-方差关系,就等于抓住了DESeq2和edgeR差异的根源。下一块内容,我们具体看看这两个工具是怎么处理那些异常值的。