高通量測序質控及可視化工具包RSeQC

本期介紹一個測序質控的工具包:RSeQC包,它提供了一系列有用的小工具能夠評估高通量測序尤其是RNA-seq數據.比如一些基本模塊;檢查序列質量,核酸組分偏性,PCR偏性,GC含量偏性,還有RNA-seq特異性模塊:評估測序飽和度映射讀數分布覆蓋均勻性鏈特異性轉錄水平RNA完整性等。

安裝:

RSeQC是依賴于python的,直接使用pip進行安裝:

pip install RSeQC
輸入數據格式:

RSeQC接受4種文件格式:

  • BED格式: Tab分割,12列的表示基因模型的純文本文件,例如:
bed12格式
  • SAMBAM格式: 用來存儲reads比對結果信息.SAM是可讀的純文本文件,然而BAMSAM的二進制文本,一個壓縮的可索引的reads比對文件. 例如:
SAM格式
人hg19染色體信息
  • Fasta文件.
使用方法:

最新版本的RSeQC(2.6.4)包含以下一些模塊,每個模塊都可以單獨調用進行分析:

RSeQC包含的模塊

我們一個一個來看:

bam2fq.py:

BAMSAM格式的文件轉為fastq格式.(這個感覺一般用不到)


bam2wig.py:

將BAM文件轉為wig/bigwig格式的文件.(這個在作圖尤其是信號圖的時候很有用.)如果需要轉為bigwig格式,則需要UCSC的wigToBigWig工具,下載地址:
http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/wigToBigWig


bam_stat.py:

對比對結果文件BAMSAM文件進行統計.其實samtools里也有類似工具.結果如下所示:

bam_stat統計結果

統計結果包括:總比對記錄,PCR重復數,Non Primary Hits表示多匹配位點.不匹配的reads數,比對到+鏈的reads,比對到-鏈的reads,有剪切位點的reads等.


clipping_profile.py:

這個模塊用于評估RNA-seqBAMSAM文件中的有切除核苷酸的reads情況.
??clipped reads有兩種,一種是soft-clipped,即reads5'或3'不能比對到參考基因組;另一種是hard-clipped,即reads5'或3'不能比對到參考基因組并且被剪切.
??這個模塊會生成.r格式的作圖腳本以及.pdf格式的報告文件以及.xls的數據文件.
例如雙端測序clipping profile圖如下:

Read-1
Read-2

deletion_profile.py:

也就是reads deletion位點的分布.

read deletion distribution

divide_bam.py:

隨機分割BAM文件(m個比對結果)為n個文件,每個文件包含m/n個比對結果.


FPKM_count.py:

根據read countgene注釋文件(bed12格式)計算每個基因的FPM (fragment per million)或者FPKM(fragment per million mapped reads per kilobase exon).

結果類似下面的:

FPKM/FPM結果

geneBody_coverage.py:

計算RNA-seq reads在基因上的覆蓋度.

方法示意圖

結果如下:

多個樣本的RNA-seq reads在基因上的覆蓋度

如果是大于3個的樣本,則還會生成熱圖:

reads在基因上的覆蓋度熱圖
geneBody_coverage2.py:

功能和上面的geneBody_coverage.py一樣,但輸入的是bigwig格式文件

infer_experiment.py:
  1. 這個模塊用來"猜"RNA-seq的相關配置信息,針對鏈特異性測序,通過reads的鏈型轉錄本的鏈型來評估reads是哪一條鏈的.
  2. reads的鏈型是通過比對結果得到的,轉錄本的鏈型是銅鼓注釋文件得到的.
  3. 對于非鏈特異性測序,reads的鏈型轉錄本的鏈型是沒有關系的.
  4. 對于鏈特異性測序,reads的鏈型轉錄本的鏈型是有很大關系的.通過下面的3個例子說明.
  5. 在測序前你并不需要知道RNA-seq是不是鏈特異性的,就當他們是非鏈特異性的,這個模塊可以"猜"到"reads"是哪條鏈的.
對于雙端RNA-seq,有兩種方法來確定reads在哪條鏈(如illumina ScriptSeq protocol):

(1). 1++,1–,2+-,2-+ :
說明:12表示read1read2,第一個+/-表示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- +” readsgene鏈型一致的,而另一半是“1 +1 - +2++,2-”不一致的。 我們得出結論,這不是一個鏈特異性的測序,因為reads鏈型不依賴于gene鏈型.

