2013 年 PICRUSt ( PhylogeneticInvestigation of Communities by Reconstruction of Unobserved States )的出現,使我們可以基於擴增子數據預測微生物群落功能,從而進一步探究其功能變化。目前,PICRUSt 已經升級到 PICRUSt2,對比第一版,PICRUSt2 用於預測的參考基因組資料庫擴大了 10 倍以上,兼容序列去噪方法輸出的結果(如 DADA2 ),除了分析 16s 序列外還可對真菌 ITS 和 18S rRNA 基因序列進行功能預測。同時整合了部分 HUMAnN2 的方法,可以輸出 MetaCyc 功能預測結果。經過評估,PICRUSt2 比 PICRUSt1 和其他當前方法更準確,且更靈活,可以添加自定義參考資料庫。今天我們就來學習一下 PICRUSt2 的用法吧~
軟體安裝PICRUSt2 可單獨使用也可作為 QIIME2 插件使用,支持 Linux 和 MacOS,需要至少 16G RAM 。
我們可以通過 conda 或從源碼安裝 PICRUSt2( 這兩種方法都需要先安裝 conda )。
從bioconda安裝conda create -n picrust2 -c bioconda -c conda-forge picrust2=2.2.0_b
conda activate picrust2
若在運行程序時遇到有關默認參考文件丟失的錯誤,則需要從源碼安裝。
從源碼安裝wget https://github.com/picrust/picrust2/archive/v2.2.0-b.tar.gz
tar xvzf v2.2.0-b.tar.gz
cd picrust2-2.2.0-b/
創建並激活環境,然後使用 pip 安裝 PICRUSt2。
conda env create -f picrust2-env.yaml
conda activate picrust2
pip install
運行測試以驗證安裝是否成功(若用 bioconda 則不需這一步):
pytest
PS:我就是 conda 裝不成功,顯示缺少 ref,所以直接從原始碼安裝了。但 github 下載實在太慢,壓縮包又比較大( 116M ),建議大家先克隆到 gitee 通過 gitee 倉庫下載,在國內可以滿速。
Workflow一行命令完成整個流程其實整個 PICRUSt2 流程僅用一個 picrust2_pipeline.py 腳本即可運行,包含了上圖中的五步。
輸入文件
OTU 或 ASV 的 FASTA 格式文件
ASV豐度表( BIOM 格式或以制表符分割的文本格式 )
下面這行命令將在兩個輸入文件上運行完整的默認管道。預測 EC 和 KO,以及基於 EC 預測的 MetaCyc 通路豐度和覆蓋率。默認軟體會為每個 ASV 計算最近序列物種索引(NSTI),並過濾 NSTI > 2 的 ASV。
picrust2_pipeline.py -s study_seqs.fna -i study_seqs.biom -o picrust2_out_pipeline -p 1
所有輸出文件位於 picrust2_out_pipeline 文件夾中。這些是默認輸出,若指定其他功能資料庫或自定義參考資料庫( 例如非16S擴增子參考數據集 ),則輸出將有所不同。
輸出文件
EC_metagenome_out 文件夾:包含未分層的 EC number (pred_metagenome_unstrat.tsv.gz),經 16S 拷貝數豐度歸一化的序列表(seqtab_norm.tsv.gz)以及由每個樣本的加權 NSTI 值(weight_n .tsv.gz)。
KO_metagenome_out 文件夾:與上面的 EC_metagenome_out 文件夾內容相同,但為 KO 預測。
pathsways_out 文件夾:包含每個樣品的預測通路豐度和覆蓋率。
主要參數
具體分步教程下載示例數據wget http://kronos.pharmacology.dal.ca/public_files/tutorial_datasets/picrust2_tutorial_files/chemerin_16S.zip
unzip chemerin_16S.zip
cd chemerin_16S
ls -l 可看到三個文件:
metadata.tsv
seqs.fna
table.biom
less seqs.fna
>86681c8e9c64b6683071cf185f9e3419
CGGGCTCAAACGGGGAGTGACTCAGGCAGAGACGCCTGTTTCCCACGGGACACTCCCCGAGGTGCTGCATGGTTGTCGTC
AGCTCGTGCCGTGAGGTGTCGGCTTAAGTGCCATAACGAGCGCAACCCCCGCGTGCAGTTGCTAACAGATAACGCTGAGG
ACTCTGCACGGACTGCCGGCGCAAGCCGCGAGGAAGGCGGGGATGACGTCAAATCAGCACGGCCCTTACGTCCGGGGCGA
CACACGTGTTACAATGGGTGGTACAGCGGGAAGCCAGGCGGCGACGCCGAGCGGAACCCGAAATCCACTCTCAGTTCGGA
TCGGAGTCTGCAACCCGACTCCGTGAAGCTGGATTCGCTAGTAATCGCGCATCAGCCATGGCGCGGTGAATACGTTCCCG
>b7b02ffee9c9862f822c7fa87f055090
AGGTCTTGACATCCAGTGCAAACCTAAGAGATTAGGTGTTCCCTTCGGGGACGCTGAGACAGGTGGTGCATGGCTGTCGT
CAGCTCGTGTCGTGAGATGTTGGGTTAAGTCCCGCAACGAGCGCAACCCTTGTCATTAGTTGCCATCATTAAGTTGGGCA
CTCTAATGAGACTGCCGGTGACAAACCGGAGGAAGGTGGGGATGACGTCAAGTCATCATGCCCCTTATGACCTGGGCTAC
ACACGTGCTACAATGGACGGTACAACGAGAAGCGAACCTGCGAAGGCAAGCGGATCTCTTAAAGCCGTTCTCAGTTCGGA
CTGTAGGCTGCAACTCGCCTACACGAAGCTGGAATCGCTAGTAATCGCGGATCAGCACGCCGCGGTGAATACGTTCCCGG
...
biom head -i table.biom
# Constructed from biom file
#OTU ID 100CHE6KO 101CHE6WT 102CHE6WT 103CHE6KO 104CHE6KO
86681c8e9c64b6683071cf185f9e3419 716.0 699.0 408.0 580.0 958.0
b7b02ffee9c9862f822c7fa87f055090 51.0 98.0 96.0 91.0 223.0
663baa27cddeac43b08f428e96650bf5 112.0 29.0 45.0 35.0 75.0
abd40160e03332710641ee74b1b42816 0.0 0.0 0.0 0.0 0.0
bac85f511e578b92b4a16264719bdb2d 56.0 4.0 63.0 131.0 90.0
第一列( #OTU ID )應包含上面 FASTA 文件中的 ASV ID。其他列則表示不同的樣本,計數表示每個樣本中的讀取次數( 不是相對豐度 )。
還可以用下面這個命令獲取更詳細的總結信息:
biom summarize-table -i table.biom
Num samples: 24
Num observations: 37
Total count: 108,718
Table density (fraction of non-zero values): 0.687
Counts/sample summary:
Min: 2,649.000
Max: 7,922.000
Median: 4,168.000
Mean: 4,529.917
Std. dev.: 1,348.558
Sample Metadata Categories: None provided
Observation Metadata Categories: None provided
Counts/sample detail:
102CHE6WT: 2,649.000
88CHE6KO: 2,969.000
9CMK6KO: 3,448.000
...
注意,序列 ID 應為字符串,若是純數字則可能會有問題,也可以在所有序列 ID 的開頭添加 seq之類的字符串。
數據預處理示例已經預處理過了,但對於我們自己的數據,還需要進行數據的過濾:
過濾稀有 ASV。
過濾低深度的樣品。這可以根據上面 biom summarize-table 的輸出結果進行判斷。
過濾 ASV 和樣本的最佳 cut-off 值因數據集而異,方法也有很多,在 QIIME2 教程中介紹了一種簡單的方法,詳見:https://docs.qiime2.org/2019.10/tutorials/filtering/#filtering-feature-tables
下面,我們可以運行 PICRUSt2 了!
首先創建輸出文件夾:
mkdir picrust2_out_pipeline
cd picrust2_out_pipeline
PICRUSt2 的第一步是將 ASV 插入到參考進化樹中。軟體封裝了 HMMER,首先將 ASV 與參考 16S 序列用 HMMER 進行多序列比對,然後使用 EPA-NG ( https://github.com/Pbdas/epa-ng )構建系統發育樹,找到 ASV 最有可能的位置。默認,該參考樹基於來自集成微生物基因組資料庫中的約兩萬條 16S 序列。最後,輸出每個 ASV 最可能放置的樹文件,並使用 GAPPA 轉換格式。
命令如下( 1 minute and 13.8 GB of RAM on 1 processor ):
place_seqs.py -s ../seqs.fna -o out.tre -p 1 \
--intermediate intermediate/place_seqs
輸入文件是 ASV 序列的 FASTA 文件。輸出文件是 out.tre,是 ASV 和參考 16S 序列的 newick 格式的樹文件。
STEP2 基因家族的隱藏狀態預測有很多方法可以推斷出系統樹上未知譜系的可能性狀值。PICRUSt2 使用了 castor R包中的算法,默認使用最大簡約法。腳本會預測每個 ASV 缺失的基因組,比如預測每個 ASV 的基因家族的拷貝數。PICRUSt2 可以對多個基因家族資料庫進行預測,為了節省時間,示例中只運行 EC 資料庫。我們還將預測每個 ASV 的 16S rRNA 基因序列的拷貝數。同時,腳本 還可為每個 ASV 輸出最近序列物種索引(NSTI),該值對應於樹中 ASV 到最近的參考 16S 序列的分支長度。
命令如下 ( 4 minute and 4 GB of RAM on 1 processor ):
hsp.py -i 16S -t out.tre -o marker_predicted_and_nsti.tsv.gz -p 1 -n
hsp.py -i EC -t out.tre -o EC_predicted.tsv.gz -p 1
輸出文件為 marker_predicted_and_nsti.tsv.gz 和EC_predicted.tsv.gz 。查看結果:
zless -S marker_predicted_and_nsti.tsv.gz
sequence 16S_rRNA_Count metadata_NSTI
20e568023c10eaac834f1c110aacea18 1 0.008994
23fe12a325dfefcdb23447f43b6b896e 1 0.047617
288c8176059111c4c7fdfb0cd5afce64 4 0.44977799999999996
2a45f0b7f68a35504402988bcb8eb7fe 1 0.000101
343635a5abc8d3b1dbd2b305eb0efe32 4 0.5681
...
第一列是 ASV 的名稱,然後是每個 ASV 的 16S 拷貝的預測數量,最後是每個 ASV 的NSTI值。在運行 hsp.py 時加入 -n 參數可輸出 NSTI 值。在測試中,我們發現 NSTI 得分高於 2 的 ASV 通常是噪聲數據。查看 NSTI 值的分布對於確定樣本的總體特徵以及是否存在異常值很有幫助。
zless -S EC_predicted.tsv.gz
sequence EC:1.1.1.1 EC:1.1.1.10 EC:1.1.1.100 ...
20e568023c10eaac834f1c110aacea18 2 0 3 ...
23fe12a325dfefcdb23447f43b6b896e 0 0 1 ...
288c8176059111c4c7fdfb0cd5afce64 1 0 1 ...
...
在此表中,顯示了每個 ASV 所預測的酶拷貝數。由於運行該命令時未加入 -n 參數,因此沒有輸出 NSTI 值。EC 編號是根據其催化的化學反應定義的一種基因家族,例如,EC:1.1.1.1 對應醇脫氫酶。
STEP3 宏基因組預測metagenome_pipeline.py 腳本將運行以下兩步:
將每個 ASV 的讀取深度除以預測的 16S 拷貝數。執行此操作有助於控制整個生物體中 16S 拷貝數的變化。
將每個樣品的 ASV 讀取深度( 經 16S 拷貝數標準化後 )乘以每個 ASV 預測基因家族的拷貝數。
命令如下( 5s ):
metagenome_pipeline.py -i ../table.biom -m marker_predicted_and_nsti.tsv.gz -f EC_predicted.tsv.gz \
-o EC_metagenome_out
--strat_out 參數表示將輸出分層結果文件。
輸出文件:
zless -S EC_metagenome_out/pred_metagenome_unstrat.tsv.gz
function 100CHE6KO 101CHE6WT 102CHE6WT ...
EC:1.1.1.1 1432.0 1967.5 1408.5 ...
EC:1.1.1.100 2034.0 2748.16 2443.5 ...
EC:1.1.1.103 0.0 0.0 0.0 ...
zless -S EC_metagenome_out/pred_metagenome_contrib.tsv.gz
sample function taxon taxon_abun taxon_rel_abun genome_function_count taxon_function_abun taxon_rel_function_abun
100CHE6KO EC:1.1.1.1 20e568023c10eaac834f1c110aacea18 26.0 1.9607843137254901 2 52.0 3.9215686274509802
100CHE6KO EC:1.1.1.1 288c8176059111c4c7fdfb0cd5afce64 25.5 1.9230769230769231 1 25.5 1.9230769230769231
100CHE6KO EC:1.1.1.1 343635a5abc8d3b1dbd2b305eb0efe32 16.0 1.206636500754148 1 16.0 1.206636500754148
PICRUSt2 流程的最後一個主要步驟是使用 path_pipeline.py 預測通路級別的豐度。默認情況下,該腳本會根據 EC 豐度推斷 MetaCyc 通路豐度,這些步驟基於 HUMAnN2 的方法:
將 EC 號重組為 MetaCyc 反應。
基於 MinPath 推斷存在哪些 MetaCyc 通路。
計算並返回確定的通路數量。
運行 path_pipeline.py( <2min ):
pathway_pipeline.py -i EC_metagenome_out/pred_metagenome_contrib.tsv.gz \
-o pathways_out -p 1
輸出文件位於 pathways_out 文件夾中,結果包括未分層和分層的 MetaCyc 通路豐度表( 示例中是因為輸入了分層基因家族表,所以也會輸出了相應分層的 MetaCyc 通路豐度表 )。
STEP4 添加功能說明最後,我們需要為每個功能 ID 進行注釋:
add_descriptions.py -i EC_metagenome_out/pred_metagenome_unstrat.tsv.gz -m EC \
-o EC_metagenome_out/pred_metagenome_unstrat_descrip.tsv.gz
add_descriptions.py -i pathways_out/path_abun_unstrat.tsv.gz -m METACYC \
-o pathways_out/path_abun_unstrat_descrip.tsv.gz
zless -S EC_metagenome_out/pred_metagenome_unstrat_descrip.tsv.gz
function description 100CHE6KO 101CHE6WT 102CHE6WT
EC:1.1.1.1 Alcohol dehydrogenase 1432.0 1967.5 1408.5 1746.5 1736.25
EC:1.1.1.100 3-oxoacyl-[acyl-carrier-protein] reductase 2034.0 2748.16
EC:1.1.1.103 L-threonine 3-dehydrogenase 0.0 0.0 0.0 0.0
EC:1.1.1.125 2-deoxy-D-gluconate 3-dehydrogenase 0.0 0.0 0.0
EC:1.1.1.133 dTDP-4-dehydrorhamnose reductase 1363.0 1534.16 1282.5
EC:1.1.1.14 L-iditol 2-dehydrogenase 129.0 81.0 229.0 398.0
EC:1.1.1.157 3-hydroxybutyryl-CoA dehydrogenase 192.0 653.33 477.0
...
可以看到第二列即為添加的注釋信息。這些注釋文件可以在 picrust2/picrust2/default_files/description_mapfiles/ 文件夾中找到。
PICRUSt2 給大家介紹到這裡啦,更具體的內容可參見:
https://github.com/picrust/picrust2/wiki
最後友情宣傳一下生信技能樹: