跳转至

179_宏基因组宿主预测iPHoP

一句话概述

iPHoP(integrated Phage Host Prediction)整合多种病毒-宿主预测方法(BLAST、CRISPR spacer、核苷酸组成、蛋白质同源性等),对宏基因组中鉴定的病毒序列进行宿主细菌/古菌预测,是当前最全面的噬菌体宿主预测工具。

核心知识点表格

知识点说明
iPHoP定位整合≥6种宿主预测方法的元工具
预测方法BLAST、CRISPR spacer、RaFAH(随机森林)、VHM-net、PHP、WiSH等
输入文件病毒contigs(FASTA格式)
输出结果每个病毒的宿主预测(属/种级别)、置信度评分
数据库iPHoP_db(含宿主基因组和CRISPR数据库,~150GB)
预测精度属级别约85%准确率(高置信度)
适用场景宏病毒组分析、噬菌体生态学、病毒-宿主互作研究
前置工具通常在geNomad/VirSorter2病毒鉴定之后使用

步骤详解

第一步:安装iPHoP与数据库

白话解释:iPHoP是一个"集成者",它把多种已有的宿主预测方法打包在一起,综合打分。安装需要下载一个很大的数据库。

技术细节:iPHoP数据库包含来自GTDB的细菌和古菌参考基因组、它们的CRISPR spacer、以及用于各种预测方法的预训练模型。

# 安装iPHoP(推荐conda)
conda create -n iphop -c conda-forge -c bioconda iphop
conda activate iphop

# 下载数据库(约150GB解压后)
iphop download --db_dir iphop_db --no_prompt

# 验证安装
iphop --version
iphop predict -h

第二步:准备输入数据

白话解释:输入是已经鉴定好的病毒序列。通常是从geNomad或VirSorter2的输出中获取的病毒contigs。序列应该尽可能完整,越长预测越准。

# 从geNomad输出获取病毒序列
cp genomad_output/contigs_summary/contigs_virus.fna viral_contigs.fa

# 检查序列统计
seqkit stats viral_contigs.fa

# 过滤短序列(建议≥5kb)
seqkit seq -m 5000 viral_contigs.fa > viral_5kb.fa
echo "序列数量: $(grep -c '>' viral_5kb.fa)"

第三步:运行iPHoP宿主预测

白话解释:运行iPHoP只需一条命令。它会依次运行各种预测方法,然后综合评分给出最终的宿主预测。

技术细节:iPHoP内部工作流:(1)BLAST搜索宿主数据库;(2)CRISPR spacer匹配;(3)k-mer组成分析(WiSH/VHM-net);(4)蛋白质远程同源搜索(PHP);(5)RaFAH随机森林模型。最终通过集成学习模型综合各方法结果。

# 运行iPHoP
iphop predict \
    --fa_file viral_5kb.fa \
    --db_dir iphop_db/ \
    --out_dir iphop_output/ \
    --num_threads 16 \
    --min_score 90

# 参数说明
# --fa_file: 病毒序列FASTA
# --db_dir: 数据库路径
# --out_dir: 输出目录
# --num_threads: 线程数
# --min_score: 最低置信度阈值(90=宽松,95=严格)

# 使用自定义宿主数据库(可选,加入自有MAGs)
iphop add_to_db \
    --fna_dir custom_host_genomes/ \
    --gtdb_dir gtdb_taxonomy/ \
    --out_dir custom_db/ \
    --num_threads 16

# 使用自定义数据库预测
iphop predict \
    --fa_file viral_5kb.fa \
    --db_dir custom_db/ \
    --out_dir iphop_custom_output/ \
    --num_threads 16

第四步:解读输出结果

白话解释:iPHoP输出每个病毒序列的宿主预测结果,包括宿主的分类信息(门/纲/目/科/属/种)和预测置信度。高置信度的结果更可靠。

# 输出目录结构
ls iphop_output/
# Host_prediction_to_genus_m90.csv   # 属级别预测(主要结果)
# Host_prediction_to_genome_m90.csv  # 基因组级别预测
# Detailed_output_by_tool.csv        # 各工具的详细预测
# Summary.txt                         # 汇总统计

# 查看主要结果
head -5 iphop_output/Host_prediction_to_genus_m90.csv
import pandas as pd
import matplotlib.pyplot as plt

# 读取结果
host_pred = pd.read_csv("iphop_output/Host_prediction_to_genus_m90.csv")

# 查看列名
print(host_pred.columns.tolist())
# ['Virus', 'AAI to closest RaFAH reference', 'Host genus',
#  'Confidence score', 'List of methods', 'Host taxonomy']

# 基本统计
total_viruses = len(pd.read_csv("viral_5kb.fa.fai", sep="\t", header=None))
predicted = len(host_pred)
print(f"总病毒数: {total_viruses}")
print(f"成功预测数: {predicted}")
print(f"预测率: {predicted/total_viruses*100:.1f}%")

# 宿主分类分布
# 提取门级别
host_pred['Host_phylum'] = host_pred['Host taxonomy'].apply(
    lambda x: x.split(';')[1] if pd.notna(x) and ';' in str(x) else 'Unknown'
)

# Top 10宿主门
phylum_counts = host_pred['Host_phylum'].value_counts().head(10)
print("\nTop 10 宿主门:")
print(phylum_counts)

# 可视化
fig, axes = plt.subplots(1, 2, figsize=(14, 6))

