跳转至

16S扩增子PICRUSt2功能预测

一句话概述

PICRUSt2能根据16S rRNA基因测序数据"猜测"微生物群落有什么功能基因——不需要做昂贵的宏基因组测序,用便宜的16S数据就能预测功能,虽然是"猜"但准确度还不错。


核心知识点表格

知识点说明
PICRUSt2基于系统发育关系预测微生物群落功能组成的工具
原理利用已知基因组的功能注释,通过16S系统发育推断未知菌的功能
输入16S ASV/OTU序列 + 丰度表
输出基因家族丰度、EC号丰度、MetaCyc通路丰度
最新版本v2.6.0+(官方,内置PICRUSt2-SC数据库),PICRUSt2-SC使用GTDB r214数据库(2025年发布)
局限性只是功能"预测",不是真实测量,需谨慎解释

白话解释

想象你参加一个聚会,只知道每个人的姓氏(= 16S序列),不知道每个人的工作(= 功能基因)。

PICRUSt2的做法: 1. 先查"族谱"(参考基因组数据库),找出和聚会上每个人最像的亲戚 2. 这些亲戚的工作(功能基因)是已知的 3. 根据"亲戚做什么工作"来推测聚会上每个人可能做什么工作 4. 最后统计整个聚会的"职业分布"

关键限制: 这终究是"推测"——如果聚会上来了一个和族谱里所有人都不像的陌生人,PICRUSt2就猜不准了。


安装与配置

# 方法1:用conda安装(推荐)
conda create -n picrust2 -c bioconda -c conda-forge picrust2  # 创建独立环境
conda activate picrust2  # 激活环境

# 验证安装
picrust2_pipeline.py --help  # 查看帮助信息

# 方法2:用pip安装
pip install picrust2  # pip安装

# 检查版本
picrust2_pipeline.py --version  # 查看版本号

# 系统要求:
# - Linux/MacOS(Windows需要WSL)
# - 至少16GB内存
# - Python 3.8+

输入数据准备

从QIIME2获取输入

# PICRUSt2需要两个输入文件:
# 1. study_seqs.fna — ASV代表序列(FASTA格式)
# 2. study_seqs.biom — ASV丰度表(BIOM格式)

# 如果你是用QIIME2分析的16S数据:

# 导出ASV代表序列
qiime tools export \
    --input-path rep-seqs.qza \       # QIIME2的代表序列文件
    --output-path exported_seqs/      # 导出目录
# 得到 exported_seqs/dna-sequences.fasta

# 导出feature表(BIOM格式)
qiime tools export \
    --input-path table.qza \          # QIIME2的feature表
    --output-path exported_table/     # 导出目录
# 得到 exported_table/feature-table.biom

# 重命名文件
mv exported_seqs/dna-sequences.fasta study_seqs.fna    # 重命名序列文件
mv exported_table/feature-table.biom study_seqs.biom    # 重命名表文件

数据预处理注意事项

# 重要:PICRUSt2对输入数据有要求

# 1. 必须是去噪后的ASV或聚类的OTU,不能是原始reads
# 2. 建议去除单例(只出现一次的ASV),减少噪音
# 3. 不要做稀释(rarefaction)后再输入PICRUSt2
# 4. 序列不需要trim到统一长度

# 在QIIME2中过滤低频ASV
qiime feature-table filter-features \
    --i-table table.qza \             # 输入feature表
    --p-min-frequency 10 \            # 最低总频率10
    --p-min-samples 2 \               # 至少出现在2个样本中
    --o-filtered-table filtered_table.qza  # 输出过滤后的表

运行PICRUSt2

一键运行(推荐新手)

# 最简单的运行方式:一个命令搞定一切
picrust2_pipeline.py \
    -s study_seqs.fna \        # 输入ASV序列
    -i study_seqs.biom \       # 输入丰度表
    -o picrust2_output \       # 输出目录
    -p 16 \                    # 线程数
    --stratified \             # 输出按物种分层的结果
    --per_sequence_contrib     # 输出每个ASV对通路的贡献

# 输出文件说明:
# picrust2_output/
# ├── EC_metagenome_out/        — EC号(酶)预测结果
# │   └── pred_metagenome_unstrat.tsv.gz  — 非分层丰度表
# ├── KO_metagenome_out/        — KEGG KO预测结果
# │   └── pred_metagenome_unstrat.tsv.gz  — 非分层丰度表
# ├── pathways_out/             — MetaCyc通路预测结果
# │   ├── path_abun_unstrat.tsv.gz  — 通路丰度表
# │   └── path_abun_strat.tsv.gz   — 按物种分层的通路丰度
# ├── out.tre                   — 放置ASV到参考树的结果
# └── intermediate/            — 中间文件

