DESeq2 简介与安装:让差异分析从第一步就稳

好,咱们正式开始接触 DESeq2 这个工具。

说实话,在 RNA-seq 差异分析这个领域,DESeq2 几乎是绕不开的存在。我入行那会儿,用的还是 edgeR,后来转到 DESeq2 就再也没换回来。为什么?因为它对统计模型的拿捏、对异常值的处理,真的很稳。

DESeq2 到底是什么?

简单说,DESeq2 是一个基于负二项分布模型的 R 包。它用来做基因表达差异分析。你给它 count 数据,它帮你算哪些基因在实验组和对照组之间表达有显著变化。

背后的数学我不细讲,你只要明白一点:

  • 常规的统计检验(比如 t 检验)处理不了 RNA-seq 数据的离散度问题。
  • DESeq2 用负二项分布来建模,恰恰能处理这种“方差大于均值”的数据特性。
核心优势: 它对小样本量、低表达基因和异常值都有不错的鲁棒性。我在一个只有两个生物学重复的项目里试过,结果依然可信。

我习惯把它的工作流程分为四步:

  1. 输入 count 矩阵 + 实验设计
  2. 估计大小因子(size factors)——也就是归一化
  3. 估计离散度(dispersion)
  4. 拟合模型 + Wald 检验或 LRT

下面这张图能帮你把整个逻辑串起来:

DESeq2 核心工作流程 DESeq2 差异分析流程 输入数据 count 矩阵 + 条件分组 1. 大小因子估计 移除测序深度差异 2. 离散度估计 负二项模型 3. 拟合广义线性模型 GLM: log2(μ) = Xβ 4. Wald 检验 / LRT 检验 p 值 → 多重检验校正 → 显著基因 结果输出 log2FC、p-adj、显著基因列表 💡 输入必须是 原始 count,不是 FPKM

安装前的准备工作

安装 DESeq2 本身不难。但我要提醒你一句话:先配好镜像源,再动手。我第一次装的时候直接敲 install.packages,结果等了一个小时还在下载依赖……

DESeq2 是 Bioconductor 家族的包。所以你不应该用 install.packages,要用 BiocManager。

我曾经踩过的坑: 如果你的 R 版本太老(小于 4.0),BiocManager 装出来的 DESeq2 可能没有某些新函数。比如 lfcShrink 在旧版里就没有。建议 R 版本不低于 4.1。

正式安装步骤

来,跟着我做。

第一步:安装 BiocManager

如果你的 R 里还没有 BiocManager,先装它:

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

第二步:安装 DESeq2

BiocManager::install("DESeq2")

这条命令会自动帮你解决依赖。它会装什么?我列一下核心的:

依赖包 作用
S4Vectors 提供 DataFrame 基础结构
SummarizedExperiment 存储 count 矩阵 + 样本注释
GenomicRanges 基因区间信息(不是必须,但经常一起用)
ggplot2 绘图依赖
我的个人习惯: 装完 DESeq2 之后,顺手把 pheatmap、RColorBrewer、apeglm 也装上。apeglm 是用来做 lfcShrink 的,后面画 MA 图时会用到。

第三步:验证安装

装完之后,我习惯跑一句:

library(DESeq2)
packageVersion("DESeq2")

如果返回版本号,比如 1.42.0,那就说明装好了。

依赖问题排查:我踩过的雷

你可能会碰到以下几种报错。别慌,我一个个说:

  • “ERROR: dependency ‘Rcpp’ is not available” —— 先装 Rcpp:install.packages("Rcpp")
  • “BiocManager not found” —— 你没装 BiocManager 或者 R 版本太老
  • “无法加载共享对象” —— 常见于 Windows 用户,试试 install.packages("Rcpp") 后重启 R session

我记得有一次在服务器上装,系统没 root 权限,R 的库路径是只读的。你猜怎么着?用 BiocManager::install("DESeq2", lib="/path/to/my/Rlibs"),然后设置 .libPaths() 就行。

首次加载与测试

装好之后,我建议你跑一个最小示例,确保一切正常:

library(DESeq2)

# 创建模拟数据
counts <- matrix(rnbinom(1000, mu=100, size=1/0.5), ncol=4)
colnames(counts) <- c("ctrl1","ctrl2","trt1","trt2")
condition <- factor(c("ctrl","ctrl","trt","trt"))

# 构建 DESeqDataSet
dds <- DESeqDataSetFromMatrix(
  countData = counts,
  colData = DataFrame(condition),
  design = ~ condition
)

# 直接跑差异分析
dds <- DESeq(dds)
res <- results(dds)

# 看一眼结果
head(res)

如果这一步没报错,恭喜你,环境已经搭好了。

到这里,你应该已经明白: DESeq2 的安装并不复杂,但镜像源、R 版本、依赖顺序这些细节,往往会卡人很久。别怕,一次搞定后面就顺了。