跳转至

宏病毒组分析

一句话概述

宏病毒组(Viromics)分析从环境或临床样本中鉴定和分析所有病毒序列——白话说就是:用宏基因组测序"一网打尽"样本中的所有病毒(包括已知的和未知的),然后搞清楚有哪些病毒、它们感染谁、干了什么。


核心知识点表格

知识点说明
VirSorter2机器学习病毒序列识别工具,支持dsDNA/ssDNA/RNA病毒
VIBRANT基于HMM的病毒识别和功能注释工具
CheckV病毒基因组质量评估(完整性、污染度)
geNomad2024年新工具,取代VirSorter2的趋势
DeepVirFinder深度学习病毒识别,对未知病毒敏感
vConTACT2病毒分类学工具,基于蛋白共享网络
iPHoP病毒宿主预测工具
DRAM-v病毒功能注释工具
ViroProfiler集成化病毒组分析流水线(Nextflow)
MVP模块化病毒组分析流水线(Python)

各步骤详解

第一步:理解宏病毒组实验流程

白话解释: 宏病毒组分析有两种主要来源:(1) 直接从宏基因组数据中挖掘病毒序列(shotgun metagenomics);(2) 先用物理/化学方法富集病毒颗粒再测序(viromics)。第二种方法病毒含量更高,但流程更复杂。

两种策略对比:
策略1 - 从宏基因组中挖病毒(简单):
  样本 → DNA提取 → 宏基因组测序 → 组装 → 识别病毒contigs

策略2 - 病毒组富集(专业):
  样本 → 过滤除去细菌/细胞 → DNase处理(去除游离DNA)
  → 病毒核酸提取 → 扩增(随机引物) → 测序 → 分析

第二步:序列组装与病毒识别

白话解释: 先把短reads组装成长contigs,然后用多种工具判断哪些contigs来自病毒。就像从一堆碎纸条中先拼好纸页,再判断哪些纸页是"病毒的身份证"。

# ===== 第一步:宏基因组组装 =====
# 质控
fastp \                                  # 质控过滤
  -i raw_R1.fq.gz -I raw_R2.fq.gz \     # 输入配对FASTQ
  -o clean_R1.fq.gz -O clean_R2.fq.gz \ # 输出清洗后FASTQ
  -h qc_report.html                     # 质控报告

# 去除宿主序列(如果是人类样本)
bowtie2 \                               # 比对到人类基因组
  -x /ref/human_bowtie2_index \          # 人类基因组索引
  -1 clean_R1.fq.gz -2 clean_R2.fq.gz \ # 清洗后的reads
  --un-conc-gz unmapped_%.fq.gz \        # 输出非人类reads
  -S /dev/null \                         # 不保存SAM
  -p 16                                  # 16线程

# 组装
megahit \                                # MEGAHIT宏基因组组装
  -1 unmapped_1.fq.gz \                  # 非宿主R1
  -2 unmapped_2.fq.gz \                  # 非宿主R2
  -o megahit_assembly/ \                 # 输出目录
  -t 32 \                                # 32线程
  --min-contig-len 1000                  # 最短contig 1000bp

# ===== 第二步:病毒识别(多工具策略)=====

# 工具1:VirSorter2
conda install -c bioconda virsorter      # 安装VirSorter2

virsorter run \                          # 运行VirSorter2
  -w vs2_output/ \                       # 工作目录
  -i megahit_assembly/final.contigs.fa \ # 输入contigs
  --min-length 5000 \                    # 最短5000bp
  --min-score 0.5 \                      # 最低得分0.5(高灵敏度)
  -j 16 \                                # 16线程
  all                                    # 检测所有病毒类型

# 工具2:VIBRANT
conda install -c bioconda vibrant        # 安装VIBRANT

VIBRANT_run.py \                         # 运行VIBRANT
  -i megahit_assembly/final.contigs.fa \ # 输入contigs
  -folder vibrant_output/ \              # 输出目录
  -t 16                                  # 16线程

# 工具3:DeepVirFinder(深度学习,对新病毒敏感)
python dvf.py \                          # 运行DeepVirFinder
  -i megahit_assembly/final.contigs.fa \ # 输入contigs
  -o dvf_output/ \                       # 输出目录
  -l 1000                                # 最短1000bp

