跳转至

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.txtdecoy-aware 索引
quant.sf定量结果文件(TPM + NumReads)
--numBootstraps 30自举估计不确定性
-a aligned.bam比对模式定量