高通量測序的數據處理與分析(二)-宏基因組2

博客原文

宏基因組數據處理方法

數據下載

wget下載

宏基因組的數據主要分布在兩個數據庫:1. NCBI的SRA數據庫,2. ENA。近年來也有許多研究者將數據上傳到中國的數據庫:NGDC

你可以直接通過網頁下載數據,或者是通過各個網站提供的下載工具進行批量下載。也可以到 sra-exporter 這個網站上輸入項目號獲得樣本的下載鏈接。用wget或者其他下載工具進行下載,示例的命令如下:

wget -c ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR185/004/ERR1857004/ERR1857004_1.fastq.gz
wget -c ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR185/004/ERR1857004/ERR1857004_2.fastq.gz

這樣我們就下載了ERR1857004樣本的雙端測序數據。

Aspera下載

除了wget下載以外,也可以通過安裝 Aspera 來進行加速下載,

# 建立安裝目錄
mkdir ~/app/aspera
cd ~/app/aspera

# 下載aspera軟件
wget https://download.asperasoft.com/download/sw/connect/3.6.2/aspera-connect-3.6.2.117442-linux-64.tar.gz
tar -zvxf aspera-connect-3.6.2.117442-linux-64.tar.gz

# 安裝aspera
sh aspera-connect-3.6.2.117442-linux-64.sh
mv ~/.aspera ~/app/aspera

# 測試Aspera能否使用
~/app/aspera/.aspera/connect/bin/ascp -h 

# 設置環境變量
echo 'export PATH=~/app/aspera/.aspera/connect/bin/:$PAHT' >> ~/.bashrc
source ~/.bashrc
ascp -h

若鏈接失效,點擊這里 下載我的備份,或者使用conda下載

# 安裝aspera
conda install -c hcc aspera-cli
ascp -h

成功安裝aspera后,檢查下安裝目錄下是否有 asperaweb_id_dsa.openssh 文件,一般在 .aspera/connect/etc/asperaweb_id_dsa.openssh

同樣是到 sra-exporter 上獲取aspera下載鏈接,這個網站國內訪問可能會有一些問題。

08d4902c891a19c44698a446e02bd685.JPG

紅框中填寫你的asperaweb_id_dsa.openssh的路徑。

黃框中沒有斷點續傳的參數很危險,建議加上 -k1,如何加的問題——用正則,不演示了。

質量控制

FastQC安裝

在進行質量控制之前需要查看質量報告,質量報告可以使用FastQC軟件生成

# 安裝fastqc
cd [pathway/of/fastqc/]
wget -c http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.12.1.zip
unzip fastqc_v0.12.1.zip

# 設置執行權限
cd FastQC
chmod u+x fastqc 

# 配置環境變量
vim ~/.bashrc
export PATH="/pathway/of/fastqc/FastQC:$PATH"  # 添加至文件最后一行
source ~/.bashrc  # 使配置文件生效
fastqc --help     # 測試

同樣的備份鏈接 在這里 或者使用conda進行安裝

conda install -c bioconda fastqc
fastqc --help

fastqc只是一個觀看質控情況的軟件,需要根據fastqc的結果進行具體的質控,而具體的質控工作是由指控軟件來完成的,常見的質控軟件有 fastptrimmomatic。本文以 fastp 為例,在安裝fastqc的同時請把fastp也安裝了

conda install -c bioconda fastp

FastQC的使用及報告詳解

fastqc [fastq] -o [out_file] -f [file_type]

# 當然也可以多個文件同時進行質控
fastqc [fastq_1] [fastq_2] ... [fastq_n] -o [out_file] -f [file_type]

常用參數說明

