最近接手了宏基因項(xiàng)目广料,會(huì)在之后接著發(fā)一系列的宏基因組入門教程,學(xué)習(xí)資料大概來(lái)自國(guó)外的教程。
感謝Harriet Alexander, Phil Brooks, C. Titus Brown提供的學(xué)習(xí)資料和數(shù)據(jù)(2017-cicese-metagenomics.readthedocs.io/en/latest/)
數(shù)據(jù)下載及核查:
#開(kāi)個(gè)多線程传透,幾個(gè)可以一起下
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
#結(jié)果應(yīng)該是這樣的
37bc70919a21fccb134ff2fefcda03ce SRR1976948_1.fastq.gz
29919864e4650e633cc409688b9748e2 SRR1976948_2.fastq.gz
ee25ae14f84308f972cebd42e55502dd SRR1977249_1.fastq.gz
84b15b4f5975cd7941e211336ff27993 SRR1977249_2.fastq.gz
# 看看每個(gè)文件的具體情況
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
質(zhì)控
#fastqc 太簡(jiǎn)單 略
#可以試試multiqc耘沼,一次把fastqc的結(jié)果文件做整合
# 下載接頭文件
$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 看上一步質(zhì)控的結(jié)果
MEGAHIT /metaspades組裝
# megahit軟件安裝 有編譯好了的版本
#https://github.com/voutcn/megahit/releases/download/v1.1.4/megahit_v1.1.4_LINUX_CPUONLY_x86_64-bin.tar.gz
#下數(shù)據(jù)
$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
#看看數(shù)據(jù)量
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 &
#文檔里說(shuō)組裝15分鐘朱盐,我花了5分鐘
#文檔里的組裝結(jié)果和我的組裝結(jié)果
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組裝
#花費(fèi)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 &
#組裝結(jié)果 contig
assembly:contigs.fasta
number of contigs/scaffolds:4959
assembly size:12259965
largest contig/scaffold:252026
N50:7937
N90:1533
#其他組裝軟件 Soapdenovo2 IDBA-UD等
總的來(lái)說(shuō)群嗤,spades的組裝結(jié)果是最理想的,但是spades在糾錯(cuò)那步又慢又耗內(nèi)存兵琳,我的機(jī)器內(nèi)存要跑超狂秘,所有先用了其他基于kmer的軟件糾錯(cuò),而不是讓spades糾錯(cuò)闰围,糾錯(cuò)后組裝時(shí)選擇--only-assembler赃绊,效率也可以保證
教程中提到一個(gè)問(wèn)題 Illumina HiSeq, Illumina MiSeq, and PacBio技術(shù)在組裝上有什么需要權(quán)衡注意的呢?
這篇文章給了一些結(jié)論“Accurate, multi-kb reads resolve complex populations and detect rare microorganisms”
這篇文章干了這么幾件事:
a. 測(cè)試了用Moleculo 的reads進(jìn)行組裝羡榴,改善組裝的contig
b. 評(píng)估短reads組裝的準(zhǔn)確性
c. 查看組裝結(jié)果中低豐度的生物
d. 評(píng)估了序列變異和基因組含量水平碧查,這些是短reads測(cè)序沒(méi)辦法解釋的
結(jié)果作者干成了這些事:
a. 長(zhǎng)reads揭示了很多許多非常豐富的生物,這些生物在短reads組裝中完全弄丟的(missed ....)
b. 使用新的共線性方法重建了基因組結(jié)構(gòu)和代謝潛力
c. 低豐度的“l(fā)ong tail”(暫時(shí)還不理解)屬于高豐度生物代表的們
d. 關(guān)系密切的菌株和稀有生物的多樣性占去了群體多樣性的絕大部分
MEGAHIT 和其他幾個(gè)軟件使用時(shí)間和內(nèi)存的比較:
評(píng)估宏基因組組裝結(jié)果
#quast軟件安裝
$quast.py ../combined/final.contigs.fa -o megahit-report
# 下載metaspades組裝的結(jié)果
$ 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的組裝結(jié)果
$paste */report.txt | cut -f1-2, 4
基因組注釋
#prokka安裝
#注釋校仑,沒(méi)啥好說(shuō)的忠售,prokka真的超級(jí)好用
prokka subset_assembly.fa --outdir prokka_annotation --prefix metagG --metagenome --kingdom Bacteria
# prokka可以看已經(jīng)安裝能哪些注釋數(shù)據(jù)庫(kù)
prokka --listdb
# 然后根據(jù)自己情況可自己生成數(shù)據(jù)庫(kù)迄沫,流程是下載需要的蛋白質(zhì)數(shù)據(jù)稻扬、cd-hit去冗余、makeblast建庫(kù)羊瘩、放到prokka db里面去泰佳,注釋的時(shí)候選擇特定的數(shù)據(jù)庫(kù)就可以了
使用sourmash比較數(shù)據(jù)集
教程里面使用的是他們自己開(kāi)發(fā)的sourmash軟件(https://sourmash.readthedocs.io/en/latest/),他們對(duì)它的描述是快速進(jìn)行核酸水平搜索和比較的工具尘吗。
原理是這樣的:Kmer越長(zhǎng)(大于31或更長(zhǎng))逝她,這種kmer更傾向于是物種特異性的,屬水平一般kmer=40就可以鑒定物種特異性的kmer睬捶,如果想到species水平黔宛,Kmer就該是50左右吧。
所以用kmer可以比較基因組和基因組擒贸,一個(gè)reads數(shù)據(jù)集和另一個(gè)reads數(shù)據(jù)集:相似或相同的基因組臀晃,reads數(shù)據(jù)集之間都會(huì)有很多相同點(diǎn)
only k-mers in both samples
----------------------------
all k-mers in either or both samples
Jaccard距離1表示樣本中相同,Jaccard距離0表示樣本間完全不相同介劫。
這樣可以用來(lái)搜索數(shù)據(jù)庫(kù)和數(shù)據(jù)集中未知的基因組和其他東西徽惋,不過(guò)基因組有太多的kmer這才是個(gè)問(wèn)題,比如一個(gè)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
#我沒(méi)有sudo座韵,3.5以前已經(jīng)裝了险绘,pip安裝的時(shí)候自己加了--user
## 下載其他組裝數(shù)據(jù)
$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
##運(yùn)行sourmash
#教程中提到,首先計(jì)算一下reads,這些reads是需要前期過(guò)濾隆圆、kmer修正的
sourmash compute -k51 --scaled 10000 SRR1976948.abundtrim.subset.pe.fq.gz -o SRR1976948.reads.scaled10k.k51.sig
#比較組裝結(jié)果 為宏基因組構(gòu)建“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
#評(píng)估有多少reads包含進(jìn)入了各個(gè)組裝版本中
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
會(huì)看到這樣的結(jié)果:
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來(lái)源于reads漱挚,而SRR1976948.megahit.scaled10k.k51.sig/SRR1976948.spades.scaled10k.k51.sig來(lái)源于組裝版本,也就是說(shuō)只有大約47-48%的reads在組裝版本的中渺氧。
反過(guò)來(lái)計(jì)算呢旨涝,可是這些在基因組中99.x%的kmer在reads中,就是組裝版本的kmer幾乎完全來(lái)自reads侣背。
這說(shuō)明了測(cè)序錯(cuò)誤的問(wèn)題白华,Illumina 測(cè)序的測(cè)序錯(cuò)誤造成了大量的低頻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
接下來(lái)比較一下signatures
首先安裝osfclient 然后用osfclient下載一批數(shù)據(jù)
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
接下來(lái)對(duì)這些“signatures”進(jìn)行比較
#比較及畫(huà)圖
$sourmash compare *sig -o Hu_metagenomes
#生成png圖片
$sourmash plot --labels Hu_metagenomes
#jupyter 可視話
from IPython.display import Image
Image("Hu_metagenomes.matrix.png")
宏基因組分箱(bining)
宏基因組組裝之后的一種常見(jiàn)方法是binning贩耐,就是將組裝好的contig分配到組或“容器/箱子(bins)”中的過(guò)程弧腥,這些組或“容器/箱子”隨后可能被分配到一些分類從屬關(guān)系。
在這里將使用MaxBin和MetaBAT潮太。為了使用這些軟件管搪,首先需要使用bwa將數(shù)據(jù)比對(duì)到宏基因上,然后通過(guò)contig估計(jì)相對(duì)豐度铡买。然后更鲁,使用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 略
運(yùn)行分箱:
MaxBin時(shí)間花費(fèi)更多奇钞,因此澡为,在下面分析中,采取犧牲質(zhì)量來(lái)?yè)Q取速度:
- 這個(gè)項(xiàng)目的6個(gè)數(shù)據(jù)集只分析兩個(gè)景埃,大多數(shù)分箱軟件依靠多個(gè)樣本分析以提高分箱的準(zhǔn)確性媒至,下面操作只抽取兩個(gè)數(shù)據(jù)。
- 限制MaxBin的最大化算法迭代次數(shù)(本次只迭代5次而不是50次)谷徙,不過(guò)會(huì)對(duì)分箱質(zhì)量造成一定影響拒啰,然而自己在具體實(shí)際做數(shù)據(jù)分析的時(shí)候不可以隨便這么做。
MaxBin:
MaxBin會(huì)考慮每個(gè)contig的read覆蓋度和四核苷酸頻率蒂胞,以記錄每個(gè)bin的標(biāo)志基因數(shù)量
$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文件图呢,這個(gè)我在后面的分析中會(huì)提到条篷。骗随。
結(jié)果會(huì)得到一系列*.fasta按數(shù)字排列的文件,這就是預(yù)測(cè)的基因組bins
接著將所有bin文件鏈接起來(lái)赴叹,將文件名作為序列名
for file in mbin.*.fasta
do
num=${file//[!0-9]/}
sed -e "/^>/ s/$/ ${num}/" mbin.$num.fasta >> maxbin_binned.concat.fasta
done
MetaBAT:
這個(gè)軟件分箱考慮三個(gè)點(diǎn):測(cè)序reads的覆蓋度(read coverage)鸿染、覆蓋度差異(coverage variance ),以及四堿基頻率
#統(tǒng)計(jì)congtig覆蓋度
ln -fs ~/mapping/*abundtrim*sorted.bam .
#運(yùn)行
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的結(jié)果
for file in metabat.*.fa
do
num=${file//[!0-9]/}
sed -e "/^>/ s/$/ ${num}/" metabat.$num.fa >> metabat_binned.concat.fasta
done
#生成bin編號(hào)注釋文件
echo label > metabat_annotation.list
grep ">" metabat_binned.concat.fasta |cut -f2 -d ' '>> metabat_annotation.list
可視化結(jié)果:
有了MaxBin, MetaBin 的結(jié)果乞巧,需要做質(zhì)量評(píng)估涨椒,一般用CheckM,還可以用VizBin。
VizBin有 OSX, Linux, Windows 多個(gè)版本的蚕冬,可自行選擇免猾,要求java (>7.0)
用Salmon評(píng)估基因豐度
salmon是一款快速轉(zhuǎn)錄組計(jì)數(shù)軟件,與Kallisto囤热、Sailfish類似猎提,可以不用通過(guò)mapping獲得基因的counts值。Salmon的結(jié)果可由edgeR/DESeq2等進(jìn)行counts值的下游分析旁蔼。
下面用它來(lái)計(jì)算預(yù)測(cè)蛋白質(zhì)區(qū)的相對(duì)豐度分布锨苏。
軟件安裝與使用:
#最新版 0.12.0 下載地址
https://github.com/COMBINE-lab/salmon/releases/download/v0.12.0/salmon-0.12.0_linux_x86_64.tar.gz
準(zhǔn)備文件:需要prokka注釋的結(jié)果文件“.ffn”,“.gff”棺聊,“.tsv”伞租,以及過(guò)濾后的雙端reads文件。ffn文件即cds序列文件限佩。Salmon需要雙端文件在兩個(gè)文件里面葵诈,也就是 pe1,pe2是當(dāng)個(gè)文件,如果在一個(gè)文件里面祟同,可以自己寫(xiě)腳本拆分驯击,或者用推薦的khmer 中的split-paired-reads.py 處理,可用pip安裝
Salmon建索引:
salmon index -t metagG.ffn -i transcript_index --type quasi -k 31
基于參考序列對(duì)reads進(jìn)行定量:
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 參數(shù)需要在兩個(gè)reads文件之前
結(jié)果會(huì)生成一批以樣本名為開(kāi)頭的目錄和文件,查看一下文件
find . SRR1976948.quant -type f
每個(gè)目錄下的quant.sf 文件就是相對(duì)表達(dá)信息耐亏,文件第一列為轉(zhuǎn)錄本名稱徊都,第4列為標(biāo)準(zhǔn)化的相對(duì)表達(dá)值TPM。
下載腳本合并:
curl -L -O https://raw.githubusercontent.com/ngs-docs/2016-metagenomics-sio/master/gather-counts.py
python2 ./gather-counts.py
會(huì)生成一系列 .counts 的文件,我只測(cè)試了一個(gè)樣品:
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
結(jié)果就得到基因豐度矩陣了
可視化
等待更新.....