本期介紹一個測序質控的工具包:RSeQC包,它提供了一系列有用的小工具能夠評估高通量測序尤其是RNA-seq數據.比如一些基本模塊;
檢查序列質量
,核酸組分偏性
,PCR偏性
,GC含量偏性
,還有RNA-seq特異性模塊:評估測序飽和度
,映射讀數分布
,覆蓋均勻性
,鏈特異性
,轉錄水平RNA完整性
等。
安裝:
RSeQC
是依賴于python的,直接使用pip
進行安裝:
pip install RSeQC
輸入數據格式:
RSeQC接受4種文件格式:
-
BED
格式:Tab
分割,12列
的表示基因模型的純文本文件,例如:
-
SAM
或BAM
格式: 用來存儲reads
比對結果信息.SAM
是可讀的純文本文件,然而BAM
是SAM
的二進制文本,一個壓縮的可索引的reads
比對文件. 例如:
- 染色體大小文件: 只有兩列的純文本文件,這個之前在生物信息學文本處理大雜燴(一)里已經講過.
hg19.chrom_24.sizes
是人基因組hg19版本的size文件,是使用UCSC 的fetchChromSizes
(從這里下載:http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/) 下載的.
- Fasta文件.
使用方法:
最新版本的RSeQC(2.6.4)
包含以下一些模塊,每個模塊都可以單獨調用進行分析:
我們一個一個來看:
bam2fq.py:
將BAM
或SAM
格式的文件轉為fastq
格式.(這個感覺一般用不到)
bam2wig.py:
將BAM文件轉為wig
/bigwig
格式的文件.(這個在作圖尤其是信號圖的時候很有用.)如果需要轉為bigwig
格式,則需要UCSC的wigToBigWig
工具,下載地址:
http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/wigToBigWig
bam_stat.py:
對比對結果文件BAM
或SAM
文件進行統計.其實samtools
里也有類似工具.結果如下所示:
統計結果包括:總比對記錄
,PCR重復數
,Non Primary Hits
表示多匹配位點.不匹配的reads數
,比對到+鏈的reads
,比對到-鏈的reads
,有剪切位點的reads
等.
clipping_profile.py:
這個模塊用于評估RNA-seq
的BAM
或SAM
文件中的有切除核苷酸的reads
情況.
??clipped reads
有兩種,一種是soft-clipped
,即reads
5'或3'不能比對到參考基因組;另一種是hard-clipped
,即reads
5'或3'不能比對到參考基因組并且被剪切.
??這個模塊會生成.r
格式的作圖腳本以及.pdf
格式的報告文件以及.xls
的數據文件.
例如雙端測序clipping profile
圖如下:
deletion_profile.py:
也就是reads deletion
位點的分布.
divide_bam.py:
隨機分割BAM
文件(m個比對結果)為n個文件,每個文件包含m/n
個比對結果.
FPKM_count.py:
根據read count
和gene注釋文件
(bed12格式)計算每個基因的FPM
(fragment per million)或者FPKM
(fragment per million mapped reads per kilobase exon).
結果類似下面的:
geneBody_coverage.py:
計算RNA-seq reads
在基因上的覆蓋度.
結果如下:
如果是大于3個的樣本,則還會生成熱圖:
geneBody_coverage2.py:
功能和上面的geneBody_coverage.py
一樣,但輸入的是bigwig
格式文件
infer_experiment.py:
- 這個模塊用來"猜"RNA-seq的相關配置信息,針對鏈特異性測序,通過
reads的鏈型
與轉錄本的鏈型
來評估reads
是哪一條鏈的. -
reads的鏈型
是通過比對結果得到的,轉錄本的鏈型
是銅鼓注釋文件得到的. - 對于非鏈特異性測序,
reads的鏈型
與轉錄本的鏈型
是沒有關系的. - 對于鏈特異性測序,
reads的鏈型
與轉錄本的鏈型
是有很大關系的.通過下面的3個例子說明. - 在測序前你并不需要知道RNA-seq是不是鏈特異性的,就當他們是非鏈特異性的,這個模塊可以"猜"到"reads"是哪條鏈的.
對于雙端RNA-seq
,有兩種方法來確定reads在哪條鏈(如illumina ScriptSeq protocol):
(1). 1++,1–,2+-,2-+ :
說明:1
和2
表示read1
和read2
,第一個+/-
表示read map 到哪條鏈,第二個+/-
表示這個read 所match的基因在哪條鏈.
那這個1++,1–,2+-,2-+
就表示reads
所match的鏈和其所在gene的"+/-"是一樣的,也就是reads的鏈型與其基因的鏈型一樣,是不獨立的.
(2). 1+-,1-+,2++,2– :
這個就表示reads
所match的鏈和其所在gene的"+/-"是不一樣的,也就是reads的鏈型與其基因的鏈型是不獨立的.
對于單端測序:
(1). ++,– : 表示read鏈型
與其所match的gene鏈型
一致.
(2). +-,-+ : 表示read鏈型
與其所match的gene鏈型
不一致.
舉三個例子說明:
例一:
解釋: 總reads
數的1.72%
被映射到基因組區域,我們無法確定這樣的gene的鏈型
(比如這個區域兩條鏈都轉錄)。 對于剩余的98.28%
(1 - 0.0172 = 0.9828)的reads,一半是“1 ++,1-,2 + - ,2- +” reads
與gene
鏈型一致的,而另一半是“1 +1 - +2++,2-”不一致的。 我們得出結論,這不是一個鏈特異性的測序,因為reads鏈型
不依賴于gene鏈型
.
例二:
解釋: 0.72%
是不能確定鏈型的.94.41%
的reads
與gene
鏈型一致的.僅有4.87%
是不一致的.我們得出結論,這是一個鏈特異性的測序,因為reads鏈型
依賴于gene鏈型
.
例三,這是個單端測序的例子:
解釋: reads鏈型
依賴于gene鏈型
,這個是鏈特異性測序.
inner_distance.py:
針對雙端測序,計算read pairs
的內部距離
或者插入距離
,關于插入距離
是什么,看下圖:
插入距離D_size
計算公式:
D_size = read2_start - read1_end
但是不同條件下計算方法是不一樣的:
-
paried reads
比對到同一個外顯子:插入距離
= D_size -
paried reads
比對到不同外顯子:插入距離
= D_size - intron_size -
paried reads
比對到非外顯子區域(如內含子或者基因外區域):插入距離
= D_size - 如果兩個
fragments
重疊則插入距離
可能為負.
結果舉例:
insertion_profile.py:
計算reads上被插入核苷酸的分布.
結果舉例:
junction_annotation.py:
輸入一個BAM
或SAM
文件和一個bed12
格式的參考基因文件,這個模塊將根據參考基因模型計算剪切融合(splice junctions)事件.
-
splice read: 一個RNA read,能夠被剪切一次或多次,所以100個
spliced reads
能夠產生>=100個剪切事件. -
splice junction:多個跨越同一個內含子的剪切事件能夠合并為一個
splicing junction
.
junction 有三種:
- 已經被注釋的.
5'剪切位點
和3'剪切位點
已經被注釋. - 全新的.
- 部分是新的.
結果示例:
junction_saturation.py:
在剪切位點分析時首先檢查當前的測序深度是否是足夠深的.對于一個已經注釋的物種,在某個組織中基因的數量是一定的,所以剪切位點數量也是一定的.可以從參考基因模型(bed12
格式的文件)可以提前看出splice junctions
的數量. 一個飽和的RNA-seq能夠發現所有已經被注釋的splice junctioons
,否則下游剪切位點分析將會出現問題因為將有較少的splice juncitons
將發現不了.這個模塊從這個測序結果(SAM
或BAM
文件)中進行重抽樣,從5%,10%,15%,...,到95%的飽和度來檢查每個階段的splice junctions
并與參考基因組進行比較.
結果示例:
解釋: 在這個例子中,每個飽和度下的測序深度的known junctions
基本都是一致的(紅線).因為大部分的剪切位點我們基本都發現了.即便加深測序深度也不會發現跟多的known junctions
,僅會加深junciton的覆蓋度(如junction被更多的reads覆蓋.).然而當前測序深度(100%的reads)對于發現新的juncitons是不夠的(綠線)
mismatch_profile.py:
計算reads的不匹配位點的分布.
結果示例:
上圖可以看出5'和3'的不匹配位點最多,這是由于測序本身所決定的.
normalize_bigwig.py:
可視化RNA-seq數據結果是最直接并且高效的質控方式.但在可視化之前我們要保證所有樣本的數據是可比較的,這就需要進行歸一化.信號值文件'wig'或bigwig
文件主要由兩個因素決定:(1)總reads數,(2)read長度.因此,如果兩個樣本的read長度不一樣但僅對"總reads數"歸一化是有問題的.這里我們將每個bigwig
文件歸一化到相同的wigsum
值.wigsum
是對基因組信號值的匯總,例如:wigsum
=100,000,000等價于1百萬個100nt的reads或2百萬個50nt的reads的覆蓋度. 結果生成wig
格式的文件.
overlay_bigwig.py
這個模塊讓我們操作兩個bigwig
文件.可以采取的操作有: 信號值相加,取均值,相除,每個信號值+1,求最大值,求最小值,相乘,相減,求幾何平均數.
read_distribution.py:
這個模塊根據提供的BAM/SAM
文件和bed12格式的
gene模型文件就按比對上去的reads
在基因組上的分布情況,比如在CDS exon
,5'UTR exon
,intro
,基因間區域
的reads
分布.
結果示例:
read_duplication.py:
兩種用于計算重復率的策略:(1) 基于序列的,完全相同序列的reads被視為重復的reads. (2) 正好map到同一個基因組位置的reads被視為重復reads. 對于splice reads
,map到同一位置并且以相同方式剪切的視為是重復reads.
read_GC.py:
計算reads的GC含量分布.
read_hexamer.py:
計算6mer的頻率.
read_NVC.py:
這個模塊有用來檢查核苷酸的堿基組成偏好性.由于隨機引物的影響,reads 5'端
開始會有某些模式過表達.這種偏好性能夠被NVC
(Nucleotide versus cycle)畫出.理想狀態下, A%=C%=G%=T%=25%.
結果示例:
read_quality.py:
可視化reads
每個位置的測序質量.
結果示例:
RNA_fragment_size.py:
在map后計算每個gene上的fragment
的大小,包括:每個gene上所有的fragment
的均值,中位數,方差.
結果示例:
RPKM_count.py:
這個模塊在最新版里已經被廢棄,如果想使用可以翻看以前的版本.
RPKM_saturation.py
任何樣本統計(RPKM
)的精度受樣本大小(測序深度
)的影響;重抽樣或切片是使用部分數據來評估樣本統計量的精度的方法. 這個模塊從總的RNA reads
中重抽樣并計算每次的RPKM
值.通過這樣我們就能檢測當前測序深度是不是夠的(如果測序深度不夠RPKM的值將不穩定,如果測序深度足夠則RPKM值將穩定).默認情況下,這個模塊將計算20個RPKM
值(分別是對個轉錄本使用5%,10%,...,95%的總reads
).
在結果圖中,Y軸表示 “Percent Relative Error”
或 “Percent Error”
.用來表示當前樣本量下的RPKM
與實際表達量的偏差.計算公式如下:
結果示例:
說明:Q1,Q2,Q3,Q4是按照轉錄本表達量4分位分開的.Q1表示的是表達量低于25%的轉錄本,以此類推.可以看出:隨著樣本量升高,RPKM
與實際值的偏差也在降低.而且轉錄本表達量越高這種趨勢越明顯(Q4最明顯).
可以看出,樣本量50%之后線條已經趨于平緩,也就是說對于轉錄本定量來說,當前測序深度是足夠的.
spilt_bam.py:
根據提供的bed12
注釋文件和BAM
文件拆分為以下三個文件:
- XXX.in.bam: 包含map到外顯子趨于的reads.
- XXX.ex.bam:包含map不到外顯子趨于的reads.
- XXX.junk.bam:質控失敗或者沒有map上去的reads.
split_paired_bam.py:
將一個雙端測序的BAM
文件拆分為兩個單端測序的BAM
文件.
tin.py:
這個模塊用來在轉錄本級別計算RNA完整性TIN (transcript integrity number)值.
結果示例:
更多原創精彩視頻敬請關注生信雜談: