来自SRA的转录组数据,很多文章方法描述简单,无法判断是否为链特异性数据,导致在mapping和raw reads count时参数不知如何选择。所以在数据处理前明确其建库方式尤为重要
什么是链特异性建库
在RNA-Seq建库的时候,第一步都是进行RNA到cDNA的反转录,在反转录以后,普通的RNA-Seq就直接使用random primer进行第2条链合成,随后加接头。这样构建出来的RNA-Seq库进行测序以后是分不清这个序列是来自于genome的那条链的,因为被测序的有可能是gene的foward strand也有可能是reverse strand。而链特异性的RNA-Seq建库是通过一定的建库策略,让RNA在反转录和加adapter的过程以后还能够保存链的信息的建库策略。
那么链特异性RNA-Seq的优势在于哪里呢?是在于它能够处理一些gene overlap比较复杂的情况。我们都知道,几乎所有高等生物的gene在genome中的分布都是非均匀的,而且一般都是没有链的偏好性。
如果是普通的RNA-Seq,是分不清这些overlap区域的reads到底来自于哪一个gene,这就给定表达量带来了非常大的麻烦。但是链特异性的RNA-Seq就不会,如果只是foward strand的gene表达那么reads就只会mapping到对应的链上。
所以,用链特异性的建库方法,是能够更加准确进行gene定量的。
至于链特异性建库的劣势,大概有2点吧:1个是贵,1个是操作复杂对于珍贵样品(比如人体组织样品)一旦建库不成功就game over了。
如何判断数据的建库方式
判断转录组数据是否为链特异性,可以用RSeQC的infer_experiment.py工具。
该软件的输入数据为bam文件及bed12文件,bam文件很好得到,但是对于bed12文件确实要下一些功夫了。该文件可以应用UCSC的gtfToGenePre工具获取,具体代码如下:
#安装gtfToGenePre
conda install -c bioconda ucsc-gtftogenepred
#从gtf转换为GenePred格式
gtfToGenePred -genePredExt -geneNameAsName2 ../../reference/homo/Homo_sapiens.GRCh38.104.gtf gene.tmp
#从GenePred文件提取信息得到bed12文件
awk '{print $2"\t"$4"\t"$5"\t"$1"\t0\t"$3"\t"$6"\t"$7"\t0\t"$8"\t"$9"\t"$10}' gene.tmp > genes_refseq.bed12
得到bed12文件即可使用infer_experiment.py判断数据是否为链特异性。
#检验
infer_experiment.py -r genes_refseq.bed12 -i 2-mapping/SRR14760842.bam
##结果
This is PairEnd Data
Fraction of reads failed to determine: 0.1151
Fraction of reads explained by "1++,1--,2+-,2-+": 0.4451
Fraction of reads explained by "1+-,1-+,2++,2--": 0.4398
这个结果怎么看呢?
其实很简单,就是要看这里!
如果两种的比例接近1:1则是非链特异性,如果两者比例悬殊,则是链特异性。
举个例子:
上图这就是链特异性的单端数据
上图这种就是非链特异性的单端数据
对于双端测序则有些复杂:
上图这种显然是链特异性,而且是fr-secondstrand。意思就是read1在+链,相对的gene也同样在+链上,而read2在+链,相对的gene在-链上。这种就是kallisto中的--fr-stranded和stringtie中的--fr。
上图这种虽是链特异性,但是是“fr-firststrand”,也就是参数中的--rf。
上图这种两种都在0.5附近且比例接近1:1,是非链特异性的双端测序
结合上述例子,很显然鉴定结果很明确,我的数据是一个双端、非链特异性的数据,快检验一下你的数据吧!