跳转至

173_宏基因组病毒鉴定geNomad

一句话概述

geNomad是利用深度学习对宏基因组contigs进行病毒和质粒序列鉴定与分类的工具,替代了传统VirSorter/DeepVirFinder等方法,在灵敏度和特异性上均有显著提升。

核心知识点表格

知识点说明
geNomad定位基于Transformer的序列分类器,可同时识别病毒和质粒
核心模型使用蛋白质标记基因+基因组上下文进行分类
输入文件宏基因组组装后的contigs(FASTA格式)
输出结果病毒/质粒/染色体分类、病毒分类taxonomy、基因注释
依赖数据库geNomad内置数据库(~3GB),含标记基因HMM模型
替代工具VirSorter2、DeepVirFinder、VIBRANT、CheckV
适用场景宏基因组/宏病毒组病毒序列挖掘、质粒鉴定
最低序列长度建议≥1000bp,≥2000bp效果更佳

步骤详解

第一步:安装geNomad

白话解释:geNomad通过conda或pip安装,安装后需要下载专用数据库。数据库比较大,需要预留足够的磁盘空间。

技术细节:geNomad基于PyTorch框架构建,支持CPU和GPU运行。数据库包含了从大量已知病毒和质粒序列中训练得到的标记基因模型。

# 方法1:conda安装(推荐)
conda create -n genomad -c conda-forge -c bioconda genomad
conda activate genomad

# 方法2:pip安装
pip install genomad

# 下载数据库
genomad download-database ./genomad_db

# 验证安装
genomad --version
genomad --help

第二步:准备输入数据

白话解释:输入数据是宏基因组组装后的contigs文件。通常先通过MEGAHIT或metaSPAdes完成组装,再用geNomad进行病毒鉴定。建议过滤掉短序列。

技术细节:geNomad对contigs长度有一定要求。虽然理论上可以处理任意长度的序列,但太短的序列(<1000bp)包含的基因信息不足,分类准确率会下降。

# 组装宏基因组(如尚未组装)
megahit -1 sample_R1.fq.gz -2 sample_R2.fq.gz -o megahit_out -t 16

# 过滤短序列(保留≥1000bp)
seqkit seq -m 1000 megahit_out/final.contigs.fa > contigs_1k.fa

# 查看序列统计
seqkit stats contigs_1k.fa

第三步:运行geNomad主流程

白话解释:geNomad的end-to-end命令一步完成所有分析,包括基因预测、标记基因比对、分类打分和病毒分类。也可以分步运行各个模块。

技术细节end-to-end命令按顺序执行:(1) annotate - 基因预测与标记基因注释; (2) find-proviruses - 前噬菌体区域检测; (3) marker-classification - 基于标记基因的分类; (4) nn-classification - 基于神经网络的分类; (5) aggregated-classification - 整合分类结果; (6) score-calibration - 得分校准; (7) summary - 汇总输出。

# 一步完成全部分析
genomad end-to-end \
    contigs_1k.fa \
    genomad_output \
    genomad_db/genomad_db \
    --threads 16 \
    --cleanup \
    --splits 8

# 参数说明:
# --threads: 使用线程数
# --cleanup: 完成后清理中间文件
# --splits: 将数据库分成多份降低内存使用

# 如果只想找病毒(不找质粒)
genomad end-to-end \
    contigs_1k.fa \
    genomad_output \
    genomad_db/genomad_db \
    --threads 16 \
    --disable-find-proviruses  # 跳过前噬菌体检测(加速)

第四步:理解输出文件

白话解释:geNomad输出多个文件夹和汇总文件。最重要的是_summary目录中的分类结果表和病毒/质粒序列FASTA文件。

技术细节:输出结构包括各步骤的中间结果和最终汇总。分类得分经过校准,virus_score和plasmid_score在0-1之间,默认阈值0.7。

# 主要输出文件结构
genomad_output/
├── contigs_1k_annotate/          # 基因注释结果
   ├── contigs_1k_genes.tsv      # 预测的基因
   ├── contigs_1k_taxonomy.tsv   # 分类信息
   └── contigs_1k_mmseqs2/       # MMseqs2比对结果
