Salmon — 超快速无比对 RNA-seq 定量工具¶
一句话说明¶
Salmon 是一个无需比对到基因组的 RNA-seq 定量工具,直接将读段"准比对"(quasi-mapping)到转录本序列上,速度比传统 STAR + featureCounts 快 10-20 倍,结果精度相当。
安装与配置¶
# 方法1:conda 安装(推荐)
conda install -c bioconda salmon # 从 bioconda 安装
# 方法2:预编译二进制
wget https://github.com/COMBINE-lab/salmon/releases/download/v1.11.2/salmon-1.11.2_linux_x86_64.tar.gz
tar -xzf salmon-1.11.2_linux_x86_64.tar.gz # 解压即用
# 注意:v1.11.x 索引格式不兼容旧版,需用新版重建索引
# 验证安装
salmon --version # 当前最新 1.11.2(2025年)
核心用法¶
构建转录本索引¶
# 下载转录本序列(以人类 Gencode v46 为例)
wget https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_46/gencode.v46.transcripts.fa.gz
# 构建 Salmon 索引
salmon index \
-t gencode.v46.transcripts.fa.gz \ # 转录本 FASTA(注意:是转录本不是基因组)
-i salmon_index \ # 索引输出目录
-p 16 # 16 线程
# 推荐:用 decoy-aware 索引(减少假阳性,用整个基因组做 decoy)
# 先准备 decoy 序列
grep "^>" ref.fa | cut -d " " -f 1 | sed 's/>//' > decoys.txt # 提取染色体名称
cat gencode.v46.transcripts.fa.gz ref.fa > gentrome.fa # 合并转录本和基因组
salmon index \
-t gentrome.fa \ # 转录本 + 基因组
-d decoys.txt \ # decoy 序列列表
-i salmon_decoy_index \ # 索引输出目录
-p 16
基本定量¶
# 双端测序定量
salmon quant \
-i salmon_index \ # 索引目录
-l A \ # 自动检测文库类型(推荐)
-1 R1.fq.gz \ # Read 1
-2 R2.fq.gz \ # Read 2
-p 16 \ # 16 线程
--validateMappings \ # 启用选择性比对(提高精度)
-o quant_output # 输出目录
# 单端测序定量
salmon quant -i salmon_index -l A -r reads.fq.gz -p 16 --validateMappings -o quant_output
进阶用法¶
# 批量定量多个样本(用 shell 循环)
for sample in sample1 sample2 sample3; do
salmon quant \
-i salmon_index \
-l A \
-1 ${sample}_R1.fq.gz \
-2 ${sample}_R2.fq.gz \
-p 8 \
--validateMappings \
--gcBias \ # 校正 GC 偏好(推荐)
--seqBias \ # 校正序列偏好
-o quant_${sample}
done
# 比对模式定量(先用 STAR 比对,再用 Salmon 定量)
salmon quant \
-t transcripts.fa \ # 转录本序列
-l A \
-a aligned.bam \ # 已比对的 BAM 文件
-o quant_from_bam
# 查看结果
head quant_output/quant.sf # 查看定量结果
# 列:Name | Length | EffectiveLength | TPM | NumReads
下游导入 R¶
# 用 tximeta 导入 Salmon 结果到 DESeq2
library(tximeta)
coldata <- data.frame(
files = c("quant_s1/quant.sf", "quant_s2/quant.sf"), # Salmon 输出文件
names = c("sample1", "sample2"),
condition = c("control", "treatment")
)
se <- tximeta(coldata) # 自动识别转录本注释版本
# 转为基因水平后用 DESeq2 分析
gse <- summarizeToGene(se)
常见问题与踩坑¶
问题1:mapping rate 很低¶
原因:索引用了错误的转录本版本,或物种不对
解决:确认转录本版本与实验物种一致,建议用 Gencode 或 Ensembl 官方转录本
问题2:TPM 和 NumReads 的区别¶
说明:TPM 是标准化后的表达量(可跨样本比较);NumReads 是原始计数(用于差异分析)
建议:差异分析用 NumReads(导入 DESeq2),展示表达水平用 TPM
问题3:文库类型(-l 参数)不确定¶
原因:链特异性影响定量准确性
解决:用 -l A 让 Salmon 自动检测(会输出检测结果到 lib_format_counts.json)
问题4:某些转录本定量为 0¶
原因:可能是短转录本或与其他转录本高度相似
解决:使用 --gcBias 和 --seqBias 校正偏好,使用 decoy-aware 索引
速查卡片¶
| 命令/参数 | 用途 |
|---|---|
salmon index -t tx.fa -i idx | 构建转录本索引 |
salmon quant -i idx -l A -1 R1 -2 R2 -o out | 双端定量 |
-l A | 自动检测文库类型 |
--validateMappings | 选择性比对(提高精度) |
--gcBias | 校正 GC 含量偏好 |
--seqBias | 校正序列组成偏好 |
-d decoys.txt | decoy-aware 索引 |
quant.sf | 定量结果文件(TPM + NumReads) |
--numBootstraps 30 | 自举估计不确定性 |
-a aligned.bam | 比对模式定量 |