引言Introduction

DESeq2是转录组差异分析的常用工具,但很多人卡在输入数据、分组设置、结果筛选和批次效应处理。真正影响结果的,不是代码多,而是步骤是否正确。 本文按实战流程拆解关键环节,帮助医学生、医生和科研人员快速建立清晰框架。
转录组差异分析流程示意图,展示counts输入、标准化、差异检验、结果筛选四个步骤

1. 先理解DESeq2在做什么

1.1 差异分析的前提是“有比较”

差异分析一定建立在两组或多组比较上。常见场景包括对照组与实验组,不同组织,不同处理条件,不同时间点。

核心目的很明确。就是找出受变量影响的差异表达基因。
这些基因随后可进入GO、KEGG、GSEA等功能分析。

1.2 DESeq2适合什么数据

DESeq2处理的是原始counts数据 ,不是TPM,也不是已经做过标准化的表达矩阵。
输入矩阵中,行是基因,列是样本,数值是非负整数。

DESeq2的优势在于它能同时处理:

  • 测序深度不同带来的偏差
  • 文库组成不同带来的偏差
  • 低表达和高变基因对整体分析的影响

它的标准化思想,是先校正样本间可比性,再做统计检验。

2. 读懂DESeq2的基本原理

2.1 输入、标准化和检验的顺序

DESeq2的典型流程是:

  1. 输入原始counts。
  2. 计算标准化因子。
  3. 做标准化。
  4. 基于负二项分布建模。
  5. 进行显著性检验。
  6. 对p值做多重检验校正。
  7. 按阈值筛选差异基因。

这意味着,DESeq2不是直接比较原始count,而是比较经过标准化后的表达差异。

2.2 为什么要先标准化

标准化主要解决两个问题。

  • library size不同。 不同样本测序深度不同,总reads数可能差很多。
  • library composition不同。 某些样本里特异高表达基因会显著影响总count构成。

例如,两个样本总count接近,但某个基因在一个样本中占据大量reads,在另一个样本中几乎不表达。
如果不校正,差异会被放大或扭曲。

2.3 标准化因子怎么来的

DESeq2常用的是基于中位数比值的思路。简化理解如下:

  • 先去掉全为0或含大量0的基因
  • 对每个基因计算样本间相对比例
  • 再取中位数得到每个样本的size factor
  • 用原始counts除以size factor完成校正

这样可以尽量让大多数不变基因作为参照。
这也是DESeq2稳健性的来源之一。

3. DESeq2差异分析代码的关键步骤

3.1 准备原始counts和分组信息

最常见的输入是两个对象:

  • counts,原始表达矩阵
  • colData,样本信息表

样本信息至少要包含分组变量,例如control和case。
如果有批次信息,也建议一并记录。

注意,counts的列名必须和colData的行名一一对应。
这是很多初学者最容易出错的地方。

3.2 构建DESeqDataSet对象

在R中,常见写法是用DESeqDataSetFromMatrix()创建DDS对象。
它需要三个核心参数:

  • countData
  • colData
  • design

design表示你想研究的变量,最常见写法是~ condition

如果分组错了,后面的所有结果都会错。

3.3 运行DESeq主函数

创建好DDS对象后,使用DESeq()进行分析。
这一步通常会完成:

  • size factor估计
  • 离散度估计
  • 模型拟合
  • Wald检验

然后用results()提取差异分析结果。

输出结果一般包括:

  • baseMean
  • log2FoldChange
  • lfcSE
  • stat
  • pvalue
  • padj

其中,padj通常是筛选差异基因时更重要的指标。

3.4 常用筛选阈值

实践中常用的筛选标准是:

  • padj < 0.05
  • |log2FoldChange| > 1

这相当于fold change大于2。
如果研究更严格,可使用padj < 0.01

但要注意,阈值不是越严越好,要结合样本量、研究目的和生物学背景。

4. 结果解读不能只看显著性

4.1 先看分组是否合理

差异分析前,建议先确认样本关系是否符合预期。
常见做法是用VST或rlog后做PCA。

