【宏基因組入門教程】(一)

最近接手了宏基因項目,會在之后接著發一系列的宏基因組入門教程,學習資料大概來自國外的教程。
感謝Harriet Alexander, Phil Brooks, C. Titus Brown提供的學習資料和數據(2017-cicese-metagenomics.readthedocs.io/en/latest/)

數據下載及核查:

#開個多線程,幾個可以一起下
wget -c -nd -r -np -k -L -p -nd https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948_1.fastq.gz
wget -c -nd -r -np -k -L -p -nd https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948_2.fastq.gz
wget -c -nd -r -np -k -L -p -nd https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1977249_1.fastq.gz
wget -c -nd -r -np -k -L -p -nd https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1977249_2.fastq.gz
# md5 check一下
$md5sum SRR1976948_1.fastq.gz SRR1976948_2.fastq.gz SRR1977249_1.fastq.gz SRR1977249_2.fastq.gz
#結果應該是這樣的
37bc70919a21fccb134ff2fefcda03ce  SRR1976948_1.fastq.gz
29919864e4650e633cc409688b9748e2  SRR1976948_2.fastq.gz
ee25ae14f84308f972cebd42e55502dd  SRR1977249_1.fastq.gz
84b15b4f5975cd7941e211336ff27993  SRR1977249_2.fastq.gz
# 看看每個文件的具體情況
file                   format  type   num_seqs      sum_len  min_len  avg_len  max_len
SRR1976948_1.fastq.gz  FASTQ   DNA   1,000,000  251,000,000      251      251      251
SRR1976948_2.fastq.gz  FASTQ   DNA   1,000,000  251,000,000      251      251      251
SRR1977249_1.fastq.gz  FASTQ   DNA   1,000,000  251,000,000      251      251      251
SRR1977249_2.fastq.gz  FASTQ   DNA   1,000,000  251,000,000      251      251      251

質控

#fastqc 太簡單 略

#可以試試multiqc,一次把fastqc的結果文件做整合
# 下載接頭文件
$curl -O -L http://dib-training.ucdavis.edu.s3.amazonaws.com/mRNAseq-semi-2015-03-04/TruSeq2-PE.fa
#Trimmomatic
$for f in *gz
do 
base=$(basename $f _1.fastq.gz);echo $base;java -jar /data/apps/trimmomatic/Trimmomatic-0.36/trimmomatic-0.36.jar PE ${base}_1.fastq.gz \
     ${base}_2.fastq.gz \
     ${base}_1.PE.gz ${base}_1.SE.gz \
     ${base}_2.PE.gz ${base}_2.SE.gz \
     ILLUMINACLIP:TruSeq2-PE.fa:2:40:15 \
     LEADING:2 TRAILING:2 \
     SLIDINGWINDOW:4:2 \
     MINLEN:25
done
#再次fastqc 看上一步質控的結果

MEGAHIT /metaspades組裝

# megahit軟件安裝 有編譯好了的版本
#https://github.com/voutcn/megahit/releases/download/v1.1.4/megahit_v1.1.4_LINUX_CPUONLY_x86_64-bin.tar.gz
#下數據
$curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948.abundtrim.subset.pe.fq.gz
$curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1977249.abundtrim.subset.pe.fq.gz
#看看數據量
file                                  format  type   num_seqs      sum_len  min_len  avg_len  max_len
SRR1976948.abundtrim.subset.pe.fq.gz  FASTQ   DNA   2,926,154  680,423,034       32    232.5      251
SRR1977249.abundtrim.subset.pe.fq.gz  FASTQ   DNA   3,340,976  768,640,987       32    230.1      251
#組裝,他們的代碼
megahit --12 SRR1976948.abundtrim.subset.pe.fq.gz,SRR1977249.abundtrim.subset.pe.fq.gz -o combined
#我的代碼
megahit --12 SRR1976948.abundtrim.subset.pe.fq.gz SRR1977249.abundtrim.subset.pe.fq.gz --k-min 23 --k-max 141 --k-step 10 --no-mercy --use-gpu -t 10 1>megahit.log 2>megahit.err &
#文檔里說組裝15分鐘,我花了5分鐘
#文檔里的組裝結果和我的組裝結果
7713 contigs, total 13168567 bp, min 200 bp, max 54372 bp, avg 1707 bp, N50 4305 bp
6043 contigs, total 10908730 bp, min 200 bp, max 100560 bp, avg 1805 bp, N50 4024 bp