例二:
"猜"是鏈特異性測序

解釋: 0.72%是不能確定鏈型的.94.41%readsgene鏈型一致的.僅有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上被插入核苷酸的分布.

結果舉例:
Read-1 insertion profile
Read-2 insertion profile

junction_annotation.py:

輸入一個BAMSAM文件和一個bed12格式的參考基因文件,這個模塊將根據參考基因模型計算剪切融合(splice junctions)事件.

  • splice read: 一個RNA read,能夠被剪切一次或多次,所以100個spliced reads能夠產生>=100個剪切事件.
  • splice junction:多個跨越同一個內含子的剪切事件能夠合并為一個splicing junction.
junction 有三種:
  1. 已經被注釋的.5'剪切位點3'剪切位點已經被注釋.
  2. 全新的.
  3. 部分是新的.
結果示例:
splicing junctions

junction_saturation.py:

在剪切位點分析時首先檢查當前的測序深度是否是足夠深的.對于一個已經注釋的物種,在某個組織中基因的數量是一定的,所以剪切位點數量也是一定的.可以從參考基因模型(bed12格式的文件)可以提前看出splice junctions的數量. 一個飽和的RNA-seq能夠發現所有已經被注釋的splice junctioons,否則下游剪切位點分析將會出現問題因為將有較少的splice juncitons將發現不了.這個模塊從這個測序結果(SAMBAM文件)中進行重抽樣,從5%,10%,15%,...,到95%的飽和度來檢查每個階段的splice junctions并與參考基因組進行比較.

結果示例:
不同測序飽和度下的splicing junctions數量

解釋: 在這個例子中,每個飽和度下的測序深度的known junctions基本都是一致的(紅線).因為大部分的剪切位點我們基本都發現了.即便加深測序深度也不會發現跟多的known junctions,僅會加深junciton的覆蓋度(如junction被更多的reads覆蓋.).然而當前測序深度(100%的reads)對于發現新的juncitons是不夠的(綠線)


mismatch_profile.py:

計算reads的不匹配位點的分布.

結果示例:
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分布.

結果示例:
reads在基因組不同結構上的分布情況

read_duplication.py:

兩種用于計算重復率的策略:(1) 基于序列的,完全相同序列的reads被視為重復的reads. (2) 正好map到同一個基因組位置的reads被視為重復reads. 對于splice reads,map到同一位置并且以相同方式剪切的視為是重復reads.

reads重復

read_GC.py:

計算reads的GC含量分布.

reads的GC含量分布

read_hexamer.py:

計算6mer的頻率.


read_NVC.py:

這個模塊有用來檢查核苷酸的堿基組成偏好性.由于隨機引物的影響,reads 5'端開始會有某些模式過表達.這種偏好性能夠被NVC(Nucleotide versus cycle)畫出.理想狀態下, A%=C%=G%=T%=25%.

結果示例:
reads每個位置的堿基偏好性

read_quality.py:

可視化reads每個位置的測序質量.

結果示例:

RNA_fragment_size.py:

在map后計算每個gene上的fragment的大小,包括:每個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與實際表達量的偏差.計算公式如下:

計算當前樣本量下的RPKM與實際RPKM的偏差
結果示例:
不同表達量等級下不同樣本量的RPKM偏差

說明:Q1,Q2,Q3,Q4是按照轉錄本表達量4分位分開的.Q1表示的是表達量低于25%的轉錄本,以此類推.可以看出:隨著樣本量升高,RPKM與實際值的偏差也在降低.而且轉錄本表達量越高這種趨勢越明顯(Q4最明顯).

樣本量與RPKM偏差

可以看出,樣本量50%之后線條已經趨于平緩,也就是說對于轉錄本定量來說,當前測序深度是足夠的.


spilt_bam.py:

根據提供的bed12注釋文件和BAM文件拆分為以下三個文件:

  1. XXX.in.bam: 包含map到外顯子趨于的reads.
  2. XXX.ex.bam:包含map不到外顯子趨于的reads.
  3. XXX.junk.bam:質控失敗或者沒有map上去的reads.

split_paired_bam.py:

將一個雙端測序BAM文件拆分為兩個單端測序BAM文件.


tin.py:

這個模塊用來在轉錄本級別計算RNA完整性TIN (transcript integrity number)值.

結果示例:

更多原創精彩視頻敬請關注生信雜談:

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容