分步运行(理解每一步)

# 第一步:序列放置(将ASV放到参考系统发育树上)
place_seqs.py \
    -s study_seqs.fna \        # 输入ASV序列
    -o out.tre \               # 输出放置后的树
    -p 16 \                    # 线程数
    --intermediate intermediate/placement  # 中间文件目录

# 第二步:隐藏状态预测(预测每个ASV的基因家族)
hsp.py \
    -i 16S \                   # 输入类型:16S
    -t out.tre \               # 输入放置后的树
    -o EC_predicted.tsv.gz \   # 输出EC号预测
    -n \                       # 使用最近邻插值
    -p 16                      # 线程数

hsp.py \
    -i KO \                    # 输入类型:KO
    -t out.tre \
    -o KO_predicted.tsv.gz \
    -n -p 16

# 第三步:宏基因组预测(结合丰度表计算群落功能)
metagenome_pipeline.py \
    -i study_seqs.biom \       # 输入丰度表
    -m EC_predicted.tsv.gz \   # 输入EC预测结果
    -o EC_metagenome_out \     # 输出目录
    --strat_out                # 输出分层结果

metagenome_pipeline.py \
    -i study_seqs.biom \
    -m KO_predicted.tsv.gz \
    -o KO_metagenome_out \
    --strat_out

# 第四步:通路推断(用MinPath推断通路丰度)
pathway_pipeline.py \
    -i EC_metagenome_out/pred_metagenome_contrib.tsv.gz \  # 输入EC丰度
    -o pathways_out \          # 输出通路目录
    -p 16                      # 线程数

结果分析与可视化

# 解压结果文件
gunzip picrust2_output/KO_metagenome_out/pred_metagenome_unstrat.tsv.gz
gunzip picrust2_output/pathways_out/path_abun_unstrat.tsv.gz

# 用R分析PICRUSt2结果
Rscript << 'REOF'
# 加载必要的R包
library(ggplot2)  # 绑定ggplot2包

# 读取KO丰度表
ko_table <- read.delim(
    "picrust2_output/KO_metagenome_out/pred_metagenome_unstrat.tsv",
    row.names = 1  # 第一列作为行名
)

# 读取通路丰度表
pathway_table <- read.delim(
    "picrust2_output/pathways_out/path_abun_unstrat.tsv",
    row.names = 1
)

cat("预测到的KO数量:", nrow(ko_table), "\n")      # 打印KO数量
cat("预测到的通路数量:", nrow(pathway_table), "\n")  # 打印通路数量
cat("样本数量:", ncol(ko_table), "\n")              # 打印样本数量

# 差异分析示例(用Wilcoxon检验比较两组)
# 假设metadata有Group列(T2D/Control)
metadata <- read.delim("metadata.tsv", row.names = 1)  # 读取样本信息

# 对每条通路做差异检验
pvals <- apply(pathway_table, 1, function(x) {
    group1 <- x[metadata$Group == "T2D"]      # T2D组的丰度
    group2 <- x[metadata$Group == "Control"]  # 对照组的丰度
    wilcox.test(group1, group2)$p.value        # Wilcoxon检验
})

# FDR校正
padj <- p.adjust(pvals, method = "BH")  # BH方法校正p值

# 筛选显著差异的通路
sig_pathways <- names(padj[padj < 0.05])  # 校正后p<0.05
cat("显著差异的通路数量:", length(sig_pathways), "\n")  # 打印数量
REOF

将KO号转换为KEGG通路描述

# 添加功能描述
add_descriptions.py \
    -i picrust2_output/KO_metagenome_out/pred_metagenome_unstrat.tsv.gz \  # 输入KO表
    -m KO \                   # 描述类型:KO
    -o KO_with_descriptions.tsv  # 输出带描述的表

# 添加EC号描述
add_descriptions.py \
    -i picrust2_output/EC_metagenome_out/pred_metagenome_unstrat.tsv.gz \
    -m EC \
    -o EC_with_descriptions.tsv

# 添加MetaCyc通路描述
add_descriptions.py \
    -i picrust2_output/pathways_out/path_abun_unstrat.tsv.gz \
    -m METACYC \
    -o pathways_with_descriptions.tsv

在QIIME2中使用PICRUSt2

# QIIME2插件版本的PICRUSt2
# 安装q2-picrust2插件
conda install -c bioconda q2-picrust2  # 安装插件

