- 更新于2020.10.27
-
二代測序方式分為三種:
- single read 單端測序
- paired-end read 雙端測序
- mate-pair read 配對測序
雖然有三種方式,但是大多數數據(包括本課題)為雙端測序,至于三者之間的差別、優缺點以及適用場合可以自行搜索。接下來講的內容都是基于雙端測序的。
-
測序儀原始下機的數據我們稱為raw data,二代測序是將DNA片段打斷了再測的,每個測序片段我們稱為read,質控完的數據稱為clean data。既然是雙端測序,那么文件就是成對出現的,分別記錄reads兩端的信息:一般的命名是*.fq1.gz、*.fq2.gz(' * ' 表示通配符),這是一個fastq文件,通常以fq或fastq作為后綴,具體內容下方會介紹。這里我給大家展示我們課題的一個真實數據,給大家看看大小以及命名方式。
原始數據展示 我們可以看到,首先我把我的用戶名打碼了,呵呵,開個玩笑。
首先這個樣本總共有五個文件,這就是公司給的原始數據,我原封不動的上傳到了我的服務器上,也沒改名也沒怎樣,我在圖片上畫了五個藍色的框,下面是分別代表的意思:
W2018001:是樣本的名字,其實我一開始提交給公司的名字是2018001,為什么多了個W我也不知道啊。
NZTD...:這一串是公司自動生成的編號,他們內部使用的,不知道也不需要知道啥意思,不同的公司,可能沒有這個
HCV...:flowcell_ID的信息,一般情況下一個樣本是一樣的
L1:flowcell_lane的信息,圖中有L1和L2,這也是為什么一個數據他給我四個文件的原因,他在不同的lane上測的,這里還要注意的一點就是,這個lane的值可能是同一個,就是即使碰到都是L1也是可能的
1,2:分別代表reads的兩端
- 我們可以看到,這個30X的WGS的數據量還是很大的,所以為什么他會是壓縮文件,不同公司給的命名可能不一樣,不過大體不會相差太多,具體命名的含義也可以問問公司的。(注:flowcell_ID、flowcell_lane等信息一般在原始數據的內也可以看到)
- 這里給到的是一個樣本2對文件,實際情況是,可能有多對或者只有一對文件,對于這樣的情況,我們的處理方式一般是看作一個文件處理,就是merge一下,有見過有些課題組是在這一步直接merge,我的處理方式是后期bam文件再merge。
- 好了,拿到這么一個數據,我們做的第一件事情應該是校驗數據的完整性!!!這點很重要,即使一般情況下,傳輸都不會出錯,但這一步還是要做的,怎么去做呢,就看這個截圖里的第一個文件MD5.txt,其實這就是一個文本文件,打開了看看是這樣的
- 就是這樣的四行信息,也就是一個文件名對應一個校驗碼,最簡單的校驗方式,linux系統自帶的MD5校驗命令:
$ md5sum -c MD5.txt
- 這個還是需要一點點時間的,大家要耐心等待。展示一下我這里的結果吧(其實在上傳完數據的時候我就校驗過)
好了,校驗完了,沒問題,那么就給大家介紹一下文件的格式。
-
fastq文件是什么呢,其實就是文本文件,可以直接查看,以下是示例:fastq格式
一條read一條記錄,一條記錄占四行,第一行是注釋,第二行是序列,就是我們所說的ATCG堿基序列,第三行是‘+’,第四行是對應的每個堿基的測序質量,也就是fastq中的“q”。每條記錄之間是沒有空格的。
貼一下關于第一行的解釋
EAS139 | The unique instrument name |
---|---|
136 | Run ID |
FC706VJ | Flowcell ID |
2 | Flowcell lane |
2104 | Tile number within the flowcell lane |
15343 | 'x'-coordinate of the cluster within the tile |
197393 | 'y'-coordinate of the cluster within the tile |
1 | Member of a pair, 1 or 2 (paired-end or mate-pair reads only) |
Y | Y if the read fails filter (read is bad), N otherwise |
18 | 0 when none of the control bits are on, otherwise it is an even number |
ATCACG | Index sequence |
第一個是測序機器ID,獨一無二的,你可以去illumina官網查到的(我沒查過)
第二個是這個機器跑的次數,一般機器都是有使用壽命的,所以次數越多肯定結果越差,那么一般在什么區間合適呢,我的老師給的建議是200-9999,為啥還有下限呢,那是因為,機器剛開始跑的那幾次,需要磨合嘛,不是很準。看來這個展示數據不是很好啊,嚇得我趕緊去看了下我的數據,還好,在212次(懶得貼圖了,簡書弄個圖真麻煩),在范圍內。
倒數第三個,表示數據有沒有被過濾過,一般我們的原始數據肯定是N的,要是給的原始數據是Y,你就得好好問問公司原因了。
其余具體的我就不解釋了,有問題可以評論交流。
第二行要注意的是,可能有N的出現,那是因為有些堿基沒被測出來。
第四行是ASCII碼表示的堿基質量,這樣就能保證質量是用一個字符表示的,和堿基一一對應。公式如下:
????????????P=10^-[(n-33)/10]舉個栗子:比如“?”在ASCII碼表上對應的編號是63,那么n就是63,減去33以后就是30,也就是我們說的Q30了,所以
Q = n - 33
,P算出來就是0.001,這個就是錯誤率,反過來,準確率就是99.9%,Q30就是準確率99.9%,同理Q20就是準確率99%。
- ok,介紹完格式,介紹兩款質控的軟件,fastqc和fastp
fastqc:
$ wget http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.7.zip
$ unzip fastqc_v0.11.7.zip
$ cd FastQC/
$ chmod 755 fastqc
fastp:
$ wget http://opengene.org/fastp/fastp
$ chmod 755 fastp
-
以上是我的安裝方式,fastqc是一個很常用的軟件,我想只要不是小白都用過。對于ubuntu用戶請用我提供的方式進行安裝,用
apt-get install fastqc
可能在使用的時候出現如下報錯
fastqc錯誤 至于fastp,是用來清洗質量不好的reads的,其實類似的軟件很多,包括trimmomatic等,之所以選擇這個是因為用過那么多軟件后,發現fastp無論在安裝還是使用上都很順手,僅此而已。(注:fastp的UMI操作可能導致結果不能復現,詳見issue)
好了,現在讓我們來使用fastqc對raw data的質量進行分析并查看
$ fastqc [-o output dir] [--(no)extract] [-f fastq|bam|sam] [-c contaminant file] seqfile1 .. seqfileN
#這是fastqc的使用方法,其實很簡單,對于不懂的軟件,我一般的推薦是,先看官方說明,再逛逛論壇,這里不展開說這個軟件怎么使用了,下面是我的使用代碼
$ fastqc -o your/path/to/out -t 4 ${datadir}/*.fq.gz
#是不是超級簡單,-o是報告輸出的目錄,這個目錄必須是存在的,-t是線程數
- 結果如下,要放在早幾年,估計是很難見到這么干凈的原始數據了,為此我還專門請教了一些老師,這么干凈的數據的可信程度。得益于illumina公司對儀器的升級改善,數據的質量也是越來越好了。
- 但是即便如此,我們還是要對raw data進行清洗的,數據的質量直接決定了后面分析的準確性,是一切分析的前提,我們一直都在說QC,QC也是基礎,但是它的重要性不容忽視。下面是我要查看的質控的內容:
- read各個位置的堿基質量值分布
- 堿基的總體質量值分布
- read各個位置上堿基分布比例,目的是為了分析堿基的分離程度
- GC含量分布
- read各位置的N含量
- read是否還包含測序的接頭序列
- 下面是我的對于clean data的指標:
- 將含有接頭的reads對去除,或者cut接頭
- 測序錯誤率分布檢查,一般情況下,每個堿基位置的測序錯誤率都應該低于1%
- GC含量,理論上A=T,C=G,前幾個堿基可能會有波動,GC含量整體在41.5%左右
- 平均質量值分布:Q30平均比例≥80%,平均錯誤率≤0.1%
- 為了達到這樣的目標,我的篩選是條件是:
- 去除含接頭(adapter)的一對reads;可以酌情考慮去除接頭保留reads
- 當某一端read中的N含量超過該條read長度比例10%,去除該對reads
- 當某一端read中低質量(Q≤20)堿基數超過該read長度比例的50%時,去除該對reads
$ fastp -i 1.fq.gz -I 2.fq.gz \
--adapter_sequence ${Adapter_R1} \
--adapter_sequence_r2 ${Adapter_R2} \#不同的試劑盒、儀器,會有不同的接頭,這個可以咨詢公司,也可以選擇去掉這兩個參數,影響不大
-o your/path/of/data/cleaned.1.fq.gz \
-O your/path/of/data/cleaned.2.fq.gz \#輸出的clean data的位置和名稱
-c -q 20 -u 50 -n 15 -5 20 -3 20 -w 16 \
-h your/path/of/report/clean.html -j your/path/of/report/clean.json #這倆參數分別是不同格式報告的輸出位置和文件名
- 別的不多說,解釋一下我用到的幾個參數,
- -c:對overlap區域進行糾錯,適用于PE
- -q:設置低質量的標準,默認是15,多數公司這里設為5
- -u:低質量堿基所占比例,默認40代表40%,只要有一條read不滿足條件就成對丟掉
- -n:過濾N堿基過多的reads,15代表個數,因為一般PE150的reads長度是150
- -w:線程數,這里要注意!范圍是1-16,建議是8,親測,8和16差不多。
- -5 -3:根據質量值來截取reads,分別對應5‘端和3’端,得到reads長度可能不等
- 具體請參考官網說明。
- 這個時候再看clean data結果,就無需fastqc了,因為fastp也會生成一份報告。
- 看到結果,其實可以發現,數據還是保留了大部分的,所以完全不用擔心cut太狠,導致數據不夠。我的原則是,在數據量面前,更應該保證的是數據的準確性,即使會有一點損失,也是值得的,畢竟research更注重的也是準確性,相對于降低假陰性,我更傾向于提高真陽性。
- 那么得到clean data以后就可以進行下一步mapping了,mapping內容下次再與大家分享。
- 水平有限,要是存在什么錯誤請評論指出!請大家多多批評指正,相互交流,共同成長,謝謝!!!