关于 bulk-rnaseq
Bulk RNA-seq 是面向研究人员的流程技能,用于从批量测序数据准备可复现的基因水平比较。它涵盖样本验证、质量检查、定量流程,以及向下游差异表达和富集分析移交计数矩阵与元数据。
主要功能
- 01验证样本表和实验设计
- 02指导质控、剪切与定量
- 03支持 nf-core 和独立流程
- 04构建基因水平计数矩阵及元数据
- 05保留来源信息和分析参数
适用场景
- 01规划重复数和批次校正比较
- 02准备 FASTQ 数据进行基因分析
- 03将 Salmon 或 STAR 输出转换为计数
- 04向差异表达及富集技能移交结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ k-dense-ai/ scientific-agent-skills --skill bulk-rnaseq安装后在 Claude Code 中输入/bulk-rnaseq确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/counts-and-handoff.mddesign-and-qc.mdupstream-manual.mdupstream-nfcore.mdscripts/_tabular.pybuild_counts_matrix.pyvalidate_samplesheet.py详细介绍
Bulk RNA-seq
概述
本技能为可复现的基因水平比较准备 bulk RNA-seq 读段和定量输出。它负责样本验证、reads-to-counts 配方,以及计数/元数据交接;下游的统计拟合与富集仍由各自的专门技能负责。
“站得住脚”意味着三点,并贯穿始终:
- 可复现 — 固定流水线/工具版本,尽可能使用容器,记录参数,固定随机种子。
- 质量把关 — 在定量之前、期间和之后检查 QC 并采取行动,而不是跳过。
- 统计上可靠 — 足够的重复、与生物学问题匹配的设计、正确处理计数,以及 FDR 控制的检验。
流水线为:FastQC/trim → align/quant (STAR/Salmon) → counts → DE (pydeseq2) → enrichment (pathway-enrichment) → figures。
何时使用本技能
在用户希望执行以下操作时使用本技能:
- 从 FASTQ 文件(或一次测序运行)得到差异表达基因和通路。
- 运行或配置
nf-core/rnaseq,或用 STAR、Salmon 或 featureCounts 进行比对/定量。 - 将 Salmon/STAR/featureCounts 输出转换为可供 DESeq2/PyDESeq2 使用的计数矩阵。
- 在投入计算资源之前,设计或检查 bulk RNA-seq 实验(重复、批次、链特异性)。
- 界定端到端 RNA-seq 分析的范围,并决定串联哪些工具和技能。
这是 bulk RNA-seq(样本 = 生物标本)。对于单细胞/细胞核数据,使用 scanpy;仅做 DE 统计时使用 pydeseq2;仅做富集时使用 pathway-enrichment。
流水线一览
flowchart TD
fastq["Raw FASTQ + samplesheet"] --> qc["FastQC + MultiQC"]
qc --> trim["Trim: fastp / Trim Galore"]
trim --> align["Align + quant: STAR and/or Salmon"]
align --> counts["Gene-level counts matrix"]
counts --> de["Differential expression"]
de --> enrich["Pathway / GSEA enrichment"]
de --> fig["Figures"]
enrich --> fig
nfcore["nf-core/rnaseq via nextflow skill"] -.->|"path A"| align
manual["Standalone recipes (this skill)"] -.->|"path B"| align
bridge["build_counts_matrix.py (this skill)"] -.-> counts
pydeseq2skill["pydeseq2 skill"] -.-> de
pwskill["pathway-enrichment skill"] -.-> enrich
vizskill["scientific-visualization skill"] -.-> fig
两条上游路径 — 选择一条
reads → counts 阶段可以用两种方式运行。两者都会产生基因水平计数, 但 STAR/featureCounts 与 Salmon/tximport 通常不会给出完全相同或 可互换的值:分配规则、多重比对和有效长度校正各不相同。整个比较中应 选择一种定量路线。
在以下情况使用 路径 A — nf-core/rnaseq… | 在以下情况使用 路径 B — 独立工具… |
|---|---|
| 你想要领域标准、经过审计、可引用的流水线,并且只需一条命令 | 你只有少量样本,想学习/检查每一步 |
| 样本很多,或者你要扩展到 HPC/云 | 没有可用的 Nextflow/容器,或环境受限 |
| 可复现性和完整的 MultiQC 报告最重要 | 你需要流水线未暴露的非标准步骤 |
→ 通过 nextflow 技能驱动它 | → 遵循 references/upstream-manual.md |
拿不准时,优先选择 路径 A:nf-core/rnaseq 已经用合理且经过审查的默认值把 FastQC → trimming → STAR/Salmon → quantification → tximport → MultiQC 串联起来,这是最站得住脚的选择。路径 B 的存在是为了透明性和受限环境。
两条路径最终都会汇聚到 基因水平计数矩阵。保留计数是原始计数还是 长度缩放计数、转录本到基因的映射版本,以及任何偏移量。 长度缩放计数不得再次接受转录本长度校正。
安装
# This skill's glue (bridge + handoffs) — Python
uv pip install "pytximport==0.13.0" pandas numpy
# Downstream skills install their own deps:
# pydeseq2 skill -> uv pip install pydeseq2
# pathway-enrichment skill -> uv pip install gseapy gprofiler-official
# Path A (nf-core): only Nextflow + a container engine are needed — see the `nextflow` skill.
# Path B (standalone tools): install via bioconda. Pin versions for reproducibility.
conda create -n rnaseq -c conda-forge -c bioconda --strict-channel-priority \
fastqc fastp trim-galore "star=2.7.11b" "salmon=2.8.0" subread multiqc
已对照 nf-core/rnaseq 3.27.0、STAR 2.7.11b 文档、Salmon 2.8.0、 pytximport 0.13.0 和 PyDESeq2 0.5.4 审查。已执行捆绑的 Python 桥接以及一次 小型 Salmon 索引/定量运行;完整的 Nextflow/STAR/trimming 配方是示例性的, 并非端到端验证。Salmon 2.x 无法读取较旧的 C++ 索引:请重建它们。 桥接的长度缩放 Salmon 路线适用于全长 bulk RNA-seq;3′ 计数 测定需要原始计数,且不进行转录本长度校正。
记录你使用的确切版本(流水线修订版、工具版本、参考基因组 + 注释版本)——它们属于方法部分,并使分析可复现。
版本 2.0 明确了 STAR 链特异性,并拒绝旧版桥接所接受的 模糊样本、基因集、转录本映射和分数型 featureCounts 数据。
快速开始
路径 A — nf-core/rnaseq(推荐)
# 0. Validate the samplesheet first (catches the most common failures early)
python scripts/validate_samplesheet.py --samplesheet samplesheet.csv --nfcore
# 1. Smoke-test the environment with tiny bundled data
nextflow run nf-core/rnaseq -r 3.27.0 -profile test,docker --outdir test_results
# 2. Real run: pin the revision, pick an aligner, pass a samplesheet + reference
nextflow run nf-core/rnaseq -r 3.27.0 \
-profile docker \
--input samplesheet.csv \
--genome GRCh38 \
--aligner star_salmon \
--outdir results \
-resume
nf-core/rnaseq 内部运行 tximport,因此基因计数输出时已经合并——无需桥接脚本。使用 results/star_salmon/salmon.merged.gene_counts_length_scaled.tsv 进行 DE。样本表格式、比对器选择及输出:references/upstream-nfcore.md。关于引擎/HPC/云/容器细节,请使用 nextflow 技能。
路径 B — 独立 STAR/Salmon(简略)
mkdir -p qc/
fastqc -o qc/ reads/*.fastq.gz # 1. QC raw reads
fastp -i s1_R1.fq.gz -I s1_R2.fq.gz \
-o s1_R1.trim.fq.gz -O s1_R2.trim.fq.gz \
--thread 4 -j s1.fastp.json # 2. Trim adapters/low-quality
salmon quant -i salmon_index -l A \
-1 s1_R1.trim.fq.gz -2 s1_R2.trim.fq.gz \
--gcBias --seqBias -p 8 -o quant/s1 # 3. Quantify (per sample)
完整配方(FastQC、fastp/Trim Galore、STAR 索引+比对+--quantMode GeneCounts、Salmon 诱饵感知索引、featureCounts、链特异性):references/upstream-manual.md。
计数 → DE → 富集(两条路径)
# Path B only: assemble a gene x sample counts matrix + metadata template for PyDESeq2
python scripts/build_counts_matrix.py --from salmon \
--quant-dir quant/ --tx2gene tx2gene.tsv --output-dir counts/
# Then hand off (see the dedicated skills):
# pydeseq2: counts.csv + metadata.csv -> DE table (log2FC, padj, stat)
# pathway-enrichment: rank by `stat` (GSEA) or padj+|LFC| hit list (ORA)
# scientific-visualization / matplotlib: volcano, MA, heatmap, PCA, enrichment dotplot
逐阶段工作流
从上到下依次操作。每个阶段都标明了负责细节的技能或文件。不要跳过设计/QC 阶段——它们正是 bulk RNA-seq 研究最常出错的地方。
- 设计与样本表。 确认每组 ≥3 个生物学重复,识别批次/混杂因素,并选择比较组。构建样本表并用
scripts/validate_samplesheet.py验证。原理与规则:references/design-and-qc.md。 - 原始读段 QC。 对每个文件运行 FastQC;用 MultiQC 汇总。检查逐碱基质量、接头含量、重复率及过度代表性序列。阈值:
references/design-and-qc.md。 - 修剪。 去除接头和低质量尾部(通过
fastp或Trim Galore)。重新运行 FastQC 确认。配方:references/upstream-manual.md(路径 A 会自动为你完成此步骤)。 - 比对/定量。 STAR(基因组比对 +
--quantMode GeneCounts)和/或 Salmon(诱饵感知选择性比对)。确定链特异性——错误的约定可能会静默丢弃大部分已分配的读段。详情:references/upstream-manual.md;流程参数:references/upstream-nfcore.md。 - 构建计数矩阵。 将定量输出转换为基因 × 样本整数矩阵和元数据模板(
scripts/build_counts_matrix.py)。估计计数和基因 ID 映射的细微之处详见references/counts-and-handoff.md。 - 差异表达 →
pydeseq2技能。 加载counts.csv+metadata.csv,设置设计公式(例如~batch + condition),检查满秩和残差自由度,拟合,并测试明确的对比(例如处理组 vs 对照组),同时控制 FDR。检查 PCA 和 p 值直方图作为 QC。 - 富集 →
pathway-enrichment技能。 对于 GSEA,按 DESeq2stat对完整基因列表排序;对于 ORA,传入阈值化的命中列表(padj < 0.05,可选 |log2FC| > 1)。将标识符匹配到所选库;保留可审计的映射和特定检测的 ORA 背景。 - 图表 →
scientific-visualization技能。 火山图、MA 图、样本距离热图、PCA 和富集点图,以及用于 QC 叙述的 MultiQC 报告。
计数 → DE 桥接(关键衔接环节)
这是唯一一个没有上游/下游技能的阶段,因此由本技能负责。scripts/build_counts_matrix.py 将定量输出转换为 pydeseq2 所需的格式:
- Salmon(
--from salmon):使用pytximport将每个样本的quant.sf聚合到基因水平,采用counts_from_abundance="length_scaled_tpm"(适用于全长基因水平 DE 的无偏移量选择),需要tx2gene映射表。 - STAR(
--from star):读取每个ReadsPerGene.out.tab,根据--strandedness(unstranded/forward/reverse)选择对应列。 - featureCounts(
--from featurecounts):解析合并后的featureCounts矩阵。
它会写入 count.csv(基因 × 样本,整数)、counts_provenance.json(输入哈希、导入模式和样本顺序)以及 metadata_template.csv(每样本一行)供你填写。Salmon/RSEM 计数是估算值(非整数);它们会被四舍五入为整数,因为 PyDESeq2 要求整数计数 —— 关于为何在 length_scaled_tpm 下这是可接受的,以及它与基于偏移量的 DESeq2+tximport 路线有何不同,请参见 references/counts-and-handoff.md。该参考文档还涵盖了标识符映射(当所选富集库需要时)以及 PyDESeq2 所需的确切方向。
常见陷阱
以下是导致大多数错误或不可复现的 bulk RNA-seq 结果的原因:
- 重复数太少。 根据预期变异性和效应量来规划生物学重复;每组三个只是起点,并不保证统计效力。技术泳道不会增加生物学样本量。
- 批次与条件混杂。 如果每个处理样本与对照样本在不同的日期/泳道处理,效应将无法恢复。请随机化,并对已知批次建模(
~batch + condition)。参见references/design-and-qc.md。 - 链特异性方向错误。 选择错误的 STAR 列或 featureCounts
-s/Salmon 文库类型可能会丢弃大部分已比对读段;不存在普遍 50% 的损失。使用 Salmon-l A或推断链特异性,并验证已比对读段的比例。 - 将 TPM/FPKM 输入 DESeq2。 DESeq2 需要原始(或长度缩放)计数,绝不能用 TPM/FPKM/归一化值。桥接脚本会处理这一点。
- 非整数计数。 桥接脚本仅对长度缩放的 Salmon 估算值进行四舍五入;它会拒绝 featureCounts 的小数值而不是截断它们。其 Salmon 路线适用于全长测定,而非 3′ 标签计数。
- 基因 ID 与富集分析不匹配。 将基因 ID 与所选生物体和基因集版本匹配。许多 GMT 库使用基因符号;g:Profiler 可以直接接受 Ensembl ID。不要静默折叠模糊映射。
- 跳过定量后 QC。 在信任 DE 之前,务必查看 PCA 和样本距离热图 —— 它们能揭示标签互换、离群值和隐藏批次。
- 跨样本混用比对工具。 使用相同的工具、版本、参考和参数对每个样本进行定量。
- 未固定版本。 "latest" 流程/基因组会导致结果不可复现;请固定
-r、工具版本以及基因组/注释版本。
与其他技能的集成
- 上游执行:
nextflow(运行nf-core/rnaseq,路径 A;HPC/云/容器)。 - 参考数据 / 基因 ID:
gget(gget ref获取基因组+GTF,gget info/gget search用于 ID 映射),database-lookup(Ensembl/NCBI),biopython/pysam(FASTA/BAM 处理)。 - 差异表达:
pydeseq2(本技能将计数交给的 DE 引擎)。 - 富集:
pathway-enrichment(ORA + GSEA;其scripts/run_enrichment.py直接读取 DESeq2 结果 CSV)。 - 图表与报告:
scientific-visualization、matplotlib、seaborn;scientific-writing用于方法/结果叙述。 - 相关但不同:
scanpy(单细胞),statistical-analysis(多重检验深度)。
参考文件
当你需要深入了解时,请阅读相关文件——每个文件都是自包含的:
references/upstream-nfcore.md— 路径 A:samplesheet 格式、--aligner/--pseudo_aligner选择、关键参数、salmon.merged.gene_counts*.tsv输出、MultiQC,以及要交给pydeseq2的内容。references/upstream-manual.md— 路径 B:FastQC、fastp/Trim Galore、STAR 基因组索引 + 比对 +--quantMode GeneCounts、Salmon decoy-aware 索引 +quant、featureCounts,以及如何确定链特异性。references/counts-and-handoff.md— 将定量输出转换为可供 PyDESeq2 使用的counts.csv/metadata.csv(pytximport、STAR 列选择、featureCounts)、整数计数/估计计数的细微差别、Ensembl→symbol 映射,以及 DE→富集 rank/命中列表配方。references/design-and-qc.md— 实验设计(重复、批次、混杂、设计公式)和 QC 指标解读(比对率、重复、rRNA、复杂度、PCA/离群值)——可辩护流程的骨干。
资源
- nf-core/rnaseq: https://nf-co.re/rnaseq · STAR: https://github.com/alexdobin/STAR · Salmon: https://combine-lab.github.io/salmon/
- fastp: https://github.com/OpenGene/fastp · Trim Galore: https://github.com/FelixKrueger/TrimGalore · MultiQC: https://multiqc.info
- pytximport: https://pytximport.complextissue.com · featureCounts (Subread): https://subread.sourceforge.net
- 方法背景:Love et al. 2014 (DESeq2) DOI 10.1186/s13059-014-0550-8 · Soneson et al. 2015 (tximport) DOI 10.12688/f1000research.7563.2
引用 Scientific Agent Skills
本 skill 是 K-Dense 的 Scientific Agent Skills 的一部分。如果它对一篇 手稿、报告、演示或代码发布有实质性贡献,请将该论文添加到参考文献或 软件部分,并告知用户你已这样做:
Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065
始终引用当前版本。DOI 和 https://arxiv.org/abs/2609.00065 会解析到
最新 arXiv 版本,因此绝不要附加诸如 v1 之类的版本后缀。当网络访问
可用时,在撰写参考文献前获取 https://arxiv.org/abs/2609.00065(或
http://export.arxiv.org/api/query?id_list=2609.00065),并从该记录中获取
作者列表、年份和版本。如果该记录列出了期刊参考文献
或出版商 DOI,请改为引用已发表版本。