## metaspades組裝 
#花費19分鐘
metaspades.py -o metaspades --12 SRR1976948.abundtrim.subset.pe.fq.gz --12 SRR1977249.abundtrim.subset.pe.fq.gz --only-assembler -t 10 1>spade.log 2>spade.err &
#組裝結果 contig
assembly:contigs.fasta
number of contigs/scaffolds:4959
assembly size:12259965
largest contig/scaffold:252026
N50:7937
N90:1533
#其他組裝軟件 Soapdenovo2 IDBA-UD等

總的來說,spades的組裝結果是最理想的,但是spades在糾錯那步又慢又耗內存,我的機器內存要跑超,所有先用了其他基于kmer的軟件糾錯,而不是讓spades糾錯,糾錯后組裝時選擇--only-assembler,效率也可以保證

教程中提到一個問題 Illumina HiSeq, Illumina MiSeq, and PacBio技術在組裝上有什么需要權衡注意的呢?
這篇文章給了一些結論“Accurate, multi-kb reads resolve complex populations and detect rare microorganisms”

這篇文章干了這么幾件事:
a. 測試了用Moleculo 的reads進行組裝,改善組裝的contig
b. 評估短reads組裝的準確性
c. 查看組裝結果中低豐度的生物
d. 評估了序列變異和基因組含量水平,這些是短reads測序沒辦法解釋的

結果作者干成了這些事:
a. 長reads揭示了很多許多非常豐富的生物,這些生物在短reads組裝中完全弄丟的(missed ....)
b. 使用新的共線性方法重建了基因組結構和代謝潛力
c. 低豐度的“long tail”(暫時還不理解)屬于高豐度生物代表的們
d. 關系密切的菌株和稀有生物的多樣性占去了群體多樣性的絕大部分

MEGAHIT 和其他幾個軟件使用時間和內存的比較:

評估宏基因組組裝結果

#quast軟件安裝
$quast.py ../combined/final.contigs.fa -o megahit-report
# 下載metaspades組裝的結果
$ curl -LO https://osf.io/h29jk/download
$mv download metaspades.contigs.fa.gz
$gunzip metaspades.contigs.fa.gz
$quast.py metaspades.contigs.fa -o metaspades-report
#比較一下megahit和metaspades的組裝結果
$paste */report.txt | cut -f1-2, 4

基因組注釋

#prokka安裝
#注釋,沒啥好說的,prokka真的超級好用
prokka subset_assembly.fa --outdir prokka_annotation --prefix metagG --metagenome --kingdom Bacteria
# prokka可以看已經安裝能哪些注釋數據庫
prokka --listdb
# 然后根據自己情況可自己生成數據庫,流程是下載需要的蛋白質數據、cd-hit去冗余、makeblast建庫、放到prokka db里面去,注釋的時候選擇特定的數據庫就可以了

使用sourmash比較數據集