├── contigs_1k_find_proviruses/   # 前噬菌体检测
   ├── contigs_1k_provirus.tsv   # 前噬菌体列表
   └── contigs_1k_provirus.fna   # 前噬菌体序列
├── contigs_1k_summary/           # 汇总结果(最重要)
   ├── contigs_1k_virus_summary.tsv      # 病毒汇总
   ├── contigs_1k_plasmid_summary.tsv    # 质粒汇总
   ├── contigs_1k_virus.fna              # 病毒序列
   └── contigs_1k_plasmid.fna            # 质粒序列
└── contigs_1k_aggregated_classification/  # 整合分类

# 查看病毒汇总表
head -5 genomad_output/contigs_1k_summary/contigs_1k_virus_summary.tsv
# 关键列:seq_name, length, topology, coordinates, n_genes,
#         genetic_code, virus_score, fdr, taxonomy

第五步:结果过滤与下游分析

白话解释:根据得分和FDR阈值筛选高置信度的病毒序列,然后可以用CheckV评估病毒基因组的完整性,用vConTACT2进行病毒分类学分析。

技术细节:默认的score阈值0.7通常足够严格。可以进一步结合FDR(假发现率)进行过滤。CheckV是评估病毒基因组质量的标准工具。

# 用Python过滤高置信病毒
python3 << 'EOF'
import pandas as pd

virus = pd.read_csv(
    "genomad_output/contigs_1k_summary/contigs_1k_virus_summary.tsv",
    sep="\t"
)
# 筛选条件:virus_score >= 0.8 且 FDR <= 0.05
high_conf = virus[(virus['virus_score'] >= 0.8) & (virus['fdr'] <= 0.05)]
print(f"高置信病毒序列数: {len(high_conf)}")
high_conf.to_csv("high_confidence_viruses.tsv", sep="\t", index=False)

# 统计分类分布
print(virus['taxonomy'].value_counts().head(10))
EOF

# 用CheckV评估病毒基因组质量
checkv end_to_end \
    genomad_output/contigs_1k_summary/contigs_1k_virus.fna \
    checkv_output \
    -d /path/to/checkv-db \
    -t 16

# 查看CheckV质量评估结果
cut -f1,6,7,8 checkv_output/quality_summary.tsv | head

第六步:可视化与报告

白话解释:将结果整理成图表便于发表和汇报。常见的可视化包括病毒分类组成、序列长度分布、得分分布等。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取结果
virus = pd.read_csv(
    "genomad_output/contigs_1k_summary/contigs_1k_virus_summary.tsv",
    sep="\t"
)

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# 1. 得分分布
axes[0].hist(virus['virus_score'], bins=30, edgecolor='black', alpha=0.7)
axes[0].set_xlabel('Virus Score')
axes[0].set_ylabel('Count')
axes[0].set_title('Score Distribution')
axes[0].axvline(x=0.7, color='red', linestyle='--', label='Threshold')
axes[0].legend()

# 2. 序列长度分布
axes[1].hist(virus['length'], bins=50, edgecolor='black', alpha=0.7, color='green')
axes[1].set_xlabel('Length (bp)')
axes[1].set_ylabel('Count')
axes[1].set_title('Virus Contig Length')
axes[1].set_xscale('log')

# 3. 拓扑类型
topology_counts = virus['topology'].value_counts()
axes[2].pie(topology_counts, labels=topology_counts.index, autopct='%1.1f%%')
axes[2].set_title('Genome Topology')

plt.tight_layout()
plt.savefig('genomad_summary.png', dpi=300, bbox_inches='tight')
plt.show()

实战命令速查

# 完整流程一键运行
genomad end-to-end contigs.fa output genomad_db --threads 16 --cleanup

# 仅注释(不分类)
genomad annotate contigs.fa output genomad_db --threads 16

# 单独运行前噬菌体检测
genomad find-proviruses contigs.fa output genomad_db --threads 16

# 自定义得分阈值
genomad score-calibration contigs.fa output genomad_db --min-score 0.8