第三步:CheckV质量评估

白话解释: 不是所有识别出来的"病毒序列"都可靠。CheckV检查:(1) 基因组是不是完整的?(2) 有没有被细菌基因污染?就像质检员检查产品质量。

# 安装CheckV
conda install -c bioconda checkv         # 安装
checkv download_database /db/checkv_db/  # 下载数据库

# 运行CheckV
checkv end_to_end \                      # 完整质量评估
  vs2_output/final-viral-combined.fa \   # 输入:VirSorter2识别的病毒序列
  checkv_output/ \                       # 输出目录
  -d /db/checkv_db/ \                    # 数据库路径
  -t 16                                  # 16线程

# CheckV输出质量分级:
# Complete   → 完整基因组(最好)
# High-quality → 高质量(>90%完整)
# Medium-quality → 中等质量(50-90%完整)
# Low-quality → 低质量(<50%完整)
# Not-determined → 无法判断

# 过滤高质量病毒基因组
# 保留 Medium-quality 及以上
awk -F'\t' '$8=="Complete" || $8=="High-quality" || $8=="Medium-quality"' \
  checkv_output/quality_summary.tsv \    # 输入质量报告
  > high_quality_viruses.tsv             # 输出高质量列表

# 去除宿主污染区域(CheckV会标记)
cat checkv_output/proviruses.fna \       # 已去除宿主区域的前噬菌体
    checkv_output/viruses.fna \          # 非前噬菌体的病毒
  > clean_viruses.fna                    # 合并为干净的病毒序列集

第四步:病毒分类与聚类

白话解释: 给识别出来的病毒"上户口"——看它们属于哪个科、哪个属,并把相似的病毒聚在一起。

# ===== vConTACT2分类 =====
conda install -c bioconda vcontact2      # 安装

# 第一步:基因预测
prodigal \                               # 预测病毒基因
  -i clean_viruses.fna \                 # 输入病毒序列
  -a viral_proteins.faa \                # 输出蛋白序列
  -f gff \                               # GFF格式
  -p meta \                              # 宏基因组模式
  -o viral_genes.gff                     # 输出GFF

# 第二步:准备vConTACT2输入
# 需要gene_to_genome.csv映射文件
# protein_id, contig_id, keywords
# prot_1, virus_1, none
# prot_2, virus_1, none

# 第三步:运行vConTACT2
vcontact2 \                              # 分类命令
  --raw-proteins viral_proteins.faa \    # 蛋白序列
  --rel-mode Diamond \                   # 使用DIAMOND比对
  --proteins-fp gene_to_genome.csv \     # 蛋白-基因组映射
  --db ProkaryoticViralRefSeq211 \       # 参考数据库
  --output-dir vcontact2_output/ \       # 输出目录
  -t 16                                  # 16线程

# ===== 种水平去冗余 =====
# 用dRep或CD-HIT按95% ANI聚类为vOTUs
cd-hit-est \                             # CD-HIT-EST聚类
  -i clean_viruses.fna \                 # 输入病毒序列
  -o vOTUs.fna \                         # 输出代表序列
  -c 0.95 \                              # 95% identity阈值
  -aS 0.85 \                             # 85%覆盖度阈值
  -T 16 \                                # 16线程
  -M 0                                   # 不限内存

第五步:宿主预测与功能注释

白话解释: 搞清楚这些病毒感染的是哪些细菌(宿主预测),以及病毒携带了什么功能基因(功能注释)。

# ===== iPHoP宿主预测 =====
conda install -c bioconda iphop          # 安装iPHoP

iphop predict \                          # 预测宿主
  --fa_file clean_viruses.fna \          # 输入病毒序列
  --db_dir /db/iphop_db/ \               # iPHoP数据库
  --out_dir iphop_output/ \              # 输出目录
  -t 16                                  # 16线程

# ===== DRAM-v功能注释 =====
conda install -c bioconda dram           # 安装DRAM