# 宿主门分布
phylum_counts.plot(kind='barh', ax=axes[0], color='steelblue')
axes[0].set_xlabel('Number of Viruses')
axes[0].set_title('Host Phylum Distribution')
axes[0].invert_yaxis()

# 置信度分布
axes[1].hist(host_pred['Confidence score'], bins=30, edgecolor='black', alpha=0.7)
axes[1].set_xlabel('Confidence Score')
axes[1].set_ylabel('Count')
axes[1].set_title('Prediction Confidence Distribution')

plt.tight_layout()
plt.savefig('iphop_results.png', dpi=300)

第五步:与其他分析整合

# 整合iPHoP与geNomad结果
virus_info = pd.read_csv("genomad_output/contigs_virus_summary.tsv", sep="\t")
host_info = pd.read_csv("iphop_output/Host_prediction_to_genus_m90.csv")

# 合并
merged = virus_info.merge(host_info, left_on='seq_name', right_on='Virus', how='left')

# 输出整合表
merged[['seq_name', 'length', 'virus_score', 'taxonomy',
        'Host genus', 'Confidence score']].to_csv("virus_host_integrated.tsv",
                                                     sep="\t", index=False)

# 病毒-宿主网络数据
network_data = merged[['taxonomy', 'Host genus']].dropna()
network_data.to_csv("virus_host_network.tsv", sep="\t", index=False)

实战命令速查

# 完整流程
iphop predict --fa_file viruses.fa --db_dir iphop_db/ --out_dir output/ -t 16

# 宽松阈值(更多预测,精度略低)
iphop predict --fa_file viruses.fa --db_dir iphop_db/ --out_dir output_m75/ -t 16 --min_score 75

# 严格阈值(更少预测,精度更高)
iphop predict --fa_file viruses.fa --db_dir iphop_db/ --out_dir output_m95/ -t 16 --min_score 95

# 添加自定义宿主基因组
iphop add_to_db --fna_dir my_mags/ --gtdb_dir gtdb/ --out_dir custom_db/ -t 16

# 分割大文件并行处理
seqkit split2 -s 1000 viruses.fa -O split_dir/
for f in split_dir/*.fa; do
    iphop predict --fa_file $f --db_dir iphop_db/ --out_dir ${f%.fa}_out/ -t 4 &
done
wait
cat split_dir/*_out/Host_prediction_to_genus_m90.csv > all_predictions.csv

面试常问点

Q1: iPHoP整合了哪些宿主预测方法?各方法的原理是什么? A: iPHoP整合了至少6种方法:(1)BLAST直接比对已知病毒-宿主对;(2)CRISPR spacer匹配(宿主的CRISPR系统中记录了曾感染过的病毒序列);(3)WiSH基于k-mer组成相似性;(4)PHP基于蛋白质远程同源性;(5)VHM-net基于深度学习;(6)RaFAH基于随机森林模型。

Q2: CRISPR spacer方法是什么原理? A: 细菌的CRISPR-Cas免疫系统会将入侵噬菌体的DNA片段整合为spacer。通过比对病毒序列与已知宿主的CRISPR spacer数据库,如果匹配,说明该宿主曾经被该病毒感染过。这是最直接的证据之一。

Q3: iPHoP的预测准确率如何? A: 在属级别,高置信度(score≥90)预测的准确率约85%。降低阈值可增加预测比例但牺牲准确性。通常约30-50%的病毒序列能获得可靠的宿主预测,这反映了病毒多样性远超参考数据库的现实。

Q4: 如何提高预测率? A: (1)使用更长的病毒序列(≥5kb);(2)向数据库添加来自同一环境的MAGs;(3)降低置信度阈值(trade-off:准确率下降);(4)结合多种独立预测工具交叉验证。

Q5: iPHoP与HostPhinder/WiSH等单一方法相比有什么优势? A: iPHoP通过集成学习综合多种方法的优势。单一方法各有偏好(如CRISPR依赖数据库覆盖,k-mer方法对短序列效果差),整合后在不同场景下都有更稳定的表现。

易错点

  1. 数据库解压后空间不足:iPHoP数据库解压后约150GB,确保磁盘空间充足
  2. 短序列预测率低:<5kb的序列预测率和准确率显著下降
  3. 忽略自定义数据库:如果研究环境特殊(如极端环境),标准数据库可能覆盖不足,应添加自有MAGs
  4. 置信度阈值选择:论文中应明确说明使用的阈值,不同阈值结果差异很大
  5. 物种命名冲突:GTDB分类与NCBI分类可能不一致,注意统一

补充知识

宿主预测方法对比

方法类型优势劣势
CRISPR spacer序列匹配直接证据,高特异性依赖spacer数据库
BLAST同源搜索已知病毒-宿主对的扩展对新病毒无效
WiSHk-mer组成不依赖同源性准确率较低
PHP蛋白质同源性可检测远程同源计算量大
RaFAH机器学习综合基因组特征依赖训练数据

推荐工作流

  1. 病毒鉴定:geNomad → 获取病毒contigs
  2. 质量评估:CheckV → 评估完整性
  3. 过滤:保留中/高质量和≥5kb的序列
  4. 宿主预测:iPHoP → 获取宿主信息
  5. 分类注释:vConTACT2 → 病毒家族聚类
  6. 功能注释:DRAM-v → AMG和功能基因
  7. 丰度定量:CoverM → 各样本丰度