如果实验组和对照组能够大体分开,说明分组和数据质量通常较可靠。
如果样本混杂严重,就要检查:

  • 分组是否有误
  • 是否存在离群样本
  • 是否有批次效应
  • 是否测序深度差异过大

4.2 低表达基因要谨慎

低表达基因容易带来不稳定的fold change。
DESeq2在统计上会对这类基因进行一定处理,但分析者仍应谨慎解释。

一个基因“显著”不代表它一定“重要”。
还要结合表达量、通路背景和文献证据判断。

4.3 上下调基因都要看

差异分析后,不要只盯着上调基因。
下调基因往往更能提示抑制性通路、反馈调控或病理状态改变。

建议整理结果时增加一列:

  • up,log2FC > 0
  • down,log2FC < 0

这样更方便后续可视化和富集分析。

5. 批次效应和特殊情况怎么处理

5.1 批次效应要提前考虑

TCGA、GEO和多中心数据中,批次效应很常见。
如果batch和分组强相关,结果会被严重干扰。

处理思路有两类:

  • 在DESeq2的design中纳入batch
  • 先做VST,再用removeBatchEffect()处理用于聚类或可视化

要注意,去批次后的表达矩阵通常不建议直接用于差异表达检验。

5.2 生物学重复很重要

从DESeq2 1.22版本以后,官方推荐使用有生物学重复的数据。
没有重复时,统计稳定性会明显下降。

对于真实科研项目,生物学重复不是可选项,而是基本要求。

5.3 过滤低表达基因能提升效率

DESeq2可以自动处理一部分低表达基因,但在大数据场景下,预过滤仍然有价值。
常见做法是保留在至少若干样本中count大于0的基因。

这样可以:

  • 减少计算量
  • 提高分析速度
  • 降低噪音基因干扰

6. 一个适合初学者的实战流程

6.1 标准流程建议

如果你是第一次做DESeq2差异分析,可以按这个顺序执行:

  1. 整理原始counts。
  2. 准备样本分组表。
  3. 确认样本顺序完全一致。
  4. 构建DDS对象。
  5. 运行DESeq。
  6. 提取results。
  7. 按padj和log2FC筛选。
  8. 画火山图、热图和PCA图。
  9. 进入功能富集分析。

这套流程足够覆盖大多数常规转录组项目。

6.2 常见错误要避开

新手最容易犯的错误包括:

  • 把TPM当成counts输入
  • 样本顺序错配
  • 分组因子水平设置不清
  • 把去批次后的矩阵直接用于差异分析
  • 只看p值,不看padj
  • 只看fold change,不看表达量

这些问题往往比代码本身更致命。

7. 为什么建议借助成熟工具和课程资源

7.1 代码会写,不等于流程正确

DESeq2差异分析代码本身并不复杂。
真正难的是数据整理、参数设置和结果判断。

对于真实项目,尤其是临床样本、TCGA数据或单细胞衍生表达矩阵,常常还涉及:

  • 批次信息整合
  • 样本过滤
  • 分组重编码
  • 输出结果规范化保存

一旦前处理出错,后面的统计再规范也没有意义。

7.2 解螺旋能帮你更高效落地

如果你正在学习或整理自己的DESeq2差异分析代码,建议结合成熟的实战模板和规范化流程。
解螺旋可以帮助你更快完成数据整理、分析步骤梳理和结果输出,减少重复试错。
对于医学生、医生和科研人员来说,这意味着更少的踩坑时间,更快进入生物学解释阶段。

总结Conclusion

DESeq2差异分析的核心,不是记住几行代码,而是理解counts输入、样本匹配、标准化、检验和结果筛选 这条完整链路。
只要把这五个关键步骤理顺,你就能稳定完成大多数转录组差异分析任务。
如果你希望把DESeq2差异分析代码真正用到项目里,并减少数据整理和结果解读中的失误,欢迎关注并使用解螺旋 ,让规范化流程帮助你更快产出可靠结果。

解螺旋科研助手企业微信二维码,扫码添加免费领取科研资料礼包,包含AI科研提效、SCI投稿技巧、国自然基金、医学科研绘图、科研软件工具等实用资料