# 准备DRAM-v输入(需要VirSorter2的affi-contigs.tab)
DRAM-v.py annotate \                     # 病毒功能注释
  -i clean_viruses.fna \                 # 输入病毒序列
  -v vs2_output/final-viral-score.tsv \  # VirSorter2评分文件
  -o dramv_output/ \                     # 输出目录
  --threads 16                           # 16线程

# 生成DRAM-v汇总
DRAM-v.py distill \                      # 生成汇总报告
  -i dramv_output/annotations.tsv \      # 注释文件
  -o dramv_distill/                      # 输出汇总目录

# 主要关注的辅助代谢基因(AMG)类别:
# - 碳代谢相关
# - 光合作用相关
# - 核苷酸代谢
# - 抗生素耐药基因

常见报错与解决

报错原因解决方案
VirSorter2: database not found没下载数据库运行virsorter setup --db-dir /path/to/db
CheckV: too many contigs输入序列太多处理慢先过滤<5kb的短contigs
vConTACT2: memory error蛋白序列太多先去冗余减少数量
iPHoP: no hosts predicted大部分病毒是新发现的正常现象,增加数据库或降低阈值
VIBRANT: scikit-learn versionPython版本不兼容使用conda创建独立环境
prodigal: meta mode warning序列太短过滤<1500bp的contigs

速查表

# ========== 宏病毒组分析速查 ==========

# 1. 病毒识别(推荐多工具+CheckV)
virsorter run -i contigs.fa -w vs2/ --min-score 0.5 all  # VirSorter2
VIBRANT_run.py -i contigs.fa -folder vibrant/             # VIBRANT
checkv end_to_end viral.fa checkv/ -d DB                   # 质量评估

# 2. 去冗余(vOTU定义:95% ANI + 85% AF)
cd-hit-est -i viral.fa -o vOTUs.fa -c 0.95 -aS 0.85

# 3. 分类
vcontact2 --raw-proteins prot.faa --rel-mode Diamond --db ProkaryoticViralRefSeq211

# 4. 宿主预测
iphop predict --fa_file viral.fa --db_dir DB --out_dir result/

# 5. 功能注释
DRAM-v.py annotate -i viral.fa -v vs2_score.tsv -o dram/
DRAM-v.py distill -i dram/annotations.tsv -o distill/

面试高频问题

Q1: VirSorter2和VIBRANT有什么区别?哪个更好?

VirSorter2用机器学习(随机森林),支持dsDNA/ssDNA/RNA病毒等多种类型。VIBRANT用隐马尔可夫模型(HMM),同时提供功能注释。Benchmark显示两者F1分数都达0.93,建议同时使用再用CheckV过滤。2024年geNomad新工具综合了两者优点,可能成为未来主流。

Q2: CheckV的质量分级是什么意思?

Complete=完整基因组;High-quality=>90%完整且含所有必需基因;Medium-quality=50-90%完整;Low-quality=<50%完整。发表文章通常需要Medium及以上质量。CheckV还检测宿主-病毒嵌合区域(proviruses),帮你去掉细菌基因的污染。

Q3: 什么是vOTU?怎么定义?

vOTU(virus Operational Taxonomic Unit)类似细菌的OTU。定义标准:95% ANI(平均核苷酸一致性)+ 85% AF(对齐覆盖度)。也就是说,两个病毒序列有95%以上的序列相似且覆盖了彼此85%以上的长度,就归为同一个vOTU(大致对应种水平)。

Q4: 2025年长读长测序对宏病毒组研究有什么影响?

2025年Nature发表的研究显示,长读长宏基因组(Nanopore/PacBio)在噬菌体研究中有重大优势:(1) 82%的整合噬菌体(prophage)在短读长组装中被碎片化,长读长能完整捕获;(2) 发现同一噬菌体可以整合到不同科的细菌中,挑战了噬菌体宿主特异性的传统认知。

Q5: 辅助代谢基因(AMG)是什么?为什么重要?

AMG是噬菌体携带的宿主代谢基因(如光合作用基因、碳代谢基因)。噬菌体感染细菌后表达这些基因来"劫持"宿主代谢,为自己的复制提供能量和原料。AMG的发现说明噬菌体不只是"杀手",还能重编程宿主的代谢功能,影响整个生态系统的物质循环。