-o --outdir       FastQC生成的報告文件的儲存路徑,生成的報告的文件名是根據輸入來定的
-f --format       指定輸入文件的格式
--extract         生成的報告默認會打包成1個壓縮文件,使用這個參數是讓程序不打包
-t --threads      選擇程序運行的線程數,每個線程會占用250MB內存,越多越快咯
--min_length      設置序列的最小長度,≥最長read的長度
-c --contaminants 污染物選項,輸入的是一個文件,格式是Name [Tab] Sequence,里面是可能的污染序列,如果有這個選項,FastQC會在計算時候評估污染的情況,并在統計的時候進行分析,一般用不到
-a --adapters     也是輸入一個文件,文件的格式Name [Tab] Sequence,儲存的是測序的adpater序列信息,如果不輸入,目前版本的FastQC就按照通用引物來評估序列時候有adapter的殘留
-q --quiet        安靜運行模式,一般不選這個選項的時候,程序會實時報告運行的狀況

這里是官網提供的一個壞的質控例子 >點擊此處查看<

fastqc的質控報告一共有11個模塊

Basic Statistics

這個模塊是不會報錯的,包含了文件名, 文件類型,處理的序列總數,序列長度,GC含量等基本信息

Basic Statistics
Per base sequence quality
Per base sequence quality

這個模塊表示每個位置堿基的整體質量如何,橫軸表示read上堿基的位置(第幾個堿基),縱軸表示質量分數,是以Q值來展示的,Q30表示可信度為 99.9% ,Q20表示可信度為99%,Q10表示可信度為90%。

一般這個模塊報錯的修整方法是通過剪切掉低質量的堿基。

# 單端
fastp -i [seq] -o [outseq] -5 -W 4 -M 20

# 雙端
fastp -i [seq_1] -I [seq_2] -o [outseq_1] -O [outseq_2] -5 -W 4 -M 20

這個參數的意思是從5端開始以4bp堿基為窗口進行滑動,刪除質量低于Q20的堿基,雙端的以 -i 參數的5'端開始

Per Tile Sequence Quality
Per Tile Sequence Quality

這個模塊中橫軸代表的是堿基的位置,縱軸代表的是tile的index編號,tile表示的是高通量測序儀上的一小塊矩形區域,冷色代表在平均質量附近,暖色代表比平均質量低,正常來講需要去除掉質量比較的低的部分tile,但是fastp中沒有針對于tile編號進行去除的參數,其他質控軟件中我也沒有找到,所以這一部分質控如何質控目前不清楚,我認為如果上一步, Per base sequence quality的質控做到位了,所有的堿基都在Q20甚至Q30以上,這一部分質控應該是可以省略的,因為這個質控部分展示的是低于平均質量tile,但是平均質量本身就很高(Q30)那么即使低一些也能達到Q20的標準。

Per sequence quality scores
Per sequence quality scores

這個模塊是展示每個read平均堿基質量的”頻率圖“,橫軸代表的是read的平均堿基質量,縱軸代表read數量

同樣的如果第一步的質控到位了,這步也不會有太大問題,一般來說不需要過多關注。

fastp的默認參數會過濾掉平均堿基質量低于15的read。

# 單端
fastp -i [seq] -o [outseq] -q 15

# 雙端
fastp -i [seq_1] -I [seq_2] -o [outseq_1] -O [outseq_2] -q 15

如果這一項已經過關,或不想進行這項的過濾則 將 -q 參數替換為 -Q 即可

Per base sequence content
Per base sequence content

這張圖片展示了每個堿基位置的ATGC的比例,正常來講這四條線不會有太大波動,因趨于平行,且 G \approx C, A\approx T,如果出現了波動可能有以下原因:1. 由于在構造文庫的時候,引物對DNA片段開頭的堿基有一定的選擇性會導致開頭的堿基含量出現紊亂現象。2. 由于測序儀調整造成前幾個測序結果不準確。事實上大部分情況都是由原因1引起的,如果是原因1引起的紊亂現象大部分情況不會對下游分析產生影響[3] 。但是同樣的,如果你的序列足夠長,切掉開頭的一小部分對你序列整體的影響很小,那么我認為還是去除開頭的這一部分比較好。下面是fastp一刀切去除開頭序列的參數。這一部分消耗的計算資源很少。

# 單端
fastp -i [seq] -o [outseq] -f [cut_num] -t [cut_num]

