內部培訓資料(2022.10.29)
QIIME 2分析實例--人類腸癌不同部位微生物多樣性分析
“Moving Pictures” tutorial
熊金波實驗室出品 ??????內部交流培訓使用
寧波大學海洋學院 Larry 陸
本節1.6萬字,14張圖。閱讀時間大約50分鐘。
在本次分享中,我們將使用QIIME2軟件進行微生物數據分析。在五個時間點對來自兩個人四個身體部位的微生物組樣本進行分析,第一個時間點取樣之后使用了抗生素處理。基于這批數據的研究可以參考2011年發表在Genome Biology的《Moving pictures of the human microbiome》(10分+的文章哦)。本次分享將會完整完成文章中的所有擴增子數據分析。本教程中使用的數據基于Illumina HiSeq產出,使用地球微生物組計劃擴增16S rRNA基因高變區4(V4)測序的方法。
安裝
Qiime一直以來被詬病最多的就是非常難以安裝,目前據我了解有三種主流安裝方法,根據環境任選其一即可,實際的安裝涉及到服務器運維工作,與我們實驗室日常工作相關性不大,所以此處不做過多介紹。我們205實驗室的的T430服務器和Biostar服務器都會部署好QIIME1代和2代,可以直接使用。如果對于個人PC有安裝需求的同學,可以以后向我了解相關材料。
啟動QIIME2運行環境
我們在服務器上進行生物信息數據分析的時候非常重要的就是有良好的運行環境習慣,有了良好的環境管理習慣可以避免大量報錯和數據分析問題。
我們在每次分析開始前,必須先進入工作目錄,除非你是一個把什么東西都放在桌面上還很工作更有效率的人??。
# 定義工作目錄變量,方便以后多次使用
wd=~/github/QIIME2ChineseManual/2019.7
mkdir -p $wd
# 進入工作目錄,是不是很簡介,這樣無論你在什么位置就可以快速回到項目文件夾
cd $wd
# 方法1\. 進入QIIME 2 conda工作環境
conda activate qiime2-2019.7
# 這時我們的命令行前面出現 (qiime2-2019.7) 表示成功進入工作環境
# 方法2\. conda版本較老用戶,使用source進入QIIME 2
source activate qiime2-2019.7
# 方法3\. 如果是docker安裝的請運行如下命令,默認加載當前目錄至/data目錄
docker run --rm -v $(pwd):/data --name=qiime -it qiime2/core:2019.7
# 創建本節學習目錄
mkdir qiime2-moving-pictures-tutorial
cd qiime2-moving-pictures-tutorial
激活分析環境
qiime2
創建個人文件夾
mkdir -p larry
首先獲取分析的數據
cp -r raw-data larry
cp TruSeq3-PE.fa larry
首先獲取分析樣本元數據信息表格
cp mapping_file.txt larry
正式開始分析數據要先對數據進行指控流程
激活軟件所在的環境
cd larry
conda activate /biostack/bioconda
創建質控文件夾
mkdir -p data_analysis/trimming/reads
參數解析 :
使用 [trimmomatic](http://www.usadellab.org/cms/?page=trimmomatic) 去除拆分序列中可能可能存在的接頭和切掉低質量的堿基, 針對一些小片段擴增產物,測序數據可能包含接頭序列。
命令模式: SE指定單端數據 ,PE指定雙端數據,對于PE模式: 2個輸入文件(正向和反向reads)和4個輸出文件(正向配對、正向未配對、反向配對和反向未配對)
threads: 設定線程數
phred<qual>: 設定堿基質量編碼模式,兩種模式 `-phred33` 或 `-phred64`, 如果未指定質量編碼,則將自動識別, `fastq` 質量值編碼可以參考:[https://wiki.bits.vib.be/index.php/FASTQ](https://wiki.bits.vib.be/index.php/FASTQ)
ILUMINACLIP:<fastaWithAdaptersEtc>:<seed mismatches>:<palindrome clip threshold>:<simple clip threshold>:<minAdapterLength>:<keepBothReads>: 該步驟用于尋找并去除Illumina接頭
<fastaWithAdaptersEtc1>: 指定包含所有接頭、PCR序列等的fasta文件的路徑;
<seed mismatches>: 指定允許執行完全匹配的最大不匹配數;
<palindrome clip threshold>:指定兩個成對接頭reads之間的匹配對于雙端回文read比對的精度;
<Simple clip threshold>: 指定任何接頭等序列與read之間的匹配精度閾值;
<minAdapterLength>: 設定接頭的最小長度。如果未指定,默認為8個bp;
<keepBothReads>: 在回文模式檢測到read測穿并刪除接頭序列后,反向讀取包含與正向讀取相同的序列信息。因此,默認行為是完全刪除反向讀取。通過為該參數指定true,反向讀取也將被保留
SLIDINGWINDOW:<windowSize>:<requiredQuality>: 滑窗修剪, 它從5'端開始掃描,當窗口內的平均質量低于閾值時,剔除該窗口內的所有堿基;
<windowSize>: 設定窗口大小, 覆蓋堿基數量;
<requiredQuality>: 設定平均質量。
HEADCROP:<length> :切除read起始端低于閾值的堿基
<length> 從`read` 起始端開始要切除的長度
TRAILING:<quality>:從末端移除低質量的堿基。只要堿基的質量值低于閾值,則切除該堿基,并調查下一個堿基(因為Trimmomatic從3'primeend開始,將是位于剛切除堿基之前的堿基)。 此方法可用于去除Illumina低質量段區域(質量分數標記為2),
<quality>: 指定保留堿基所需的最低質量
MINLEN:<length>: 設置保留reads的最小長度。
<length>:可被保留的最短 read 長度。
trimmomatic PE -threads 4 -phred33 \
raw-data/A1_1.fastq \
raw-data/A1_2.fastq \
data_analysis/trimming/reads/A1_1.fastq \
data_analysis/trimming/reads/A1_1.singleton.fastq \
data_analysis/trimming/reads/A1_2.fastq \
data_analysis/trimming/reads/A1_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
trimmomatic PE -threads 4 -phred33 \
raw-data/A2_1.fastq \
raw-data/A2_2.fastq \
data_analysis/trimming/reads/A2_1.fastq \
data_analysis/trimming/reads/A2_1.singleton.fastq \
data_analysis/trimming/reads/A2_2.fastq \
data_analysis/trimming/reads/A2_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
trimmomatic PE -threads 4 -phred33 \
raw-data/D1_1.fastq \
raw-data/D1_2.fastq \
data_analysis/trimming/reads/D1_1.fastq \
data_analysis/trimming/reads/D1_1.singleton.fastq \
data_analysis/trimming/reads/D1_2.fastq \
data_analysis/trimming/reads/D1_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
trimmomatic PE -threads 4 -phred33 \
raw-data/D2_1.fastq \
raw-data/D2_2.fastq \
data_analysis/trimming/reads/D2_1.fastq \
data_analysis/trimming/reads/D2_1.singleton.fastq \
data_analysis/trimming/reads/D2_2.fastq \
data_analysis/trimming/reads/D2_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3
trimmomatic PE -threads 4 -phred33 \
raw-data/H1_1.fastq \
raw-data/H1_2.fastq \
data_analysis/trimming/reads/H1_1.fastq \
data_analysis/trimming/reads/H1_1.singleton.fastq \
data_analysis/trimming/reads/H1_2.fastq \
data_analysis/trimming/reads/H1_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
trimmomatic PE -threads 4 -phred33 \
raw-data/H2_1.fastq \
raw-data/H2_2.fastq \
data_analysis/trimming/reads/H2_1.fastq \
data_analysis/trimming/reads/H2_1.singleton.fastq \
data_analysis/trimming/reads/H2_2.fastq \
data_analysis/trimming/reads/H2_2.singleton.fastq \
ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
將雙端數據進行合并
創建目錄 :
mkdir -p data_analysis/mergepairs/reads
合并雙端序列 :
使用usearch
[-fastq_mergepairs] 命令合并A1
的雙端序列,并輸出結果到data_analysis/mergepairs/reads/
目錄下:
usearch -fastq_mergepairs
參數解析
-fastq_mergepairs 正向FASTQ文件名(輸入)
-reverse 反向FASTQ文件名(輸入)
-fastqout 合并后的FASTQ文件名(輸出)
-fastqout_notmerged_fwd 未合并的正向序列FASTQ文件名(輸出)
-fastqout_notmerged_rev 未合并的反向序列FASTQ文件名(輸出)
-log log文件名(輸出)
-report 總結報告文件名(輸出)
-threads 線程數
-fastq_minmergelen 合并序列的最小長度
-fastq_maxmergelen 合并序列的最大長度
-fastq_maxdiffs 最大錯配數,默認為5
-fastq_pctid 最小序列質量,默認為90%
-fastq_minovlen 合并后的序列如果低于指定值則過濾,默認為16
-fastq_trunctail 在第一個小于指定Q值處截斷序列,默認為
-fastq_minlen 如果-fastq_trunctail截斷后的序列小于指定值,則過濾掉序列
usearch -fastq_mergepairs data_analysis/trimming/reads/A1_1.fastq \
-reverse data_analysis/trimming/reads/A1_2.fastq \
-fastqout data_analysis/mergepairs/reads/A1.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/A1.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/A1.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/A1.log \
-report data_analysis/mergepairs/reads/A1.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
usearch -fastq_mergepairs data_analysis/trimming/reads/A2_1.fastq \
-reverse data_analysis/trimming/reads/A2_2.fastq \
-fastqout data_analysis/mergepairs/reads/A2.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/A2.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/A2.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/A2.log \
-report data_analysis/mergepairs/reads/A2.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
usearch -fastq_mergepairs data_analysis/trimming/reads/D1_1.fastq \
-reverse data_analysis/trimming/reads/D1_2.fastq \
-fastqout data_analysis/mergepairs/reads/D1.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/D1.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/D1.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/D1.log \
-report data_analysis/mergepairs/reads/D1.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
usearch -fastq_mergepairs data_analysis/trimming/reads/D2_1.fastq \
-reverse data_analysis/trimming/reads/D2_2.fastq \
-fastqout data_analysis/mergepairs/reads/D2.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/D2.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/D2.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/D2.log \
-report data_analysis/mergepairs/reads/D2.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
usearch -fastq_mergepairs data_analysis/trimming/reads/H1_1.fastq \
-reverse data_analysis/trimming/reads/H1_2.fastq \
-fastqout data_analysis/mergepairs/reads/H1.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/H1.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/H1.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/H1.log \
-report data_analysis/mergepairs/reads/H1.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
usearch -fastq_mergepairs data_analysis/trimming/reads/H2_1.fastq \
-reverse data_analysis/trimming/reads/H2_2.fastq \
-fastqout data_analysis/mergepairs/reads/H2.fastq \
-fastqout_notmerged_fwd data_analysis/mergepairs/reads/H2.notmerged_fwd.fastq \
-fastqout_notmerged_rev data_analysis/mergepairs/reads/H2.notmerged_rev.fastq \
-log data_analysis/mergepairs/reads/H2.log \
-report data_analysis/mergepairs/reads/H2.report \
-threads 1 \
-fastq_minmergelen 250 \
-fastq_maxmergelen 500 \
-fastq_maxdiffs 10 \
-fastq_pctid 90 \
-fastq_minovlen 16 \
-fastq_trunctail 2 \
-fastq_minlen 64
** 統計序列信息 :**
使用atlas-utils
[fqchk] 統計序列質量
cat data_analysis/mergepairs/reads/A1.fastq \
|atlas-utils \
fqchk -q 33 -l A1 \
- >data_analysis/mergepairs/reads/A1.txt
cat data_analysis/mergepairs/reads/A2.fastq \
|atlas-utils \
fqchk -q 33 -l A2 \
- >data_analysis/mergepairs/reads/A2.txt
cat data_analysis/mergepairs/reads/D1.fastq \
|atlas-utils \
fqchk -q 33 -l D1 \
- >data_analysis/mergepairs/reads/D1.txt
cat data_analysis/mergepairs/reads/D2.fastq \
|atlas-utils \
fqchk -q 33 -l D2 \
- >data_analysis/mergepairs/reads/D2.txt
cat data_analysis/mergepairs/reads/H1.fastq \
|atlas-utils \
fqchk -q 33 -l H1 \
- >data_analysis/mergepairs/reads/H1.txt
cat data_analysis/mergepairs/reads/H2.fastq \
|atlas-utils \
fqchk -q 33 -l H2 \
- >data_analysis/mergepairs/reads/H2.txt
統計信息 :
合并所有mergepairs/reads/
目錄下后綴為.txt
的文件并傳遞給tsv-utils
view 去除中間的注釋行, 使用usearch-utils mergepairs
統計log
文件
mkdir -p data_analysis/mergepairs/report
cat data_analysis/mergepairs/reads/*.txt | tsv-utils view - >data_analysis/mergepairs/report/sequencing.stats.txt
比對引物信息并去除
創建引物信息目錄
mkdir -p data_analysis/primer_strip/reads
usearch -search_pcr2 data_analysis/mergepairs/reads/A1.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/A1.txt \
-fastqout data_analysis/primer_strip/reads/A1.fastq \
-log data_analysis/primer_strip/reads/A1.log
usearch -search_pcr2 data_analysis/mergepairs/reads/A2.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/A2.txt \
-fastqout data_analysis/primer_strip/reads/A2.fastq \
-log data_analysis/primer_strip/reads/A2.log
usearch -search_pcr2 data_analysis/mergepairs/reads/D1.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/D1.txt \
-fastqout data_analysis/primer_strip/reads/D1.fastq \
-log data_analysis/primer_strip/reads/D1.log
usearch -search_pcr2 data_analysis/mergepairs/reads/H1.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/H1.txt \
-fastqout data_analysis/primer_strip/reads/H1.fastq \
-log data_analysis/primer_strip/reads/H1.log
usearch -search_pcr2 data_analysis/mergepairs/reads/D2.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/D2.txt \
-fastqout data_analysis/primer_strip/reads/D2.fastq \
-log data_analysis/primer_strip/reads/D2.log
usearch -search_pcr2 data_analysis/mergepairs/reads/H2.fastq \
-fwdprimer ACTCCTACGGGAGGCAGCA \
-revprimer GGACTACHVGGGTWTCTAAT \
-minamp 250 \
-maxamp 480 \
-strand both -maxdiffs 2 \
-tabbedout data_analysis/primer_strip/reads/H2.txt \
-fastqout data_analysis/primer_strip/reads/H2.fastq \
-log data_analysis/primer_strip/reads/H2.log
導入數據
首先需要構建數據信息表格
mkdir -p data_analysis/dada2/report
mkdir -p data_analysis/dada2/qza/
用于輸入到QIIME 2的所有數據都以QIIME 2對象的形式出現,其中包含有關數據類型和數據源的信息。因此,我們需要做的第一件事是將這些序列數據文件導入到QIIME 2對象中。
開始導入數據
qiim-utils manifest mapping_file.txt \
/project/qiime-tk/larry/data_analysis/primer_strip/reads \
> data_analysis/dada2/report/manifest.txt
這個QIIME 2對象的語義類型是SequencesWithQuality
。 QIIME 對象SequencesWithQuality
是帶有質量序列的樣本,。要導入其他格式的序列數據,請參閱導入數據教程。
time qiime tools import --type 'SampleData[SequencesWithQuality]' \
--input-path data_analysis/dada2/report/manifest.txt \
--output-path data_analysis/dada2/qza/demux.qza \
--input-format SingleEndFastqManifestPhred33V2
結果統計
time qiime demux summarize \
--i-data data_analysis/dada2/qza/demux.qza \
--o-visualization data_analysis/dada2/qza/demux.qzv
2019.7.4.01.jpg918×1877](http://bailab.genetics.ac.cn/markdown/qiime2/fig/2019.7.4.01.jpg "2019.7.4.01.jpg")
圖1. 樣本拆分結果統計結果——樣本數據量可視化圖表。
主要分為三部分:上部為摘要;中部為樣本不同數據量分布頻率柱狀圖,可下載PDF,下部為每個樣本的測序量。上方面板還可切換至交互式質量圖Interactive Qaulity Plot
頁面。如下圖2。(此處再次點贊??QIIME 2的強大交互性,幾乎所有的可視化文件都可以最快速度最低成本形成發表級可視化文件,大大節約時間)
2019.7.4.02.gif838×1412](http://bailab.genetics.ac.cn/markdown/qiime2/fig/2019.7.4.02.gif "2019.7.4.02.gif")
圖2. 交互式質量圖Interactive Qaulity Plot
查看頁面。
同樣為三部分:上部為每個位置堿基的質量分布交互式箱線圖,鼠標懸停在上面,即可在下面(中部)文字和表格中顯示鼠標所在位置堿基質量的詳細信息;下部為拆分樣本的長度摘要(一般等長測序無差別)。
qiime tools view demux.qzv
直接在服務器操作的話可以直接利用這條命令可視化,這條命令的顯示需要圖形界面的支持,如在有圖型界面的Linux上,但僅使用SSH登陸方式無法顯示圖形。
版本區別提示:相比QIIME 1.9.1
在QIIME 1.9.1中,我們一般建議通過QIIME執行樣本拆分(例如,使用split_libraries.py
或split_libraries_fastq.py
這兩個腳本),因為這個步驟還執行序列的質量控制??。現在我們將樣本拆分和質量控制步驟分開,因此你可以使用混合多樣本序列(如我們在此所做的)或拆分后的序列開始QIIME 2分析。
在樣本拆分之后,生成拆分結果的統計信息非常重要。統計結果允許我們確定每個樣本獲得多少序列,并且還可以獲得序列數據中每個位置處序列質量分布的摘要。
推薦使用 https://view.qiime2.org 網址顯示結果
可選使用XShell+XManager支持SSH方式的圖型界面、虛擬機圖形界面下或服務器遠程桌面方式支持上面命令的圖形結果。我們上學期的Linux相關知識介紹里面有講到過這個相關知識。以后有機會的話,會在宏基因組流程化數據分析里面再講一下。
目前命令行方式想要查看結果可能很多使用服務器人員無法實現 (即依賴服務器安裝了桌面,本地依賴XShell+XManager或其它ssh終端和圖形界面軟件)
本地查看可解壓.qzv
,目錄中的data目錄包括詳細的圖表文件,主要關注 pdf 和 html 文件,目錄結構如下。
── demux
└── 8743ab13-72ca-4adf-9b6c-d97e2dbe8ee3
├── checksums.md5
├── data
│ ├── data.jsonp
│ ├── demultiplex-summary.pdf
│ ├── demultiplex-summary.png
│ ├── dist
│ │ ├── bundle.js
│ │ ├── d3-license.txt
│ │ └── vendor.bundle.js
│ ├── forward-seven-number-summaries.csv
│ ├── index.html
│ ├── overview.html
│ ├── per-sample-fastq-counts.csv
│ ├── q2templateassets
│ │ ├── css
│ │ │ ├── bootstrap.min.css
│ │ │ ├── normalize.css
│ │ │ └── tab-parent.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ └── glyphicons-halflings-regular.woff2
│ │ ├── img
│ │ │ └── qiime2-rect-200.png
│ │ └── js
│ │ ├── bootstrap.min.js
│ │ ├── child.js
│ │ ├── jquery-3.2.0.min.js
│ │ └── parent.js
│ └── quality-plot.html
├── metadata.yaml
├── provenance
│ ├── action
│ │ └── action.yaml
│ ├── artifacts
│ │ ├── 9594ef07-c414-4658-9345-c726de100d8d
│ │ │ ├── action
│ │ │ │ └── action.yaml
│ │ │ ├── citations.bib
│ │ │ ├── metadata.yaml
│ │ │ └── VERSION
│ │ └── a7a882f3-5e4f-4b5e-8a35-6a1098d21608
│ │ ├── action
│ │ │ ├── action.yaml
│ │ │ └── barcodes.tsv
│ │ ├── citations.bib
│ │ ├── metadata.yaml
│ │ └── VERSION
│ ├── citations.bib
│ ├── metadata.yaml
│ └── VERSION
└── VERSION
qzv文件解壓后文件詳細,可直接訪問data/index.html
打開結果報告式網頁。里面的重要結果,全部可以通過此網頁進行索引。總而言之最重要的文件其實就是pdf格式文件和html格式文件,這集中文件是我們日常工作中真正會使用到的文件。
序列質控和生成特征表
Sequence quality control and feature table construction
QIIME 2插件多種質量控制方法可選,包括DADA2、Deblur和基于基本質量分數的過濾。在本教程中,我們使用DADA2和Deblur兩種方法分別介紹這個步驟。這些步驟是可互相替換的,因此你可以使用自己喜歡的方法。這兩種方法的結果將是一個QIIME 2特征表FeatureTable[Frequency]
和一個代表性序列FeatureData[Sequence]
對象,Frequency
對象包含數據集中每個樣本中每個唯一序列的計數(頻率),Sequence
對象將FeatureTable
中的特征ID與序列對應。
提醒?:此步主要有DADA2和Deblur兩種方法可選,推薦使用DADA2,2016年發表在Nature Method上,在陰道菌群研究中比OTU聚類結果看到更多細節;相較USEARCH的UPARSE算法,目前DADA2方法僅去噪去嵌合,不再按相似度聚類,結果與真實物種的序列更接近。
注意??:本節中此次存在兩種可選方法時,將創建具有特定方法名稱的對象(例如,使用dada2去噪生成的特性表將被稱為
table.qza
)。在創建這些對象之后,你將把兩個選項之一的對象重命名為更通用的文件名(例如,table.qza
)。為對象創建特定名稱,然后對其進行重命名的過程僅允許你選擇在本步驟中使用的兩個選項中之一完成案例,而不必再次關注該選項。需要注意的是,在這個步驟或QIIME 2中的任何步驟中,你給對象或可視化的文件命名并不重要。
方法1. DADA2
Option 1: DADA2
DADA2是用于檢測和校正(如果有可能的話)Illumina擴增序列數據的工作流程。正如在q2-dada2
插件中實現的,這個質量控制過程將過濾掉在測序數據中鑒定的任何phiX
序列(通常存在于標記基因Illumina測序數據中,用于提高擴增子測序質量),并同時過濾嵌合序列。
DADA2是Susan P. Holmes團隊于2016年發表于Nature Methods的文章,截止18年12月22號Google學術統計引用483次;DADA2自身也是一套在R語言中完整的擴增子分析流程
dada2 denoise-single
方法需要兩個用于質量過濾的參數:--p-trim-left m
,它去除每個序列的前m個堿基(如引物、標簽序列barcode);--p-trunc-len n
,它在位置n截斷每個序列。這允許用戶去除序列的低質量區域、引物或標簽序列等。為了確定要為這兩個參數傳遞什么值,你應該查看上面由qiime demux summarize
生成的demux.qzv
文件中的交互質量圖選項卡。
單端序列去噪, 輸入樣本拆分后結果;去除左端 0 bp (–p-trim-left,有時用于切除低質量序列、barocde或引物),序列切成 120 bp 長(–p-trunc-len);生成代表序列、特征表和去噪過程統計。
下面的步驟計算量較大。
time qiime dada2 denoise-single --i-demultiplexed-seqs data_analysis/dada2/qza/demux.qza \
--p-trim-left 0 \
--p-trunc-len 0 \
--p-n-threads 0 \
--o-representative-sequences data_analysis/dada2/qza/rep-seqs.qza \
--o-table data_analysis/dada2/qza/table.qza \
--o-denoising-stats data_analysis/dada2/qza/stats.qza
# 實際計算時間,即受服務器配置影響,還受同臺服務器上任務量影響
生成三個輸出文件:
-
/stats.qza
: dada2計算統計結果。 -
table.qza
: 特征表。 -
rep-seqs.qza
: 代表序列。
對特征表統計進行進行可視化
qiime metadata tabulate \
--m-input-file data_analysis/dada2/qza/stats.qza \
--o-visualization data_analysis/dada2/qza/stats.qzv
qiime tools export --input-path data_analysis/dada2/qza/table.qza \
--output-path data_analysis/dada2/denoise ;
qiime tools export --input-path data_analysis/dada2/qza/rep-seqs.qza \
--output-path data_analysis/dada2/denoise ;
qiime tools export --input-path data_analysis/dada2/qza/stats.qza \
--output-path data_analysis/dada2/denoise ;
biom convert \
--input-fp data_analysis/dada2/denoise/feature-table.biom \
--output-fp data_analysis/dada2/denoise/biom-table.tsv --to-tsv;
tail -n +2 data_analysis/dada2/denoise/biom-table.tsv \
|tsv-utils view -r \
- > data_analysis/dada2/denoise/feature-table.tsv
方法2. Deblur(個人不是很推薦,內存占用較大,時間慢,所以不演示了,看一下流程吧)
Deblur使用序列錯誤配置文件將錯誤的序列與從其來源的真實生物序列相關聯,從而得到高質量的序列變異數據,主要為兩個步驟。首先,應用基于質量分數的初始質量過濾過程,是Bokulich等人2013年發表的質量過濾方法。
Deblur是本軟件作者作為通訊作者2013發表于Nature Methods的重要擴增子代表序列鑒定方法,截止19年8月25號Google學術統計引用1259次,
按測序堿基質量過濾序列
time qiime quality-filter q-score \
--i-demux demux.qza \
--o-filtered-sequences demux-filtered.qza \
--o-filter-stats demux-filter-stats.qza
# 用時40s
輸出對象:
接下來,使qiime deblur denoise-16S
方法應用于Deblur工作流程。此方法需要一個用于質量過濾的參數,即截斷位置n長度的序列的--p-trim-length n
。通常,Deblur開發人員建議將該值設置為質量分數中位數開始下降至低質量區時的長度。在本次數據上,質量圖(在質量過濾之前)表明合理的選擇是在115至130序列位置范圍內。這是一個主觀的評估。你可能不采用該建議的一種原因是存在多個批次測序的元分析。在這種情況的元分析中,比較所有批次的序列長度是否相同,以避免人為引入特定的偏差,全局考慮這些是非常重要的。由于我們已經使用修剪長度為120 bp用于qiime dada2 denoise-single
分析,并且由于120 bp是基于質量圖的結果,這里我們將使用--p-trim-length 120
參數。下一個命令可能需要10分鐘才能運行完成。
deblur去噪16S過程,輸入文件為質控后的序列,設置截取長度參數,生成結果文件有代表序列、特征表、樣本統計。
time qiime deblur denoise-16S \
--i-demultiplexed-seqs demux-filtered.qza \
--p-trim-length 120 \
--o-representative-sequences rep-seqs-deblur.qza \
--o-table table-deblur.qza \
--p-sample-stats \
--o-stats deblur-stats.qza
time qiime metadata tabulate \
--m-input-file demux-filter-stats.qza \
--o-visualization demux-filter-stats.qzv
time qiime deblur visualize-stats \
--i-deblur-stats deblur-stats.qza \
--o-visualization deblur-stats.qzv
輸出結果:
示例如下:包括6列,第一列為樣本名稱,2-6列分別為總輸入讀長、總保留高讀長、截斷的讀長、截斷后太短的讀長和超過最大模糊堿基的讀長的數量統計。我們通常只關注2,3列數量即可,其它列常用于異常的輸助判斷。
sample-id | total-input-reads | total-retained-reads | reads-truncated | reads-too-short-after-truncation | reads-exceeding-maximum-ambiguous-bases |
---|---|---|---|---|---|
#q2:types | numeric | numeric | numeric | numeric | numeric |
L1S105 | 11340 | 9232 | 10782 | 2066 | 42 |
L1S140 | 9738 | 8585 | 9459 | 1113 | 40 |
L1S208 | 11337 | 10149 | 10668 | 1161 | 27 |
2019.7.4.03.jpg1870×760](http://bailab.genetics.ac.cn/markdown/qiime2/fig/2019.7.4.03.jpg "2019.7.4.03.jpg")
圖3. deblur去噪和鑒定ASV處理過程統計結果
如果你想用此處結果下游分析,可以改名為下游分析的起始名稱:
這處演示不運行下面兩行代碼,前面添加"#"號代表注釋,需要運行請自行刪除行首的“#”
#mv rep-seqs-deblur.qza rep-seqs.qza
#mv table-deblur.qza table.qza
??統一完整的數據命名也是非常好的服務器運行習慣。
物種組成分析
Taxonomic analysis
在這一節中,我們將開始探索樣本的物種組成,并將其與樣本元數據再次組合。這個過程的第一步是為FeatureData[Sequence]
的序列進行物種注釋。我們將使用經過Naive Bayes分類器預訓練的,并由q2-feature-classifier
插件來完成這項工作。這個分類器是在silva-138-99
上訓練的,其中序列被修剪到僅包括來自16S區域的250個堿基,該16S區域在該分析中采用V4區域的515F/806R引物擴增并測序。我們將把這個分類器應用到序列中,并且可以生成從序列到物種注釋結果關聯的可視化。
注意:物種分類器根據你特定的樣品制備和測序參數進行訓練時表現最好,包括用于擴增的引物和測序序列的長度。因此,一般來說,你應該按照使用
q2-feature-classifier
的訓練特征分類器的說明來訓練自己的物種分類器。我們在數據資源頁面上提供了一些通用的分類器,包括基于Silva的16S分類器,不過將來我們可能會停止提供這些分類器,而讓用戶訓練他們自己的分類器,這將與他們的序列數據最相關。
mkdir -p data_analysis/classify/sklearn
提醒?:這一步會占用大量線程所以請大家不要操作,我這邊演示后會提供在上層目錄中
qiime feature-classifier classify-sklearn --i-classifier ../db/silva-138-99-nb-classifier.qza \
--i-reads data_analysis/dada2/qza/rep-seqs.qza \
--p-n-jobs 4 \
--o-classification data_analysis/classify/sklearn/taxonomy.qza
qiime metadata tabulate \
--m-input-file data_analysis/classify/sklearn/taxonomy.qza \
--o-visualization data_analysis/classify/sklearn/taxonomy.qzv
我們可以在網頁端口導入可視化文件來看一下具體的結果
導出物種注釋信息
qiime tools export --input-path data_analysis/classify/sklearn/taxonomy.qzv \
--output-path data_analysis/classify/taxonomy
基于此我們就得到了樣品中的微生物信息可以了解樣品中究竟有哪些物種在其中
qiime taxa barplot \
--i-table data_analysis/dada2/qza/table.qza \
--i-taxonomy data_analysis/classify/sklearn/taxonomy.qza \
--m-metadata-file mapping_file.txt \
--o-visualization data_analysis/classify/sklearn/taxa-bar-plots.qzv
qiime tools export \
--input-path data_analysis/classify/sklearn/taxa-bar-plots.qzv \
--output-path data_analysis/classify/barplot
構建進化樹用于多樣性分析
Generate a tree for phylogenetic diversity analyses
QIIME 2支持幾種系統發育多樣性度量方法,包括Faith’s Phylogenetic Diversity
、weighted
和unweighted UniFrac
。除了每個樣本的特征計數(即QIIME2對象FeatureTable[Frequency]
)之外,這些度量還需要將特征彼此關聯結合有根進化樹。此信息將存儲在一個QIIME 2對象的有根系統發育對象Phylogeny[Rooted]
中。為了生成系統發育樹??,我們將使用q2-phylogeny
插件中的align-to-tree-mafft-fasttree
工作流程。
首先,工作流程使用mafft
程序執行對FeatureData[Sequence]
中的序列進行多序列比對,以創建QIIME 2對象FeatureData[AlignedSequence]
。接下來,流程屏蔽(mask或過濾)對齊的的高度可變區(高變區),這些位置通常被認為會增加系統發育樹的噪聲。隨后,流程應用FastTree
基于過濾后的比對結果生成系統發育樹。FastTree程序創建的是一個無根樹,因此在本節的最后一步中,應用根中點法將樹的根放置在無根樹中最長端到端距離的中點,從而形成有根樹。
mkdir -p data_analysis/phylogeny/qza
qiime phylogeny align-to-tree-mafft-fasttree --i-sequences data_analysis/dada2/qza/rep-seqs.qza \
--o-alignment data_analysis/phylogeny/qza/aligned-rep-seqs.qza \
--o-masked-alignment data_analysis/phylogeny/qza/masked-aligned-rep-seqs.qza \
--o-tree data_analysis/phylogeny/qza/unrooted-tree.qza \
--o-rooted-tree data_analysis/phylogeny/qza/rooted-tree.qza
qiime tools export --input-path data_analysis/phylogeny/qza/rooted-tree.qza \
--output-path data_analysis/phylogeny/tree
多樣性分析
根據最小測序深度計算物種多樣性信息
rm -rf data_analysis/metrics/diversity
qiime diversity core-metrics-phylogenetic \
--i-phylogeny data_analysis/phylogeny/qza/rooted-tree.qza \
--i-table data_analysis/dada2/qza/table.qza \
--p-sampling-depth 6000 \
--m-metadata-file mapping_file.txt \
--output-dir data_analysis/metrics/diversity
獲得特征序列表
qiime tools export --input-path data_analysis/metrics/diversity/rarefied_table.qza \
--output-path data_analysis/metrics/report ;
biom convert --input-fp data_analysis/metrics/report/feature-table.biom \
--output-fp data_analysis/metrics/report/biom-table.tsv --to-tsv;
tail -n +2 data_analysis/metrics/report/biom-table.tsv \
|tsv-utils view -r \
- >data_analysis/metrics/report/feature_table.tsv
Alpha和beta多樣性分析
Alpha and beta diversity analysis
此處多樣性分析的基礎知識和相關方法眾多,詳細參考我在公眾號平臺上的總結,此處不論述。QIIME 2的多樣性分析使用q2-diversity
插件,該插件支持計算α和β多樣性指數、并應用相關的統計檢驗以及生成交互式可視化圖表。我們將首先應用core-metrics-phylogenetic
方法,該方法將FeatureTable[Frequency]
(特征表[頻率])抽平到用戶指定的測序深度,然后計算幾種常用的α和β多樣性指數,并使用Emperor
為每個β多樣性指數生成主坐標分析(PCoA)圖。默認情況下計算的方法有:
劃重點:理解下面4種alpha和beta多樣性指數的所代表的生物學意義至關重要??。
- α多樣性
- 香農(Shannon’s)多樣性指數(群落豐富度的定量度量,即包括豐富度
richness
和均勻度evenness
兩個層面) - 可觀測的OTU(Observed OTUs,群落豐富度的定性度量,只包括豐富度)
- Faith’s系統發育多樣性(包含特征之間的系統發育關系的群落豐富度的定性度量)
- 均勻度Evenness(或 Pielou’s均勻度;群落均勻度的度量)
- 香農(Shannon’s)多樣性指數(群落豐富度的定量度量,即包括豐富度
- β多樣性
- Jaccard距離(群落差異的定性度量,即只考慮種類,不考慮豐度)
- Bray-Curtis距離(群落差異的定量度量,較常用)
- 非加權UniFrac距離(包含特征之間的系統發育關系的群落差異定性度量)
- 加權UniFrac距離(包含特征之間的系統發育關系的群落差異定量度量)
需要提供給這個腳本的一個重要參數是--p-sampling-depth
,它是指定重采樣(即稀疏/稀疏rarefaction
)深度。因為大多數多樣指數對不同樣本的不同測序深度敏感,所以這個腳本將隨機地將每個樣本的測序量重新采樣至該參數值。例如,提供--p-sampling-depth 500
,則此步驟將對每個樣本中的計數進行無放回抽樣,從而使得結果表中的每個樣本的總計數為500。如果任何樣本的總計數小于該值,那么這些樣本將從多樣性分析中刪除。選擇這個值很棘手。建議通過查看上面創建的表table.qzv
文件中呈現的信息并選擇一個盡可能高的值(因此每個樣本保留更多的序列)同時盡可能少地排除樣本來進行選擇。
下面多樣性分析,需要基于重采樣/抽平(rarefaction)標準化的特征表,標準化采用無放回重抽樣至序列一致,如何設計樣品重采樣深度參數
--p-sampling-depth
呢?
如是數據量都很大,選最小的即可。如果有個別數據量非常小,去除最小值再選最小值。比如此分析最小值為917,我們選擇1109深度重采樣,即保留了大部分樣品用于分析,又去除了數據量過低的異常值。本示例為近10年前測序技術的通量水平,454測序時代抽平至1000條即可,現在看來數據量很小。目錄一般采用HiSeq2500或NovaSeq6000的 PE250模式測序,數據量都非常大,通常可以采用3萬或5萬的標準抽平,仍可保留90%以上樣本。過低或過高一般結果也會波動較大,不建議放在一起分析。
qiime tools export \
--input-path data_analysis/metrics/diversity/shannon_vector.qza \
--output-path data_analysis/alpha/diversity ;
mv data_analysis/alpha/diversity/alpha-diversity.tsv data_analysis/alpha/diversity/shannon.tsv ;
qiime tools export \
--input-path data_analysis/metrics/diversity/faith_pd_vector.qza \
--output-path data_analysis/alpha/diversity ;
mv data_analysis/alpha/diversity/alpha-diversity.tsv data_analysis/alpha/diversity/faith_pd.tsv ;
qiime tools export \
--input-path data_analysis/metrics/diversity/observed_features_vector.qza \
--output-path data_analysis/alpha/diversity ;
mv data_analysis/alpha/diversity/alpha-diversity.tsv data_analysis/alpha/diversity/observed_features.tsv ;
qiime tools export \
--input-path data_analysis/metrics/diversity/evenness_vector.qza \
--output-path data_analysis/alpha/diversity ;
mv data_analysis/alpha/diversity/alpha-diversity.tsv data_analysis/alpha/diversity/evenness.tsv
計算稀釋度曲線
mkdir -p data_analysis/alpha/qza
qiime diversity alpha-rarefaction \
--p-min-depth 1 \
--p-steps 10 \
--p-iterations 10 \
--p-metrics shannon simpson chao1 observed_features goods_coverage faith_pd \
--i-table data_analysis/dada2/qza/table.qza \
--i-phylogeny data_analysis/phylogeny/qza/rooted-tree.qza \
--p-max-depth 7500 \
--m-metadata-file mapping_file.txt \
--o-visualization data_analysis/alpha/qza/alpha-rarefaction.qzv ;
qiime tools export \
--input-path data_analysis/alpha/qza/alpha-rarefaction.qzv \
--output-path data_analysis/alpha/rarefaction ;
beta多樣性
mkdir -p data_analysis/beta/matrix
qiime tools export \
--input-path data_analysis/metrics/diversity/jaccard_distance_matrix.qza \
--output-path data_analysis/beta/matrix ;
mv data_analysis/beta/matrix/distance-matrix.tsv data_analysis/beta/matrix/jaccard.tsv ;
qiime tools export --input-path data_analysis/metrics/diversity/bray_curtis_distance_matrix.qza \
--output-path data_analysis/beta/matrix ;
mv data_analysis/beta/matrix/distance-matrix.tsv data_analysis/beta/matrix/bray_curtis.tsv ;
qiime tools export \
--input-path data_analysis/metrics/diversity/weighted_unifrac_distance_matrix.qza \
--output-path data_analysis/beta/matrix ;
mv data_analysis/beta/matrix/distance-matrix.tsv data_analysis/beta/matrix/weighted_unifrac.tsv ;
qiime tools export \
--input-path data_analysis/metrics/diversity/unweighted_unifrac_distance_matrix.qza \
--output-path data_analysis/beta/matrix ;
mv data_analysis/beta/matrix/distance-matrix.tsv data_analysis/beta/matrix/unweighted_unifrac.tsv
mkdir -p data_analysis/beta/emperor/jaccard ;
qiime tools export \
--input-path data_analysis/metrics/diversity/jaccard_emperor.qzv \
--output-path data_analysis/beta/emperor/jaccard ;
mkdir -p data_analysis/beta/emperor/bray_curtis ;
qiime tools export \
--input-path data_analysis/metrics/diversity/bray_curtis_emperor.qzv \
--output-path data_analysis/beta/emperor/bray_curtis ;
mkdir -p data_analysis/beta/emperor/weighted_unifrac ;
qiime tools export \
--input-path data_analysis/metrics/diversity/weighted_unifrac_emperor.qzv \
--output-path data_analysis/beta/emperor/weighted_unifrac ;
mkdir -p data_analysis/beta/emperor/unweighted_unifrac ;
qiime tools export --input-path data_analysis/metrics/diversity/unweighted_unifrac_emperor.qzv \
--output-path data_analysis/beta/emperor/unweighted_unifrac
PCoA多樣性分析
mkdir -p data_analysis/beta/pcoa/jaccard ;
qiime tools export \
--input-path data_analysis/metrics/diversity/jaccard_pcoa_results.qza \
--output-path data_analysis/beta/pcoa/jaccard ;
mkdir -p data_analysis/beta/pcoa/bray_curtis ;
qiime tools export \
--input-path data_analysis/metrics/diversity/bray_curtis_pcoa_results.qza \
--output-path data_analysis/beta/pcoa/bray_curtis ;
mkdir -p data_analysis/beta/pcoa/weighted_unifrac ;
qiime tools export \
--input-path data_analysis/metrics/diversity/weighted_unifrac_pcoa_results.qza \
--output-path data_analysis/beta/pcoa/weighted_unifrac ;
mkdir -p data_analysis/beta/pcoa/unweighted_unifrac ;
qiime tools export \
--input-path data_analysis/metrics/diversity/unweighted_unifrac_pcoa_results.qza \
--output-path data_analysis/beta/pcoa/unweighted_unifrac
rank_abundance
mkdir -p data_analysis/rank_abundance/report/
rank_abundance.R data_analysis/metrics/report/feature_table.tsv \
data_analysis/rank_abundance/report/rank_abundance.pdf ;
pdf2png data_analysis/rank_abundance/report/rank_abundance.pdf ;
specaccum_curve
mkdir -p data_analysis/specaccum_curve/report/
specaccum_curve.R data_analysis/metrics/report/feature_table.tsv \
data_analysis/specaccum_curve/report/specaccum_curve.pdf
pdf2png data_analysis/specaccum_curve/report/specaccum_curve.pdf
picrust2 功能預測
這一步也需要占據大量的計算資源所以請大家不要自行分析,請看我進行演示
deactive
conda activate /biostack/bioconda/envs/picrust2
rm -rf data_analysis/picrust2/pipeline;
picrust2_pipeline.py \
-s data_analysis/dada2/denoise/dna-sequences.fasta \
-i data_analysis/metrics/report/feature_table.tsv \
-o data_analysis/picrust2/pipeline \
-p 64 --no_pathways \
--stratified \
--wide_table \
--per_sequence_contrib
mkdir -p data_analysis/picrust2/prediction
mkdir -p data_analysis/picrust2/report
tsv-utils strip mapping_file.txt | cut -f1,2 | grep -v '#' >data_analysis/picrust2/report/metadata.txt;
tsv-utils definition \
-d " " /biostack/tools/protocols/qiim-tk-0.0.4/bins/../db/picrust2/ko_info.tsv data_analysis/picrust2/pipeline/KO_metagenome_out/pred_metagenome_unstrat.tsv.gz > data_analysis/picrust2/prediction/ko.txt ;
tsv-utils definition \
-d " " /biostack/tools/protocols/qiim-tk-0.0.4/bins/../db/picrust2/ec_level4_info.tsv data_analysis/picrust2/pipeline/EC_metagenome_out/pred_metagenome_unstrat.tsv.gz \
>data_analysis/picrust2/prediction/enzyme.txt
功能預測基礎可視化
qiime2
mkdir -p data_analysis/picrust2/prediction/ko ;
mkdir -p data_analysis/picrust2/prediction/enzyme
PCA.R -g T data_analysis/picrust2/prediction/ko.txt data_analysis/picrust2/report/metadata.txt data_analysis/picrust2/prediction/ko/ko.pca.pdf;
pdf2png data_analysis/picrust2/prediction/ko/ko.pca.pdf ;
PCoA.R -g T -m bray data_analysis/picrust2/prediction/ko.txt data_analysis/picrust2/report/metadata.txt /project/qiime-tk/data_analysis/picrust2/prediction/ko/ko.pcoa.pdf;
pdf2png data_analysis/picrust2/prediction/ko/ko.pcoa.pdf ;
NMDS.R -g T -m bray data_analysis/picrust2/prediction/ko.txt data_analysis/picrust2/report/metadata.txt /project/qiime-tk/data_analysis/picrust2/prediction/ko/ko.nmds.pdf;
pdf2png data_analysis/picrust2/prediction/ko/ko.nmds.pdf ;
mkdir -p data_analysis/picrust2/prediction/enzyme ;
PCA.R -g T data_analysis/picrust2/prediction/enzyme.txt data_analysis/picrust2/report/metadata.txt data_analysis/picrust2/prediction/enzyme/enzyme.pca.pdf;
pdf2png data_analysis/picrust2/prediction/enzyme/enzyme.pca.pdf ;
PCoA.R -g T -m bray data_analysis/picrust2/prediction/enzyme.txt data_analysis/picrust2/report/metadata.txt data_analysis/picrust2/prediction/enzyme/enzyme.pcoa.pdf;
pdf2png data_analysis/picrust2/prediction/enzyme/enzyme.pcoa.pdf ;
NMDS.R -g T -m bray data_analysis/picrust2/prediction/enzyme.txt data_analysis/picrust2/report/metadata.txt data_analysis/picrust2/prediction/enzyme/enzyme.nmds.pdf;
pdf2png data_analysis/picrust2/prediction/enzyme/enzyme.nmds.pdf
######################################################