Salmon 转录本定量
Salmon 是一款超快速的 RNA-seq 转录本定量工具,不需要传统比对步骤就能直接估算基因/转录本表达量,内置多种偏差校正模型,是目前最主流的轻量级定量方案之一。
核心知识点
| 知识点 | 说明 |
|---|
| 工具定位 | RNA-seq 转录本水平表达定量工具 |
| 最新版本 | v1.11.4(基于 SSHash 索引) |
| 开发团队 | COMBINE-lab(Rob Patro 实验室) |
| 核心优势 | 不需要全基因组比对,直接用转录组建索引定量,极快 |
| 定量算法 | 选择性比对(Selective Alignment)+ 变分推断 |
| 偏差校正 | 内置 GC 含量偏差、位置偏差、序列偏差校正 |
| 输出格式 | TPM、NumReads 等定量结果,可直接导入 DESeq2/edgeR |
| 注意事项 | v1.11.x 重构了索引格式,旧索引必须重建 |
安装配置
方法一:Conda 安装(推荐)
# 创建 RNA 定量环境
conda create -n quant python=3.10 # 创建环境
conda activate quant # 激活
# 安装 Salmon
conda install -c bioconda salmon # 安装 salmon
salmon --version # 验证,应显示 1.11.x
方法二:预编译二进制
# 从 GitHub 下载预编译版本
wget https://github.com/COMBINE-lab/salmon/releases/download/v1.11.4/salmon-1.11.4_linux_x86_64.tar.gz
tar -xzf salmon-1.11.4_linux_x86_64.tar.gz # 解压
export PATH=$PWD/salmon-1.11.4/bin:$PATH # 添加到 PATH
salmon --version # 验证
基本使用
1. 构建转录组索引
# 方式 A:仅用转录组(基础用法)
salmon index \
-t transcripts.fa \ # 转录组 FASTA 文件(如 Ensembl 的 cdna.all.fa)
-i salmon_index \ # 索引输出目录
-p 8 # 线程数
# 方式 B:加 decoy 序列(推荐,更准确)
# 先准备 decoy 序列(用整个基因组作为 decoy)
grep "^>" ref_genome.fa | cut -d " " -f 1 | sed 's/>//' > decoys.txt # 提取染色体名
cat transcripts.fa ref_genome.fa > gentrome.fa # 合并转录组和基因组
salmon index \
-t gentrome.fa \ # 合并后的 FASTA
-d decoys.txt \ # decoy 序列名列表
-i salmon_index_decoy \ # 索引目录
-p 16 # 线程数
2. 双端数据定量
# 标准双端 RNA-seq 定量
salmon quant \
-i salmon_index \ # 索引目录
-l A \ # 自动检测文库类型(A = auto)
-1 sample_R1.fq.gz \ # 正向读长
-2 sample_R2.fq.gz \ # 反向读长
-p 16 \ # 线程数
--validateMappings \ # 启用选择性比对(更准确)
--gcBias \ # 校正 GC 含量偏差
--seqBias \ # 校正序列偏差
-o sample_quant # 输出目录
# 输出文件:
# sample_quant/quant.sf 主要结果(每个转录本的定量)
# sample_quant/aux_info/ 辅助信息
# sample_quant/lib_format_counts.json 文库类型检测结果
3. 查看定量结果
# 查看 quant.sf 文件前几行
head sample_quant/quant.sf
# 列说明:
# Name 转录本名称
# Length 转录本长度
# EffectiveLength 有效长度(考虑了偏差校正)
# TPM 每百万转录本中的比例(Transcripts Per Million)
# NumReads 估算的读长数
4. 批量定量脚本
#!/bin/bash
# batch_salmon.sh - 批量 Salmon 定量
INDEX="salmon_index" # 索引目录
THREADS=16 # 线程数
OUTDIR="salmon_results" # 输出根目录
mkdir -p $OUTDIR
for R1 in raw_data/*_R1.fq.gz; do
SAMPLE=$(basename $R1 _R1.fq.gz) # 提取样本名
R2=${R1/_R1/_R2} # 推断 R2 文件
echo "定量中: $SAMPLE"
salmon quant \
-i $INDEX \
-l A \ # 自动检测文库类型
-1 $R1 \
-2 $R2 \
-p $THREADS \
--validateMappings \
--gcBias \
-o ${OUTDIR}/${SAMPLE} # 每个样本一个输出目录
done
echo "全部定量完成"
高级用法
1. 基于比对的定量模式
# 如果你已经用 STAR 比对了,可以用 Salmon 的比对模式
# 先用 STAR 输出转录组 BAM
STAR --quantMode TranscriptomeSAM ...
# 再用 Salmon 的 alignment-based 模式
salmon quant \
-t transcripts.fa \ # 转录组 FASTA
-l A \ # 自动检测文库类型
-a Aligned.toTranscriptome.out.bam \ # STAR 的转录组 BAM
-o salmon_align_quant # 输出目录
# 在 R 中用 tximeta 导入 Salmon 结果
library(tximeta) # 加载 tximeta 包
# 准备样本信息表
samples <- data.frame(
names = c("ctrl1", "ctrl2", "treat1", "treat2"), # 样本名
files = c( # quant.sf 路径
"salmon_results/ctrl1/quant.sf",
"salmon_results/ctrl2/quant.sf",
"salmon_results/treat1/quant.sf",
"salmon_results/treat2/quant.sf"
),
condition = c("ctrl", "ctrl", "treat", "treat") # 分组信息
)
# 导入 Salmon 结果(自动识别基因组版本)
se <- tximeta(samples) # 导入为 SummarizedExperiment 对象
# 汇总到基因水平
gse <- summarizeToGene(se) # 从转录本水平汇总到基因水平
# 传给 DESeq2 做差异分析
library(DESeq2)
dds <- DESeqDataSet(gse, design = ~condition) # 构建 DESeq2 对象
dds <- DESeq(dds) # 运行差异分析
res <- results(dds) # 提取结果
3. 文库类型说明
# -l 参数指定文库类型,常用值:
# A 自动检测(推荐,适用于大多数情况)
# ISR Illumina stranded (dUTP) - 正向链特异
# ISF 正向链特异
# IU 非链特异
# U 单端非链特异
# 如何判断文库类型?
# 看 Salmon 输出的 lib_format_counts.json
cat sample_quant/lib_format_counts.json # 查看自动检测的文库类型
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
Index is out of date | 用旧版 Salmon 建的索引 | 用新版 Salmon 重建索引 |
Could not find index | 索引路径错误 | 检查 -i 路径是否正确 |
[quant] total 0 reads | 文件读取失败或文件为空 | 检查输入文件是否存在且非空 |
| 文库类型检测不对 | 自动检测偶尔不准 | 手动指定 -l ISR 或 -l IU |
| TPM 全是 0 | 转录组与读长物种不匹配 | 确认转录组 FASTA 和测序数据是同一物种 |
| 内存不足 | 大量转录本索引时 | 减少线程数或增加内存 |
速查表
# ===== Salmon 速查表 =====
# 安装
conda install -c bioconda salmon # conda 安装
# 建索引
salmon index -t transcripts.fa -i idx -p 8
# 带 decoy 的索引(推荐)
grep "^>" genome.fa | cut -d" " -f1 | sed 's/>//' > decoys.txt
cat transcripts.fa genome.fa > gentrome.fa
salmon index -t gentrome.fa -d decoys.txt -i idx_decoy -p 16
# 双端定量
salmon quant -i idx -l A \
-1 R1.fq.gz -2 R2.fq.gz \
-p 16 --validateMappings --gcBias \
-o output/
# 单端定量
salmon quant -i idx -l A \
-r reads.fq.gz \
-p 16 --validateMappings \
-o output/
# 基于比对的定量
salmon quant -t transcripts.fa -l A \
-a aligned.bam -o output/
# 输出文件
# quant.sf 转录本定量结果
# quant.genes.sf 基因水平定量(需要 --geneMap)
# aux_info/ 辅助信息
# lib_format_counts.json 文库类型
# 结果列含义
# TPM 标准化表达量(跨样本可比)
# NumReads 估算读长数(用于差异分析)