# 雙端
fastp -i [seq_1] -I [seq_2] -o [outseq_1] -O [outseq_2] -f [cut_num] -t [cut_num]

-f : 從 read1 的開頭開始剪切 [cut_num] 個堿基,當雙端測序選擇這個參數時也同時會剪切read2 開頭的堿基,如果想要雙端的兩個文件剪切不同的值則,加 -F 參數指定read2開頭剪切的數量

-t :從 read1 的尾部開始剪切 [cut_num] 個堿基,同樣的也可以用 -T 指定 read2 尾端

Per sequence GC content
Per sequence GC content

然后是每個序列的GC含量,橫軸表示GC含量的平均值,縱軸表示read數量,藍色線是標準線,是原始數據沒有被污染的理想分布情況,即符合正態分布。紅線是實際情況,偏差15%報warning,偏差30%報fail。如果紅線,也就是實際的GC含量分布圖偏離了正態,有以下幾種原因:1. 意味著存在污染物,如果是宏基因組數據那么意味著很大概率存在宿主污染。2. 某種序列過度表達,影響了整體的GC含量分布。

針對于宿主污染,fastp無法進行解決,因為宿主污染的去除需要依靠數據庫比對,fastp不具有這種功能,bowtie2和kneaddata等軟件可以用于宿主去污染。如果是重復序列的原因,下面會有介紹如何通過fastp去除重復序列,這里先按下不表。

Per base N content
Per base N content

這張圖表示序列的”N堿基“含量,所謂”N堿基“就是測序儀無法準確判斷某個堿基時用N來替代ATGC,表示未知。通常N含量不會太高。圖中,橫軸是堿基位置,縱軸是N堿基的數量。當任意堿基位置的N含量>5%時報warning,>20%時報fail。

這個質量控制fastp的默認參數會做掉,一般不需要調,參數是 -n/--n_base_limit 默認值是5,即每個read若N堿基含量>5%,則這個read被丟棄。

Sequence Length Distribution
Sequence Length Distribution

這個模塊展示的每個read的長度,橫軸是read長度的區間,縱軸是read的數量。一般來講這個質控不需要去管他,因為即使read存在一些不整齊也不影響后續的比對。fastp的默認參數是去除長度低于15bp的短read。你可以通過-L 參數關閉長度過濾,也可以通過 -l 參數指定過濾的長度。

Sequence Duplication Levels
image-20230421193645934

這張圖表示了不同重復的read占比,橫軸是read重復的次數,縱軸是read的百分比。紅線和藍線的計算方式不同,總的來說都是反應read的重復情況。藍線的百分比是相對于總讀數計算的,紅線的百分比是相對于不同序列的總數計算的。

下面是一個具體的例子,思路來自于這篇文章。這里提供一個新的案例以供理解

案例:20 個 獨有的read + 3 個 read (每個read出現2次) + 2個 read(每個read出現3次)

duplication = 1時: 藍線_{d1} = \frac{20\times1}{20+3\times2+2\times3} = 0.625, 紅線_{d1} = \frac{20}{20+3+2} = 0.8

duplication = 2時:藍線_{d2} = \frac{3\times2}{20+3\times2+2\times3}=0.1875, 紅線_{d2}=\frac{3}{20+3+2}=0.12

duplication =3 時:藍線_{d3} =\frac{2\times3}{20+3\times2+2\times3}=0.1875, 紅線_{d3}=\frac{2}{20+3+2}=0.08

且無論是紅線還是藍線折現下面積均為1。

也有人認為轉錄組數據這個部分偏高是沒有關系的[4],從原理上講,轉錄組數據的文庫是由mRNA反轉錄的cDNA構成的,而mRNA有大量重復的輸入是正常的。

如果你想進行這一部分的質控,也就是去除過多的重復序列,那么可以用 -D參數,

# 單端
fastp -i [seq] -o [out_seq] -D
# 雙端
fastp -i [seq_1] -I [seq_2] -o [out_seq_1] -O [out_seq_2] -D 