# 在QIIME2中运行PICRUSt2
qiime picrust2 full-pipeline \
    --i-table table.qza \              # 输入feature表
    --i-seq rep-seqs.qza \             # 输入代表序列
    --output-dir q2-picrust2-output \  # 输出目录
    --p-threads 16 \                   # 线程数
    --p-hsp-method mp \                # 预测方法:最大简约
    --p-max-nsti 2                     # 最大NSTI值(排除无参考的ASV)

# 输出的QIIME2 artifact可以直接用于下游分析
# 如差异分析、PCoA可视化等

PICRUSt2-SC:2025年最新数据库更新

# PICRUSt2-SC (Sugar-Coated) 使用GTDB r214数据库
# 包含27,870个参考基因组(比原始数据库更多更新)

# 安装PICRUSt2-SC(2025年4月发表)
# 需要单独下载更新的参考树和基因数据
# 详见:https://academic.oup.com/bioinformatics/article/41/5/btaf269

# 使用PICRUSt2-SC的自定义数据库运行
picrust2_pipeline.py \
    -s study_seqs.fna \
    -i study_seqs.biom \
    -o picrust2sc_output \
    --custom_trait_tables /path/to/picrust2sc/ko_counts.tsv.gz \  # 自定义KO表
    --marker_gene_table /path/to/picrust2sc/16S_counts.tsv.gz \   # 自定义16S表
    --ref_dir /path/to/picrust2sc/ \  # 自定义参考目录
    -p 16

常见报错与解决

报错原因解决方案
Sequences not in FASTA format序列文件格式不对确保是标准FASTA格式,不是FASTQ
No sequences overlap with referenceASV序列和参考树不匹配检查序列是否是16S,是否去了引物
NSTI value too highASV与参考基因组差异太大--max_nsti 2 过滤掉NSTI>2的ASV
内存不足(OOM)ASV太多,内存不够过滤低频ASV,减少输入数量
biom format errorBIOM文件版本不兼容biom convert 转换版本
运行非常慢线程数设太低或ASV太多增加 -p 线程数,过滤稀有ASV

速查表

# PICRUSt2完整命令
picrust2_pipeline.py -s seqs.fna -i table.biom -o output -p 16

# 输出文件对应关系
KO_metagenome_out → KEGG直系同源基因丰度
EC_metagenome_out → 酶分类号丰度
pathways_out → MetaCyc代谢通路丰度

# 支持的功能数据库
KO — KEGG直系同源基因
EC — 酶分类号
COG — 直系同源聚类
PFAM — 蛋白质家族
TIGRFAM — TIGR蛋白家族

# NSTI值解读(Nearest Sequenced Taxon Index)
NSTI < 0.03 → 参考基因组很近,预测可靠
NSTI 0.03-0.15 → 一般可靠
NSTI 0.15-2.0 → 预测不太可靠
NSTI > 2.0 → 预测不可靠,建议排除

# 安装验证
picrust2_pipeline.py --version  # 查看版本
place_seqs.py --help           # 查看帮助

面试高频问题

Q1:PICRUSt2的原理是什么?

A:PICRUSt2利用已测序基因组的功能注释和16S系统发育关系来预测功能。具体步骤:①将ASV序列放置到参考系统发育树上;②利用祖先状态重建(隐藏状态预测)推断每个ASV对应的基因家族组成;③结合ASV丰度表计算群落整体的功能丰度;④用MinPath推断代谢通路。

Q2:PICRUSt2的结果可靠吗?有什么局限性?

A:PICRUSt2预测的是功能"潜力"而非实际表达。局限性:①依赖参考数据库覆盖度,新物种预测不准;②不能反映基因表达水平(转录调控);③假设同一物种的不同菌株功能相似(忽略株水平差异)。NSTI值可以评估预测可靠性。

Q3:PICRUSt2和宏基因组测序的功能分析有什么区别?

A:PICRUSt2基于16S数据"预测"功能,便宜快速但是推断性质的;宏基因组直接测序所有DNA来"测量"功能基因,准确但贵。PICRUSt2适合生成假设,宏基因组适合验证假设。

Q4:什么是NSTI?NSTI值高说明什么?

A:NSTI(Nearest Sequenced Taxon Index)表示ASV与最近已测序参考基因组的进化距离。NSTI越高说明参考越远,预测越不可靠。通常NSTI>2的ASV建议排除。

Q5:在你的T2D项目中用过PICRUSt2吗?

A:(结合自身项目回答)16S数据可以用PICRUSt2做初步的功能预测分析,关注糖代谢、短链脂肪酸合成等与T2D相关的通路。但重要发现建议用宏基因组数据验证。