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

1. 先理解DESeq2在做什么
1.1 差异分析的前提是“有比较”
差异分析一定建立在两组或多组比较上。常见场景包括对照组与实验组,不同组织,不同处理条件,不同时间点。
核心目的很明确。就是找出受变量影响的差异表达基因。
这些基因随后可进入GO、KEGG、GSEA等功能分析。
1.2 DESeq2适合什么数据
DESeq2处理的是原始counts数据 ,不是TPM,也不是已经做过标准化的表达矩阵。
输入矩阵中,行是基因,列是样本,数值是非负整数。
DESeq2的优势在于它能同时处理:
- 测序深度不同带来的偏差
- 文库组成不同带来的偏差
- 低表达和高变基因对整体分析的影响
它的标准化思想,是先校正样本间可比性,再做统计检验。
2. 读懂DESeq2的基本原理
2.1 输入、标准化和检验的顺序
DESeq2的典型流程是:
- 输入原始counts。
- 计算标准化因子。
- 做标准化。
- 基于负二项分布建模。
- 进行显著性检验。
- 对p值做多重检验校正。
- 按阈值筛选差异基因。
这意味着,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()提取差异分析结果。
输出结果一般包括:
baseMeanlog2FoldChangelfcSEstatpvaluepadj
其中,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 > 0down,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差异分析,可以按这个顺序执行:
- 整理原始counts。
- 准备样本分组表。
- 确认样本顺序完全一致。
- 构建DDS对象。
- 运行DESeq。
- 提取results。
- 按padj和log2FC筛选。
- 画火山图、热图和PCA图。
- 进入功能富集分析。
这套流程足够覆盖大多数常规转录组项目。
6.2 常见错误要避开
新手最容易犯的错误包括:
- 把TPM当成counts输入
- 样本顺序错配
- 分组因子水平设置不清
- 把去批次后的矩阵直接用于差异分析
- 只看p值,不看padj
- 只看fold change,不看表达量
这些问题往往比代码本身更致命。
7. 为什么建议借助成熟工具和课程资源
7.1 代码会写,不等于流程正确
DESeq2差异分析代码本身并不复杂。
真正难的是数据整理、参数设置和结果判断。
对于真实项目,尤其是临床样本、TCGA数据或单细胞衍生表达矩阵,常常还涉及:
- 批次信息整合
- 样本过滤
- 分组重编码
- 输出结果规范化保存
一旦前处理出错,后面的统计再规范也没有意义。
7.2 解螺旋能帮你更高效落地
如果你正在学习或整理自己的DESeq2差异分析代码,建议结合成熟的实战模板和规范化流程。
解螺旋可以帮助你更快完成数据整理、分析步骤梳理和结果输出,减少重复试错。
对于医学生、医生和科研人员来说,这意味着更少的踩坑时间,更快进入生物学解释阶段。
总结Conclusion
DESeq2差异分析的核心,不是记住几行代码,而是理解counts输入、样本匹配、标准化、检验和结果筛选 这条完整链路。
只要把这五个关键步骤理顺,你就能稳定完成大多数转录组差异分析任务。
如果你希望把DESeq2差异分析代码真正用到项目里,并减少数据整理和结果解读中的失误,欢迎关注并使用解螺旋 ,让规范化流程帮助你更快产出可靠结果。

- 引言Introduction
- 1. 先理解DESeq2在做什么
- 2. 读懂DESeq2的基本原理
- 3. DESeq2差异分析代码的关键步骤
- 4. 结果解读不能只看显著性
- 5. 批次效应和特殊情况怎么处理
- 6. 一个适合初学者的实战流程
- 7. 为什么建议借助成熟工具和课程资源
- 总结Conclusion