教程里面使用的是他們自己開發的sourmash軟件(https://sourmash.readthedocs.io/en/latest/),他們對它的描述是快速進行核酸水平搜索和比較的工具。

原理是這樣的:Kmer越長(大于31或更長),這種kmer更傾向于是物種特異性的,屬水平一般kmer=40就可以鑒定物種特異性的kmer,如果想到species水平,Kmer就該是50左右吧。

所以用kmer可以比較基因組和基因組,一個reads數據集和另一個reads數據集:相似或相同的基因組,reads數據集之間都會有很多相同點

only k-mers in both samples
----------------------------
all k-mers in either or both samples

Jaccard距離1表示樣本中相同,Jaccard距離0表示樣本間完全不相同。
這樣可以用來搜索數據庫和數據集中未知的基因組和其他東西,不過基因組有太多的kmer這才是個問題,比如一個5M的大腸桿菌就有5m 的kmer(5 mil?)

##參考安裝 sourmash 
sudo apt-get -y update && \
sudo apt-get install -y python3.5-dev python3.5-venv make \
    libc6-dev g++ zlib1g-dev
python3.5 -m venv ~/py3
. ~/py3/bin/activate
pip install -U pip
pip install -U Cython
pip install -U jupyter jupyter_client ipython pandas matplotlib scipy scikit-learn khmer
pip install -U https://github.com/dib-lab/sourmash/archive/master.zip
#我沒有sudo,3.5以前已經裝了,pip安裝的時候自己加了--user

## 下載其他組裝數據
$curl -L -o SRR1976948.abundtrim.subset.pe.fq.gz https://osf.io/k3sq7/download
$curl -L -o SRR1976948.megahit.abundtrim.subset.pe.assembly.fa https://osf.io/dxme4/download
$curl -L -o SRR1976948.spades.abundtrim.subset.pe.assembly.fa https://osf.io/zmekx/download
##運行sourmash 
#教程中提到,首先計算一下reads,這些reads是需要前期過濾、kmer修正的
sourmash compute -k51 --scaled 10000 SRR1976948.abundtrim.subset.pe.fq.gz -o SRR1976948.reads.scaled10k.k51.sig 
#比較組裝結果 為宏基因組構建“signature”
sourmash compute -k51 --scaled 10000 SRR1976948.spades.abundtrim.subset.pe.assembly.fa -o SRR1976948.spades.scaled10k.k51.sig 
sourmash compute -k51 --scaled 10000 SRR1976948.megahit.abundtrim.subset.pe.assembly.fa -o SRR1976948.megahit.scaled10k.k51.sig
#評估有多少reads包含進入了各個組裝版本中
sourmash search SRR1976948.reads.scaled10k.k51.sig SRR1976948.megahit.scaled10k.k51.sig --containment 
sourmash search SRR1976948.reads.scaled10k.k51.sig SRR1976948.spades.scaled10k.k51.sig --containment

會看到這樣的結果:

loaded query: SRR1976948.abundtrim.subset.pe... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 48.7%       SRR1976948.megahit.abundtrim.subset.pe.assembly.fa

loaded query: SRR1976948.abundtrim.subset.pe... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 47.5%       SRR1976948.spades.abundtrim.subset.pe.assembly.fa

注意看:SRR1976948.reads.scaled10k.k51.sig來源于reads,而SRR1976948.megahit.scaled10k.k51.sig/SRR1976948.spades.scaled10k.k51.sig來源于組裝版本,也就是說只有大約47-48%的reads在組裝版本的中。

反過來計算呢,可是這些在基因組中99.x%的kmer在reads中,就是組裝版本的kmer幾乎完全來自reads。
這說明了測序錯誤的問題,Illumina 測序的測序錯誤造成了大量的低頻Kmer。

$sourmash search SRR1976948.megahit.scaled10k.k51.sig SRR1976948.reads.scaled10k.k51.sig --containment
$sourmash search SRR1976948.spades.scaled10k.k51.sig SRR1976948.reads.scaled10k.k51.sig  --containment
loaded query: SRR1976948.megahit.abundtrim.s... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 99.8%       SRR1976948.abundtrim.subset.pe.fq.gz

loaded query: SRR1976948.spades.abundtrim.su... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 99.9%       SRR1976948.abundtrim.subset.pe.fq.gz

接下來比較一下signatures
首先安裝osfclient 然后用osfclient下載一批數據

pip install osfclient

osf -p ay94c fetch osfstorage/signatures/SRR1977249.megahit.scaled10k.k51.sig SRR1977249.megahit.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977249.reads.scaled10k.k51.sig SRR1977249.reads.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977249.spades.scaled10k.k51.sig SRR1977249.spades.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.megahit.scaled10k.k51.sig SRR1977296.megahit.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.reads.scaled10k.k51.sig SRR1977296.reads.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.spades.scaled10k.k51.sig SRR1977296.spades.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/subset_assembly.megahit.scaled10k.k51.sig subset_assembly.megahit.scaled10k.k51.sig

接下來對這些“signatures”進行比較

#比較及畫圖
$sourmash compare *sig -o Hu_metagenomes
#生成png圖片
$sourmash plot --labels Hu_metagenomes
#jupyter 可視話
from IPython.display import Image
Image("Hu_metagenomes.matrix.png")

宏基因組分箱(bining)

宏基因組組裝之后的一種常見方法是binning,就是將組裝好的contig分配到組或“容器/箱子(bins)”中的過程,這些組或“容器/箱子”隨后可能被分配到一些分類從屬關系。

在這里將使用MaxBin和MetaBAT。為了使用這些軟件,首先需要使用bwa將數據比對到宏基因上,然后通過contig估計相對豐度。然后,使用VizBin檢查MaxBin和MetaBAT生成的組/容器/箱子。

軟件下載及安裝:

#MaxBin 最新版2.2.5
#下載地址 https://sourceforge.net/projects/maxbin/ 
#需要依賴軟件FragGeneScan idba bowtie2 hmmer 
#MetaBAT 新版2.12.1
#下載地址https://bitbucket.org/berkeleylab/metabat/downloads/
#安裝 看README.txt 略

運行分箱:

MaxBin時間花費更多,因此,在下面分析中,采取犧牲質量來換取速度:

  1. 這個項目的6個數據集只分析兩個,大多數分箱軟件依靠多個樣本分析以提高分箱的準確性,下面操作只抽取兩個數據。
  2. 限制MaxBin的最大化算法迭代次數(本次只迭代5次而不是50次),不過會對分箱質量造成一定影響,然而自己在具體實際做數據分析的時候不可以隨便這么做。
    MaxBin:
    MaxBin會考慮每個contig的read覆蓋度和四核苷酸頻率,以記錄每個bin的標志基因數量
    $ls ~/mapping/*coverage.tab > abundance.list
    $run_MaxBin.pl -contig ~/mapping/subset_assembly.fa -abund_list abundance.list -max_iteration 5 -out mbin
    # coverage.tab文件,這個我在后面的分析中會提到。。

結果會得到一系列*.fasta按數字排列的文件,這就是預測的基因組bins
接著將所有bin文件鏈接起來,將文件名作為序列名

for file in mbin.*.fasta
do
    num=${file//[!0-9]/}
    sed -e "/^>/ s/$/ ${num}/" mbin.$num.fasta >> maxbin_binned.concat.fasta
done

MetaBAT:
這個軟件分箱考慮三個點:測序reads的覆蓋度(read coverage)、覆蓋度差異(coverage variance ),以及四堿基頻率

#統計congtig覆蓋度
ln -fs ~/mapping/*abundtrim*sorted.bam .
#運行
jgi_summarize_bam_contig_depths --outputDepth depth_var.txt *bam
metabat -i subset_assembly.fa -a depth_var.txt --verysensitive -o metabat -v > log.txt
#合并所有bin的結果
for file in metabat.*.fa
  do
    num=${file//[!0-9]/}
   sed -e "/^>/ s/$/ ${num}/" metabat.$num.fa >> metabat_binned.concat.fasta
done
#生成bin編號注釋文件
echo label > metabat_annotation.list
grep ">" metabat_binned.concat.fasta |cut -f2 -d ' '>> metabat_annotation.list

可視化結果:
有了MaxBin, MetaBin 的結果,需要做質量評估,一般用CheckM,還可以用VizBin。
VizBin有 OSX, Linux, Windows 多個版本的,可自行選擇,要求java (>7.0)

用Salmon評估基因豐度

salmon是一款快速轉錄組計數軟件,與Kallisto、Sailfish類似,可以不用通過mapping獲得基因的counts值。Salmon的結果可由edgeR/DESeq2等進行counts值的下游分析。
下面用它來計算預測蛋白質區的相對豐度分布。
軟件安裝與使用:

#最新版 0.12.0 下載地址
https://github.com/COMBINE-lab/salmon/releases/download/v0.12.0/salmon-0.12.0_linux_x86_64.tar.gz

準備文件:需要prokka注釋的結果文件“.ffn”,“.gff”,“.tsv”,以及過濾后的雙端reads文件。ffn文件即cds序列文件。Salmon需要雙端文件在兩個文件里面,也就是 pe1,pe2是當個文件,如果在一個文件里面,可以自己寫腳本拆分,或者用推薦的khmer 中的split-paired-reads.py 處理,可用pip安裝
Salmon建索引:

salmon index -t metagG.ffn -i transcript_index --type quasi -k 31

基于參考序列對reads進行定量:

for file in *.pe.1.fq
do
tail1=.abundtrim.subset.pe.1.fq
tail2=.abundtrim.subset.pe.2.fq
BASE=${file/$tail1/}
salmon quant -i transcript_index --libType IU \
      -1 $BASE$tail1 -2 $BASE$tail2 -o $BASE.quant;
 done

注意:–libType 參數需要在兩個reads文件之前
結果會生成一批以樣本名為開頭的目錄和文件,查看一下文件

find . SRR1976948.quant -type f

每個目錄下的quant.sf 文件就是相對表達信息,文件第一列為轉錄本名稱,第4列為標準化的相對表達值TPM。
下載腳本合并:

curl -L -O https://raw.githubusercontent.com/ngs-docs/2016-metagenomics-sio/master/gather-counts.py
python2 ./gather-counts.py

會生成一系列 .counts 的文件,我只測試了一個樣品:

transcript      count
OGOKDOAG_00001  8.924135
OGOKDOAG_00002  16.883935
OGOKDOAG_00003  4.567547
OGOKDOAG_00004  6.574553
OGOKDOAG_00005  14.630552
OGOKDOAG_00006  2.207686
OGOKDOAG_00007  15.959923

合并所有的counts文件為豐度矩陣 :

for file in *counts
do
   name=${file%%.*}
   sed -e "s/count/$name/g" $file > tmp
   mv tmp $file
done
paste *counts |cut -f 1,2,4 > Combined-counts.tab

結果就得到基因豐度矩陣了

可視化

等待更新.....

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

推薦閱讀更多精彩內容