本次筆記內容:
qiime2-2019.1的16s分析流程,以沒有barcode,以demultiplexed的fastq文件為input.
同微生物組16S rRNA數據分析小結:從fastq測序數據到OTU table類似,主要步驟包括:
- 安裝qiime2-2019.1(沒有詳述)
- import data: import沒有barcode,已經demultiplexed的雙端測序(pair-end)fastq文件。所以這里省略了demux的過程。
- join paire-end及summary: 把雙端測序數據的兩端join在一起
- quality control
- deblur: sOTU
- filter sOTU:
2019.09.18補充
- 各個sOTU的代表序列及系統發育樹的構建
- alpha & beta diversity
- 物種注釋
- 索引
- 總結及幾個注意
安裝qiime2-2019.1
根據https://docs.qiime2.org/2019.1/install/安裝。注意版本,最好下最新版本2019.1.
$ source activate qiime2-2019.1
命令行前面出現(qiime2-2019.1)
import data
無論如何,先把原始數據做fastqc, 結果放進multiQC,看原始數據質量如何,有沒有adapter,參考微生物組16S rRNA數據分析小結:從fastq測序數據到OTU table
qiime2提供各種各樣數據的import方法,詳見import doc. import命令行的主體部分是
(qiime2-2019.1)$ qiime tools import --type 'import數據的類型,qiime提供一系列參數供你選擇'
--input-path 'path/manifest_test'
--output-path 'path/file.qza'
--input-format '參數'`
# qiime tools import --help 看一看,可以先概覽一下有什么是必需的參數有什么是非必需的參數
# 通過以下這行來看--type可用的參數。具體用哪種數據用哪種參數,還是需要google一下或者查詢tutorial.
# $ qiime tools import --show-importable-types
# 以下這行定義的是該輸入的格式,因為這是一個qiime2輸入數據的總入口,其中包括海量的格式,但是這里對于雙端測序的數據的話
# 主要還是PairedEndFastqManifestPhred33 / 64,這里得手動指定33/64的質量分數的類型,我猜后續qiime2應該會補充一個自動檢測的格式
# $ qiime tools import --show-importable-formats
本文中以demultiplexed的fastq文件為例。以下為一部分:
這里有3個樣本,1-1, 1-2, 1-3,每個樣本通過-1/-2來表示forward和reverse序列。所以這是個已經割庫的文件,即已經按照樣本分好了,沒有primer和barcode,它們已經在下機后去掉了。如果手頭的數據有primer和barcode,恐怕需要把barcode分出來單獨作為一個fastq文件,并按照qiime2的格式輸入。
對于已demultiplexed的數據,qiime2要求除了fastq文件,還需要一個manifest文件,txt格式。
注意這里的--input-path
,需要是manifest的file path + file
manifest文件,可以很容易的自己寫一個。一共3列,第一列為sample-ID, 第二列是絕對路徑,如果是conda環境里的路徑需要調整一下。第三列是序列文件對應的是reverse還是forward。格式是這樣:
這里還需要一個--input-format
的參數,一般為PairedEndFastqManifestPhred64
或PairedEndFastqManifestPhred33
. Phred64或33是fastq文件存儲quality score的方法,詳見這里。...如果不知道是哪種,可以都試一試,不對會報錯的。
順便說一下,在之前版本的qiime2中,--input-format
就是--source-format
。
(qiime2-2019.1)$ qiime tools import --type 'SampleData[PairedEndSequencesWithQuality]'
--input-path manifest_test
--output-path ~/project/test/ZL/paired-end-demux_test.qza
--input-format PairedEndFastqManifestPhred33
# 我在這里運行的當前目錄已經是~/project/test/ZL/
# import成功得到:Imported manifest_test as PairedEndFastqManifestPhred33 to /home/cs/project/test/paired-end-demux_test.qza
可以參考以下官方問答:
https://forum.qiime2.org/t/what-if-i-dont-have-the-barcodes-file/576
https://forum.qiime2.org/t/importing-demultiplexed-fastq-data-into-qiime2-2017-7/1064
https://forum.qiime2.org/t/manifest-is-not-a-n-pairedendfastqmanifestphred64-file/7654
import之后,存儲為demux_test.qza
。這個qza格式的文檔可以轉化為.qzv
格式,從而讓你drug and drop迅速又簡單的進行可視化。
# 轉化不同類型的qza為qzv有不同的方法,這里對于單純的序列
(qiime2-2019.1)$ qiime demux summarize --i-data ~/project/test/ZL/paired-end-demux_test.qza --o-visualization ~/project/test/ZL/paired-end-demux_test.qzv
join pair-end及summary
使用qiime2的vsearch接口做join pairs;使用demux summariz將jion好的pair-end序列轉化為.qzv
格式,可以直接可視化查看其join后的長度及質量。
(qiime2-2019.1)$ qiime vsearch join-pairs --i-demultiplexed-seqs paired-end-demux.qza --o-joined-sequences joined.qza
# 類似于上面的可視化
(qiime2-2019.1)$ qiime demux summarize --i-data joined.qza --o-visualization joined.qzv
visualization結果如下:
大多數樣本都有50000以上的測序量,一共有4011555條序列。
在interactive quality plot里,橫軸是一條序列從0到約250+對應的堿基位置,縱軸是每個堿基測序的quality score. 每個位置都有一個箱線圖,表示在這個位置的堿基quality的分布情況(只納入在所有序列中隨機不放回的抽取10000條)。紅色字體表示隨機不放回抽取的10000條序列中,這10000的數量是個默認參數,可以通過demux summarize 中使用--p-n來進行控制
,默認參數和不同的序列長度就直接導致了不是所有的序列都有到這個位置的堿基了,質量可能需要慎重對待。所以這一步是用于了解,join起來的質量有保障的序列大概有多長。官方文檔中是建議記下這個從黑色變成紅色字體的堿基位置(即質量有著明顯差異的位置),在后面deblur的步驟中會用到。
quality control
質控以及質控前后序列數量比較的table的輸出
(qiime2-2019.1)$ qiime quality-filter q-score-joined --i-demux joined.qza
--o-filtered-sequences joined-filtered.qza
--o-filter-stats joined-filtered-stats.qza
(qiime2-2019.1)$ qiime metadata tabulate --m-input-file joined-filtered-stats.qza
--o-visualization joined-filtered-stats.qzv
deblur:sOTU
這里使用deblur用于質控及OTU去噪(OTU denoising) 值得注意的是,denoising而不是clustering,這是為了明顯地區分開傳統的OTU與現在的ASV(amplicon sequence variant)
。注意deblur只接受single-end的序列,如果你把沒有jion的序列傳遞給deblur,它會只處理forward seqs。 deblur在denoising時需要輸入整齊一樣長度的序列,所以需要trim成相同的長度。這里需要用到前面join summary里我們記下來的join起來的質量有保障的序列大概有多長的數值。Deblur的開發者們建議設置一個質量分數開始迅速下降的長度(recommend setting this value to a length where the median quality score begins to drop too low)。于是本例中--p-trim-length
為240。
另外這一步跑得時間可能稍微久一點,10多分鐘。
這一步output為feature table
,代表序列及每個sample的summary。這里feature table類似于之前我們用uparse算法聚類(把有97%相似性的序列聚集在一起成一個OTU,達到去重和聚類的目的)出OTU table類似,但是不論是DADA2還是Deblur, 都可以理解為用100%相似程度來聚類“OTU”,又稱為sequence variants,或者sOTU,在qiime2的文檔中,用ASV進行統一這些各種的叫法。
那么為什么用ASV呢?
首先它比用97%相似程度聚類的“OTU”更加精準,在后續的alpha diversity及物種注釋中會更加準確,因為傳統意義上的OTU的97%的相似程度是在genus水平上大家認可的,但如果需要到species甚至strain水平的話,使用傳統的OTU是很不靠譜的。
另外,ASV相比于OTU最大的好處就是可以隨時合并不同的數據跑出來的代表序列,因為使用的是100%的identidy,所以一樣的序列就是一樣的物種,不會受到不同數據、測序平臺、文庫建立、處理方法等等的誤差影響。所以在qiime2中,它甚至不使用OTU或者ASV來命名,而是直接以一個基于字符串計算的哈希碼來進行命名序列,這樣子,只要是qiime2上跑出來的數據,即使是不同時間不同人的結果,也可以直接合并,甚至不需要接觸到原始的測序數據,也大大方便了大數據之間的整合。
所以現在也越來越多的人倡導使用ASV以避免數據不可合并和難以合并的缺點。
當然了ASV不是只有好處,除了算法上的差異以外,該有的batch effect它也會遇到,不過那就是另外一個話題了。這里不加討論。
利用--o-visualization
將它們可視化在viewer平臺上。同時生成了一個deblur的summary文件,可以查看原始reads數目,重復reads數目,嵌合體數目等細節。
(qiime2-2019.1)$ qiime deblur denoise-16S --i-demultiplexed-seqs joined-filtered.qza
--p-trim-length 240
--o-representative-sequences rep-seqs.qza
--o-table table.qza
--p-sample-stats
--o-stats deblur-stats.qza
(qiime2-2019.1)$ qiime deblur visualize-stats --i-deblur-stats deblur-stats.qza
--o-visualization deblur-stats.qzv # 可視化結果如下圖所示
(qiime2-2019.1)$ qiime feature-table summarize --i-table table.qza
--o-visualization table.qzv
--m-sample-metadata-file meta_11.16.tsv
注意生成的這個table.qzv,我們需要通過它來了解,在測序深度選擇多少合適。樣本的分組是按照--m-sample-metadata-file來決定的,你也可以不設置meta data,output出所有的樣本。調節左側的sampling depth,了解在此測序深度下,有多少不夠該深度的樣本會被去掉(變成灰色的部分)。
filter sOTU
可以通過qiime feature-table filter-features
來Filter sOTU table. 但是根據一則官方問答,“I don’t consider filtering features to be an essential step, especially given how well the modern denoisers (such as DADA2 and Deblur) work. ”官方似乎認為deblur和dada2得到的sOTU都是100%相度得到的,不必再做其它的過濾。但是也可以通過如下方式進行過濾:
When I do filter features, (a) by requiring them to show up in some minimum number of samples, or (b) if they don’t achieve some minimum level of taxonomy assignment.”
- 一個feature中必須在n個samples中出現(即--p-min-samples),n為一個較小的數字,比方說2。以此過濾掉在極少樣本中出現的features。
- 根據
qiime taxa filter-table
來過濾,比方說過濾掉連pylumn都沒有assign上的sOTU
各個sOTU的代表序列及系統發育樹的構建
rep-seqs.qzv
其實就是每個sOTU的序列內容,點擊其序列連接可以直接blast,十分方便。rooted tree在后續的alpha diversity中可能會用到(如果需要計算PD value)。
(qiime2-2019.1)$ qiime feature-table tabulate-seqs --i-data rep-seqs.qza
--o-visualization rep-seqs.qzv
(qiime2-2019.1)$ qiime alignment mafft --i-sequences rep-seqs.qza
--o-alignment aligned-rep-seqs.qza
(qiime2-2019.1)$ qiime alignment mask --i-alignment aligned-rep-seqs.qza
--o-masked-alignment masked-aligned-rep-seqs.qza
(qiime2-2019.1)$ qiime phylogeny fasttree --i-alignment masked-aligned-rep-seqs.qza
--o-tree unrooted-tree.qza
(qiime2-2019.1)$ qiime phylogeny midpoint-root --i-tree unrooted-tree.qza
--o-rooted-tree rooted-tree.qza
或者
(qiime2-2019.1)$ qiime phylogeny align-to-tree-mafft-fasttree --i-sequences masked-aligned-rep-seqs.qza
--p-n-threads 0
--output-dir masked-aligned-rep-aligned
# 注意這里的output-dir,其實很多命令都可以直接指定目錄名而不用一一指定每個文件名。
# 另外這里的0代表所有threads,但qiime2似乎還有點問題,有的命令是用-1代表所有threads,需要注意
alpha & beta diversity
生成rarefaction curve,需要設置一個--p-max-depth
參數,即在構建rarefaction curve時重新采樣序列數目的最大值。一般來說比Maximum number of reads per sample/group小即可。在table.qzv
里可以了解到。
關于rarefaction curve不懂的地方可以參考alpha diversity分析方法
(qiime2-2019.1)$ qiime diversity core-metrics-phylogenetic --i-phylogeny rooted-tree.qza
--i-table table.qza
--p-sampling-depth 18899
--m-metadata-file meta_11.16.tsv
--output-dir metrics
# 這里有生成13個qza和5個qzv
(qiime2-2019.1)$ qiime diversity alpha-rarefaction --i-table table.qza
--p-max-depth 20000
--i-phylogeny rooted-tree.qza
--m-metadata-file meta_11.16.tsv
--o-visualization rare.qzv
# 用以下兩個命令可以根據metrics中的各項diversity table制圖,并判斷significance levels。
# (不截圖了,真的很丑,建議自己畫)
(qiime2-2019.1)$ qiime diversity alpha-group-significance --i-alpha-diversity metrics/faith_pd_vector.qza
--m-metadata-file meta_11.16.tsv
--o-visualization metrics/faith_pd_group_sig.qzv
(qiime2-2019.1)$ qiime emperor plot --i-pcoa metrics/weighted_unifrac_pcoa_results.qza
--m-metadata-file meta_11.16.tsv
--o-visualization metrics/weighted_unifrac_emperor.qzv
# 生成rarefaction curve.這里是按照meta data分組的,如果想看所有samples的,則去掉--m-metadata-file即可
# 還挺快的
(qiime2-2019.1)$ qiime diversity alpha-rarefaction --i-table table.qza
--p-max-depth 36000 # 要根據table.qzv判斷
--i-phylogeny rooted-tree.qza
--m-metadata-file meta_11.16.tsv
--o-visualization rare.qzv
結果是這樣:
rarefaction curve可以選擇根據各種不同alpha多樣性指數,不同分組選擇各種結果。
物種注釋
qiime2中的物種注釋給了user更大的自主權,可以下載用于比對的數據庫,并提供3種不同的方法(兩種alignment-based的方法和一種基于naive-bayes的方法),自己train一個classifer用于物種分類,也可以下載并使用官方已經train好的(pre-trained)classifer。
不過一般推薦的還是使用基于naive-bayes的方法,之前的rdp、usearch的也是基于這個的方法。
本例中使用官方已經train好的classifergg-13-8-99-nb-classifier.qza
(greengene),可以在官網上下載。
需要注意的是,常用的16s數據庫有rdp、greengene、Silver,官網只可以下載后兩個的,如果需要跟之前的數據進行合并genus,需要注意。另外即使測序測的是V3V4,也可以選擇16s全長的數據庫進行訓練,對結果并沒有什么影響(naive-bayes based method)。
(qiime2-2019.1)$ qiime feature-classifier classify-sklearn --i-classifier gg-13-8-99-nb-classifier.qza
--i-reads rep-seqs.qza
--o-classification taxonomy.qza
(qiime2-2019.1)$ qiime metadata tabulate --m-input-file taxonomy.qza
--o-visualization taxonomy.qzv
# 這是一個可以觀察物種組成(優勢物種)的bar圖,可以選擇不同的物種levels繪制。
(qiime2-2019.1)$ qiime taxa barplot --i-table table.qza
--m-metadata-file meta_11.16.tsv
--i-taxonomy taxonomy.qza
--o-visualization taxa-bar.qzv
結果是這樣,表格都可以下載下來。
索引
由于官方文檔太龐大,強行看很難下手。所以做個連接索引:
可視化地點:drag and drop
https://view.qiime2.org/
整個流程的tutorial,是個PPT,條理清楚。跟著跑一遍沒毛病,比官方文檔高效。
http://compbio.ucsd.edu/wp-content/uploads/2018/07/20180621_oslo_university_microbiome_analysis_with_qiime2_tutorial.pdf
官網流程連接
https://docs.qiime2.org/2019.1/tutorials/qiime2-for-experienced-microbiome-researchers/#data-processing-steps
import tutorial: 包括如何將已經割庫的fastq導入
https://docs.qiime2.org/2019.1/tutorials/importing/
(對使用pair-end seqs的user來說,詳細又重要)merge tutorial: 將pair-end序列的forward和reverse join在一起
https://docs.qiime2.org/2019.1/tutorials/read-joining/
filter table:
https://docs.qiime2.org/2019.1/tutorials/filtering/
物種注釋reference庫
https://docs.qiime2.org/2019.1/data-resources/#marker-gene-reference-databases
pre-trained classifier在這里下載
https://docs.qiime2.org/2019.1/data-resources/
train classifier或使用pre-trained classifer做物種注釋的tutorial
https://docs.qiime2.org/2019.1/tutorials/feature-classifier/
meta data的格式(mapping file):
https://docs.qiime2.org/2019.1/tutorials/metadata/
如下所示:
如何根據metadata filtering samples(選擇樣本)
https://docs.qiime2.org/2019.1/tutorials/filtering/
官網tutorial大目錄
https://docs.qiime2.org/2019.1/tutorials/
總結及幾個注意
在import過程中報錯,首先考慮是不是import的文件格式不對。qiime2對input的格式有嚴格且詳細的要求,具體查詢其tutorial文檔。
.qva格式的文件,本質上是個zip包。比方說這個OTU table。把table.qza打開,進入data文件夾,就可以找到biom格式的OTU table.
所以.qva和readable file之間的轉化如下所示:
可以參考 https://forum.qiime2.org/t/importing-csv-to-qza/3920. 另外 Artifact API也有提供和定義了很多轉化的方法。但現在qiime2目前為止還沒很好的寫完這個部分,我們這里不細講
本次筆記中是在quality control之前join了pair end seqs, 并使用deblur來做quality control。如果要使用DADA2來做質控,則不需要事先join, DADA2會在流程中join并做質控。
使用DADA2詳見:https://docs.qiime2.org/2019.1/tutorials/atacama-soils/當然你也可以不用DADA2和Deblur來生成sOTU, 像qiime1那樣使用Uparse等算法生成的OTU,詳見join-pair的tutorial
分析圖表里rarefaction curve和物種構成的bar圖還不錯,其他的boxplot之類的最好還是根據研究需求自己畫吧,畢竟也沒法加上significant levels等。
另外物種注釋好之后,對各物種levels的差異性分析(挑選marker物種),qiime2給出了與傳統統計學方法(如t-test, anova)不同的ANCOM(Analysis of Composition of Microbiomes)。由于物種表格是“compositional”的,即每個樣本由多個物種組成,且每個樣本的sOTU數目是大致相同的(在前階段分析中已經normalize),并不符合傳統統計方法要求的符合正態分布,滿足方差齊性等(...那你可以用非參數性檢驗啊..=_=)。于是就有了專門針對微生物物種構成差異性的統計檢驗方法。這個方法要求最好去掉在samples中及其少見的物種,variance極低的物種,在所有樣本中,包含reads數極低的物種。而且不能出現0。詳見索引中的PPT tutorial.
qiime2有個非常棒的功能:provenance. 本質上是個一目了然的log。每個以qzv為擴展名的文件,都有這樣一個頁面,通過流程圖記錄這個文件是怎么來的——從原始數據import進來開始。流程圖的末端就是當前.qzv文件本身。
比方說以下這個table.qzv
,是sOTU table.
- 點擊方塊顯示action details, 告訴你這個節點的數據是通過什么操作得到的,input和output的數據類型(format)是什么。注意這個 format,與import命令中的type參數用的是同一個數據類型代號。以及用到了什么插件,各項版本信息等。方便記錄每一步用到的參數,方便debug。
- 點擊圓圈看到這個節點數據的信息。
- 在Action Details 中也有python-packages的版本信息以方便不同結果之間的debug。
- Viewer可以方便并不使用qiime2來分析數據,但是需要把握結果的人(比方說你的老板)。把一個.qzv文件直接拖進Viewer的web端,不僅可以直接可視化,還能通過Provenance了解這個文件是怎么來的,中間數據都有什么,使用了什么參數等。
附本次筆記的版本信息(通過qiime info
得到):
System versions
Python version: 3.6.7
QIIME 2 release: 2019.1
QIIME 2 version: 2019.1.0
q2cli version: 2019.1.0
Installed plugins
alignment: 2019.1.0
composition: 2019.1.0
cutadapt: 2019.1.0
dada2: 2019.1.0
deblur: 2019.1.0
demux: 2019.1.0
diversity: 2019.1.0
emperor: 2019.1.0
feature-classifier: 2019.1.0
feature-table: 2019.1.0
fragment-insertion: 2019.1.0
gneiss: 2019.1.0
longitudinal: 2019.1.0
metadata: 2019.1.0
phylogeny: 2019.1.0
quality-control: 2019.1.0
quality-filter: 2019.1.0
sample-classifier: 2019.1.0
taxa: 2019.1.0
types: 2019.1.0
vsearch: 2019.1.0