关于 rna-seq-analysis
为 RNA-seq 定量和差异表达分析提供决策逻辑与排错提示,适用于选择流程及配置 DESeq2 的用户。内容聚焦 STAR 与 Salmon 的取舍、链特异性验证和建模常见问题。
主要功能
- 01根据 BAM 需求选择 STAR 或 Salmon
- 02指导链特异性确认
- 03说明 Salmon 结果接入 DESeq2 的方法
- 04提示 DESeq2 设计公式与预过滤设置
- 05排查样本顺序和批次混杂问题
适用场景
- 01选择 RNA-seq 比对或定量流程
- 02确认文库链特异性后进行计数
- 03使用 DESeq2 分析差异表达
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ awslabs/ hcls-agent-skills --skill rna-seq-analysis安装后在 Claude Code 中输入/rna-seq-analysis确认已加载。
附带文件scripts/deseq2_contrast.py
详细介绍
RNA-seq 分析 — 流水线技能(轻量脚手架)
概述
添加用于选择定量路径(STAR 与 Salmon)、确定链特异性,以及规避大模型经常出错的 DESeq2 建模陷阱的决策逻辑。
用法
- 在选择基于比对(STAR+featureCounts)还是无需比对(Salmon)的定量方法时启用
- 在使用任一计数来源设置 DESeq2 时启用
- 在排查计数异常偏低或 DE 信号较弱时启用
核心概念
决策逻辑
Need BAMs? (variant calling, fusions, novel transcripts)
├── YES → STAR two-pass + featureCounts
└── NO → Salmon (faster, lower RAM, bias-corrected)
Salmon output → DESeq2:
└── Use DESeqDataSetFromTximport (preserves length offset)
└── NEVER round txi$counts and pass to DESeqDataSetFromMatrix
Filtering strategy (VQSR equivalent):
├── ≥30 samples → VQSR-like (default DESeq2 shrinkage works well)
└── <30 samples → still works, but pre-filter aggressively
链特异性判定(计数前必须验证):
| 试剂盒 | featureCounts -s | Salmon -l |
|---|---|---|
| TruSeq Stranded / dUTP | 2 | ISR(PE)/ SR(SE) |
| Ligation / forward | 1 | ISF / SF |
| Unstranded | 0 | IU / U |
使用 infer_experiment.py(RSeQC)或 Salmon 的 lib_format_counts.json 进行验证。
关键参数
| 参数 | 值 | 何时更改 |
|---|---|---|
--sjdbOverhang | readLength - 1(默认值为 100) | 读取长度不是 100bp 时 |
--twopassMode Basic | DE 时始终启用 | 仅在 QC 运行中为提升速度而跳过 |
Salmon --gcBias --seqBias | 始终启用 | Illumina 测序数据中绝不跳过 |
Salmon --validateMappings | 始终启用 | 启用选择性比对 |
featureCounts -s | 取决于试剂盒 | 务必通过实验数据验证 |
| DESeq2 预过滤 | rowSums(counts >= 10) >= smallest_group | 浅度测序时调整 10 |
lfcShrink type | "apeglm" | 任意对比时使用 "ashr" |
| 设计公式 | ~ batch + condition(感兴趣的变量放在最后) | 始终将感兴趣的项放在最后 |
常见错误
-
错误: 猜测链特异性(
-s),而不是根据实验数据验证
正确: 运行 featureCounts 前,使用infer_experiment.py或 Salmon 的lib_format_counts.json检查
原因: 链特异性设置错误会导致计数降低 2–10 倍,且 DE 信号较弱 -
错误: 将归一化计数(TPM、FPKM、CPM)传给 DESeq2
正确: 始终从原始整数计数开始
原因: 归一化值会破坏负二项分布模型 -
错误: 对
txi$counts四舍五入后传给DESeqDataSetFromMatrix
正确: 使用DESeqDataSetFromTximport(txi, ...),以保留长度偏移量
原因: 四舍五入会丢弃针对转录本长度偏差的逐基因长度校正 -
错误: 在设计公式中将感兴趣的变量放在第一位(
~ condition + batch)
正确: 将感兴趣的变量放在最后:~ batch + condition
原因: DESeq2 默认检验最后一项 -
错误: 认为 DESeq2 会重新排列样本以匹配顺序
正确: 创建 DESeq 对象前,断言stopifnot(all(colnames(cts) == rownames(coldata)))
原因: 顺序不匹配时,DESeq2 会静默地错误标记样本 -
错误: 跳过低计数基因的预过滤
正确: 使用rowSums(counts(dds) >= 10) >= smallest_group_size进行过滤
原因: 接近零的基因会增加运行时间,并削弱多重检验校正的效果 -
错误: 对链特异性文库使用 STAR
ReadsPerGene.out.tab的第 2 列
正确: 根据试剂盒使用第 3 列(正向)或第 4 列(反向)
原因: 第 2 列为非链特异性数据;将其用于链特异性数据会使有效计数减半 -
错误: 纳入比对读段少于 10M 或比对率低于 70% 的样本
正确: 拟合前排除这些样本或将其标记出来
原因: 低质量样本会扭曲 size factor 和离散度估计 -
错误: 在 batch 与 condition 完全混杂时进行建模
正确: 先检查table(coldata$batch, coldata$condition)
原因: 任何统计模型都无法分离完全相关的效应
回复格式
- 先给出用户所需的命令或代码,再进行解释
- 结构为:确认输入 → 可运行的代码 → 解释关键参数 → 注意事项
- 每项任务提供一个完整可运行的示例;不要展示所有替代方案
- 代码注释保持精简且实用(说明用途,而非存在原因)
- 目标:50–100 行代码,并附简短说明