# 配合CheckV使用
checkv end_to_end output/contigs_virus.fna checkv_out -d checkv_db -t 16

# 提取特定分类的病毒
grep "Caudoviricetes" output/contigs_virus_summary.tsv > caudovirales.tsv

# 批量处理多个样本
for sample in sample1 sample2 sample3; do
    genomad end-to-end ${sample}_contigs.fa ${sample}_genomad genomad_db -t 16
done

面试常问点

Q1: geNomad相比VirSorter2/DeepVirFinder有什么优势? A: geNomad使用Transformer架构处理蛋白质标记基因,在灵敏度和特异性上均优于前代工具。它能同时检测病毒和质粒,内置分类注释功能,且经过更大规模的训练数据训练。VirSorter2基于随机森林,DeepVirFinder基于CNN,都只关注病毒检测。

Q2: geNomad的最低输入序列长度要求是多少? A: 虽然没有硬性下限,但建议≥1000bp。2000bp以上的序列包含足够多的基因信息,分类结果更可靠。短于500bp的序列基本无法提供有效分类信息。

Q3: 如何区分真正的病毒和前噬菌体? A: geNomad的find-proviruses模块会检测整合到宿主基因组中的前噬菌体区域。输出中会标注序列是完整病毒还是前噬菌体片段。前噬菌体会从宿主contig中被切割出来单独报告。

Q4: virus_score和FDR分别代表什么? A: virus_score是模型对序列为病毒的置信度(0-1),综合了标记基因分类和神经网络分类的结果。FDR(假发现率)是经过校准后的统计指标,表示在该得分下预期的错误发现比例。通常要求virus_score≥0.7且FDR≤0.05。

Q5: geNomad能用于真核病毒检测吗? A: 可以,但效果不如噬菌体。geNomad的训练数据主要来自噬菌体和原核病毒,对真核病毒的覆盖相对较少。对于真核病毒的专门检测,可以考虑结合其他工具如ViralRecall。

Q6: 如何处理输出中"Unclassified"类别的病毒? A: 大量"未分类"是正常现象,反映了病毒基因组数据库的不完整性。可以用vConTACT2等工具进行聚类分析,将未分类病毒归入病毒簇,或利用标记基因的远程同源性进行推断。

Q7: geNomad的计算资源需求如何? A: 对于中等规模的宏基因组(10万条contigs),16线程大约需要1-4小时。内存需求取决于数据库分割数(--splits),推荐至少16GB RAM。GPU可以加速神经网络分类步骤。

易错点

  1. 数据库版本不匹配:geNomad软件版本和数据库版本必须匹配,升级软件后需重新下载数据库
  2. 短序列噪声:未过滤短序列(<1000bp)会产生大量低置信度结果,浪费计算资源
  3. 前噬菌体坐标混淆:前噬菌体的坐标是相对于原始contig的,提取序列时注意坐标转换
  4. 阈值设置过松:默认的0.7阈值在某些数据集中可能过松,建议结合FDR共同过滤
  5. 忽略质粒结果:许多用户只关注病毒而忽略质粒检测结果,但质粒在宏基因组中同样重要
  6. 内存不足导致崩溃:大数据集不使用--splits参数可能导致内存溢出,建议设置splits=8

补充知识

geNomad与其他工具的对比

工具方法病毒检测质粒检测分类注释
geNomadTransformer
VirSorter2随机森林有限
DeepVirFinderCNN
VIBRANT神经网络有限
PlasClass逻辑回归

推荐工作流

  1. 组装 → MEGAHIT/metaSPAdes
  2. 病毒鉴定 → geNomad
  3. 质量评估 → CheckV
  4. 去冗余 → cd-hit-est / Galah
  5. 分类注释 → vConTACT2 / geNomad taxonomy
  6. 功能注释 → DRAM-v
  7. 宿主预测 → iPHoP
  8. 丰度定量 → CoverM / bowtie2 + samtools

文献参考

  • Camargo AP et al. (2024) Identification of mobile genetic elements with geNomad. Nature Biotechnology.
  • 建议同时阅读CheckV和iPHoP的文献,构建完整的宏病毒组分析知识体系。