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)。具体如下图所示:

Overview of Salmon’s method and components and execution timeline

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的计算公式:

\[TPM_i={( N_i/L_i )*1000000 } / sum( N_i/L_i+……..+ N_m/L_m ) \]

\(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

posted @ 2018-01-25 22:03  AdaWongCorner  阅读(4917)  评论(0编辑  收藏  举报