--dup_calc_accuracy 可以設置精度,1~6,1最低,6最高。

Overrepresented sequences
Overrepresented sequences

這個模塊表示某一個read或者某幾個read的含量過高,可能表示這幾個read具有高度生物學意義,或者是文庫受到了污染,fastp默認是不啟用過濾的,-p 參數開啟過量表達測序。

Adapter Content
Adapter Content

這個模塊描述了接頭的去除情況,橫軸是堿基的位置,縱軸是是含有接頭序列的比例。fastp默認是開啟這個質控的不需要設置,如果你這個模塊的質量很好可以用 -A 關掉質控,fastp是默認帶有幾個常用平臺的接頭序列。如果用默認的參數沒有去除掉接頭,你可以用 --adapter_fasta參數去指定你自己的接頭序列,這個接頭序列根據你測序平臺不同會出現不同的接頭。

到此為止,除了去除宿主污染其他所有的質控都做完了,宿主污染的質控方式留到下一章講。

fastp的具體參數
usage: fastp -i <in1> -o <out1> [-I <in1> -O <out2>] [options...]
options:
  # I/O options   即輸入輸出文件設置
  -i, --in1                          read1 input file name (string)
  -o, --out1                         read1 output file name (string [=])
  -I, --in2                          read2 input file name (string [=])
  -O, --out2                         read2 output file name (string [=])
  -6, --phred64                      indicates the input is using phred64 scoring (it'll be converted to phred33, so the output will still be phred33)
  -z, --compression                  compression level for gzip output (1 ~ 9). 1 is fastest, 9 is smallest, default is 2. (int [=2])
    --reads_to_process               specify how many reads/pairs to be processed. Default 0 means process all reads. (int [=0])
  
  # adapter trimming options   過濾序列接頭參數設置
  -A, --disable_adapter_trimming     adapter trimming is enabled by default. If this option is specified, adapter trimming is disabled
  -a, --adapter_sequence               the adapter for read1. For SE data, if not specified, the adapter will be auto-detected. For PE data, this is used if R1/R2 are found not overlapped. (string [=auto])
      --adapter_sequence_r2            the adapter for read2 (PE data only). This is used if R1/R2 are found not overlapped. If not specified, it will be the same as <adapter_sequence> (string [=])
    
  # global trimming options   剪除序列起始和末端的低質量堿基數量參數
  -f, --trim_front1                  trimming how many bases in front for read1, default is 0 (int [=0])
  -t, --trim_tail1                   trimming how many bases in tail for read1, default is 0 (int [=0])
  -F, --trim_front2                  trimming how many bases in front for read2. If it's not specified, it will follow read1's settings (int [=0])
  -T, --trim_tail2                   trimming how many bases in tail for read2. If it's not specified, it will follow read1's settings (int [=0])

  # polyG tail trimming, useful for NextSeq/NovaSeq data   polyG剪裁
  -g, --trim_poly_g                  force polyG tail trimming, by default trimming is automatically enabled for Illumina NextSeq/NovaSeq data
      --poly_g_min_len                 the minimum length to detect polyG in the read tail. 10 by default. (int [=10])
  -G, --disable_trim_poly_g          disable polyG tail trimming, by default trimming is automatically enabled for Illumina NextSeq/NovaSeq data

  # polyX tail trimming
  -x, --trim_poly_x                    enable polyX trimming in 3' ends.
      --poly_x_min_len                 the minimum length to detect polyX in the read tail. 10 by default. (int [=10])
  
  # per read cutting by quality options   劃窗裁剪
  -5, --cut_by_quality5              enable per read cutting by quality in front (5'), default is disabled (WARNING: this will interfere deduplication for both PE/SE data)

參考鏈接

[1] 使用fastp進行質控

[2] fastp似乎無法處理per tile sequence quality

[3] Per Base Sequence Content質控報告官方文檔

[4] 一文讀懂fastqc report

[5] Sequence Duplication Levels的具體例子

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

推薦閱讀更多精彩內容