Salmon---a tool for wicked-fast transcript quantification from RNA-seq data
Salmon 概述
该软件采用新的双阶段(dual-phase)统计推断程序,以及针对每个样本存在sequence-specific, fragment GC-content, 和 positional biases而应用的sample-specific bias models。
该软件由三个部分组成:
一个轻量级的 mapping model, 一个估计初始表达水平的在线阶段( an online phase that estimates initial expression levels) 和模型参数, 以及一个细化估计表达水平的离线阶段 (an offline phase that refines expression estimates)。具体如下图所示:
Salmon 既能通过使用quasi-mapping (一个快速且轻量级的mapping 程序)对reads直接进行mapping,也能对SAM/BAM文件进行mapping。
此外,由于取样的随机性和有些reads比对到多个转录本上造成对某些转录本的表达水平估计的不确定性,很多软件无法较为准确的估计这些类型的转录本,而Salmon能较为准确的估计它们的表达水平。
Salmon的quasi-mapping-based mode的运行有两阶段:构建索引和用户想要定量的reads文件。
Salmon的alignment-based mode的运行则不需要构建索引,而是仅需提供一个转录本的 FASTA文件(a FASTA file of the transcripts )和用户想要定量的 SAM/BAM 文件。
补充简述以下名词的区别:
mRNA序列、cDNA序列、ORF序列、CDS序列、Promoter、STS、ETS
Salmon应用
查看帮助文档
#查看可用的命令
###Salmon v0.9.1
salmon -h
#查看帮助文档之Salmon's quasi-mapping-based mode
salmon --no-version-check quant --help-reads
#查看帮助文档之Salmon's alignment-based mode
salmon --no-version-check quant --help-alignment
Quasi-mapping-based mode (including lightweight alignment)
目前,Salmon有两种不同的方法---支持将reads比对到transcriptomes,分别是(SMEM-based) lightweight-alignment 和 quasi-mapping。SMEM-based mapping是Salmon自带的轻量级的比对方法;而 quasi-mapping这种比对方法相对较新较快。这两种方法的使用均是通过quant
命令来应用的,但是两者比对方法所应用到的索引不同。
quasi-mapping 应用到的数据结构是:a combination of data structures—a hash table, suffix array (SA) and efficient rank data structure
quasi-mappings的详情见:RapMap: a rapid, sensitive and accurate tool for mapping RNA-seq reads to transcriptomes
#构建quasi-mapping-based index
##注意,此处的-k值的设定。
####当reads长度长于75bp时,k值设为31是个理想的选择;
####当reads长度短于75bp时,应该尝试使用降低k值。
####另外,参数k能够被传递给命令quant。因此,在构建索引阶段提供的参数k能够覆盖在估计表达量阶段的参数k的设定。
######即如果用户使用quasi-mapping-based index,则估计表达量阶段的参数k的设定对结果没有任何影响。
####因为index命令中,--type参数的默认值是quasi,所以在构建quasi-mapping-based index时,--type quasi可以省略不写。
salmon index -t transcripts.fa -i transcripts_index --type quasi -k 31
#构建SMEM-based mapping index
#### 虽然此处未给定参数k,但是程序的默认值是19。
#### 同上,在构建索引阶段提供的参数k能够覆盖在估计表达量阶段的参数k的设定。
salmon index -t transcripts.fa -i transcripts_index --type fmd
#对双端测序数据reads表达量的估计
salmon quant -i transcripts_index -l <LIBTYPE> -1 reads1.fq -2 reads2.fq -o transcripts_quant
#对单端测序数据reads表达量的估计
salmon quant -i transcripts_index -l <LIBTYPE> -r reads.fq -o transcripts_quant
### 命令quant均适用于这两个index(quasi-mapping or SMEM-based),此外,Salmon能够自动检测到使用的是哪种index,从而采用与之匹配的比对方法。
### 注意:参数-l必须指定在参数-1,-2和-r的前面。
### 生成一个目录,内含文件quant.sf
Alignment-based mode
#使用aligner比对生成的结果文件aln.bam,对其进行表达量分析
### 生成一个目录,内含文件quant.sf
salmon quant -t transcripts.fa -l <LIBTYPE> -a aln.bam -o salmon_quant
实战:应用Salmon分析RNA-seq
#创建分析文件夹
mkdir salmon_tutorial
cd salmon_tutorial
#下载参考转录组数据
curl ftp://ftp.ensemblgenomes.org/pub/plants/release-28/fasta/arabidopsis_thaliana/cdna/Arabidopsis_thaliana.TAIR10.28.cdna.all.fa.gz -o athal.fa.gz
#创建索引
salmon index -t athal.fa.gz -i athal_index
#获取测序数据
mkdir data
cd data
for i in `seq 25 40`;
do
mkdir DRR0161${i};
cd DRR0161${i};
wget ftp://ftp.sra.ebi.ac.uk/vol1/fastq/DRR016/DRR0161${i}/DRR0161${i}_1.fastq.gz;
wget ftp://ftp.sra.ebi.ac.uk/vol1/fastq/DRR016/DRR0161${i}/DRR0161${i}_2.fastq.gz;
cd ..;
done
cd ..
#估计样本的表达量
for fn in data/DRR0161{25..40};
do
samp=`basename ${fn}`
echo "Processing sample ${samp}"
salmon quant -i athal_index -l A \
-1 ${fn}/${samp}_1.fastq.gz \
-2 ${fn}/${samp}_2.fastq.gz \
-p 8 -o quants/${samp}_quant
done
### 其他常用的参数
--seqBias #纠偏序列的bias
--gcBias #纠偏GC含量的bias[beta for single-end reads]
-g/--geneMap #提供转录本与基因之间对应关系的文件。如果提供了该文件,Salmon将会输出文件:quant.sf 和 quant.genes.sf。
#其中quant.genes.sf 文件中含有对基因表达水平的估计。
#提供的文件可以是GTF文件,也可以是由TAB分隔符分隔文件,文件中的每一行含转录本名称和对应的基因名。
#以'.gtf', '.gff' 或 '.gff3'结尾的文件名均被当做GTF格式做处理解析。
#以其他字符结尾的被当做由TAB分隔符分隔的简单文件格式做处理解析。
-z/--writeMappings #若提供了该参数,则quasi-mapping的结果也会以SAM格式输出。
#默认情况下,输出结果是标准输出,建议提供文件名存储至文件中,以便后续分析的需要。
### 其他常用高级的参数
--useVBOpt #使用Variational Bayesian EM算法,而非传统的EM算法。目的是批处理优化
--numBootstraps num #Number of bootstrap samples to generate。
#注意,该参数的使用与Gibbs sampling是相斥的。
#如果后续的分析差异表达搭配sleuth使用,则必须应用此参数。
#下游的差异表达分析
### 差异表达分析的包:DESeq2, edgeR, limma, or sleuth
### 使用tximport包导入salmon转录本表达量分析的结果文件
### 再根据 DESeq2 vignette(https://bioconductor.org/packages/DESeq2)提供的范例,将salmon转录本表达量分析的结果文件读入DESeq2
Salmon输出文件
Salmon输出文件之Quantification File
Quantification File: quant.sf
quant.sf
文件有5列,分别是Name,Length ,EffectiveLength,TPM和NumReads。分别表示的含义如下所述:
- Name — target transcript 名称, 由输入的 transcript database (FASTA file)所提供。
- Length — target transcript 长度,即有多少个核苷酸
- EffectiveLength — target transcript 计算的有效长度。此项考虑了所有被建模的因素,这将影响从这个转录本中取样片段的概率,包括片段长度分布和序列特异性和gc片段偏差(如果这些因素在建模时均被考虑的话)。 (It takes into account all factors being modeled that will effect the probability of sampling fragments from this transcript, including the fragment length distribution and sequence-specific and gc-fragment bias (if they are being modeled))。
- TPM — 估计转录本的表达量。
- NumReads — 估计比对到每个转录本的reads数。
补充:FPKM,RPKM,RPM以及TPM的关系之见解
RPKM (Reads Per Kilobase Million)
FPKM (Fragments Per Kilobase Million)
TPM(Transcripts Per Kilobase Million)
RPM (Reads per million)
CPM (Counts per million)
TPM:
Transcripts Per Kilobase of exonmodel per Million mapped reads (每千个碱基的转录每百万映射读取的Transcripts),优化的RPKM计算方法,可以用于同一物种不同组织的比较。
TPM的计算公式:
\(N_i\):mapping到基因i上的read数;
\(L_i\):基因i的外显子长度的总和。
在一个样本中一个基因的TPM:先对每个基因的read数用基因的长度进行校正,之后再用校正后的这个基因read数\((N_i/L_i)\)与校正后的这个样本的所有read数(\(sum( N_i/L_i+……..+ N_m/L_m )\))求商。由此可知,TPM概括了基因的长度、表达量和基因数目。TPM可以用于同一物种不同组织间的比较,因为sum值总是唯一的。
Salmon输出文件之其他
cmd_info.json
: JSON格式文件,记录salmon程序运行的命令和参数
lib_format_counts.json
: Observed library format counts。当运行salmon是 mapping-based mode时,则会生成改文件。 JSON格式文件,记录有关文库格式和reads比对的情况。
eq_classes.txt
: Equivalence class file。当Salmon运行时,应用参数--dumpEq
,则会生成此文件。
aux_info
: 辅助文件夹,内含多个文件
fld.gz
:在辅助文件夹中,该文件记录的是观察到的片段长度分布的近似值
obs5_seq.gz, obs3_seq.gz, exp5_seq.gz, exp5_seq.gz
: Sequence-specific bias files
expected_gc.gz, observed_gc.gz
: 当Salmon运行时,应用fragment-GC bias correction,在辅助文件夹中则会生成这两个文件。记录Fragment-GC bias。
meta_info.json
: JSON格式文件,记录salmon程序运行的统计信息
ambig_info.tsv
: tab分隔符的文本文件,含有两列。记录的是每个转录本对应的 the number of uniquely-mapping reads 和 the total number of ambiguously-mapping reads
参考链接:
https://combine-lab.github.io/salmon/
http://salmon.readthedocs.io/en/latest/salmon.html#quasi-mapping-based-mode-including-lightweight-alignment
https://vip.biotrainee.com/d/63-rpkm-fpkm-rpm-tpm
http://blog.sciencenet.cn/blog-1113671-1038659.html