605 噬菌体宏基因组分析(Phage Viromics)¶
一句话概述: 从宏基因组数据中鉴定噬菌体(感染细菌的病毒)序列,用VirSorter2、VIBRANT、CheckV等工具实现"病毒猎手"式分析,揭示肠道病毒组的多样性和功能。
核心知识点速查表¶
| 知识点 | 白话解释 |
|---|---|
| 噬菌体 | 专门感染细菌的病毒,是肠道中数量最多的生物实体 |
| 病毒组(virome) | 某个环境中所有病毒的集合,包括噬菌体和真核病毒 |
| VirSorter2 | 用机器学习鉴定病毒序列的工具,支持多种病毒类型 |
| VIBRANT | 基于蛋白质注释鉴定病毒的工具,同时做功能分析 |
| CheckV | 评估病毒基因组质量(完整性、宿主污染)的专用QC工具 |
| geNomad | 2024年兴起的新工具,整合深度学习+CRF,同时鉴定病毒和质粒 |
| 溶原性噬菌体 | 把自己DNA整合到宿主基因组中的噬菌体(前噬菌体/provirus) |
| 裂解性噬菌体 | 感染后直接裂解宿主细胞的噬菌体 |
| iPHoP | 预测病毒宿主(这个噬菌体感染哪个细菌)的工具 |
| DRAM-v | 专门对病毒基因组做功能注释的工具 |
一、为什么要研究噬菌体?¶
白话解释:
肠道里的噬菌体数量比细菌还多(约10^13个),它们通过: 1. 杀死细菌:调控菌群组成("杀手效应") 2. 传递基因:通过转导把毒力基因/耐药基因从一个细菌传到另一个细菌 3. 调控代谢:携带辅助代谢基因(AMG),影响宿主细菌的代谢
但传统16S和宏基因组分析往往忽略病毒,因为: - 病毒没有通用标记基因(不像细菌有16S rRNA) - 病毒基因组中大量基因功能未知("dark matter",暗物质) - 需要专门的工具来鉴定和分析
二、分析流程概览¶
宏基因组组装(MEGAHIT/SPAdes)
→ 病毒序列鉴定(VirSorter2 + VIBRANT + geNomad)
→ 质量控制(CheckV)
→ 共识过滤(多工具交集)
→ 去冗余(CD-HIT/vRhyme)
→ 宿主预测(iPHoP)
→ 功能注释(DRAM-v)
→ 分类学分类(vConTACT2/geNomad)
→ 定量(CoverM)
三、详细分析步骤¶
3.1 宏基因组组装¶
# ========== 步骤1:组装(获取contigs) ==========
# 病毒鉴定需要较长的contig,建议组装后过滤
# 用MEGAHIT组装
megahit \
-1 clean_R1.fastq.gz \ # 输入:质控后正向读段
-2 clean_R2.fastq.gz \ # 输入:质控后反向读段
-o megahit_output/ \ # 输出目录
-t 32 \ # 32个线程
--min-contig-len 1000 \ # 最短contig 1000bp(病毒基因组一般>3kb)
--k-min 21 \ # 最小k-mer值
--k-max 141 \ # 最大k-mer值
--k-step 12 # k-mer步长
# 过滤短contig(病毒鉴定建议>5kb)
# 用seqkit过滤
seqkit seq \
megahit_output/final.contigs.fa \ # 输入:组装结果
-m 5000 \ # 最短5000bp
-o contigs_5kb.fa # 输出:过滤后的contigs
echo ">=5kb的contig数:" && grep -c ">" contigs_5kb.fa # 统计数量
3.2 VirSorter2鉴定病毒¶
# ========== 步骤2:VirSorter2 — 病毒序列鉴定 ==========
# VirSorter2用机器学习模型,支持dsDNA噬菌体、ssDNA病毒、RNA病毒等
# 安装VirSorter2
conda create -n vs2 -c conda-forge -c bioconda virsorter=2 # 创建conda环境
conda activate vs2 # 激活环境
# 下载数据库(首次使用需要)
virsorter setup \
-d /db/virsorter2/ \ # 数据库安装路径
-j 8 # 8个线程下载
# 运行VirSorter2
virsorter run \
-w vs2_output/ \ # 输出目录
-i contigs_5kb.fa \ # 输入:>=5kb的contigs
-d /db/virsorter2/ \ # 数据库路径
--include-groups dsDNAphage,ssDNA \ # 鉴定的病毒类型
--min-length 5000 \ # 最短序列5000bp
--min-score 0.5 \ # 最低分数阈值(默认0.5,高灵敏度)
--keep-original-seq \ # 保留原始序列(不切割前噬菌体)
-j 16 \ # 16个线程
--provirus-off # 暂时关闭前噬菌体检测(后续用CheckV做)
# 输出解读:
# vs2_output/final-viral-score.tsv — 每条序列的病毒分数和分组
# vs2_output/final-viral-combined.fa — 鉴定为病毒的序列
# 查看结果分类
# max_score: 病毒分数(0-1,越高越可能是病毒)
# max_score_group: 最可能的病毒类型
head vs2_output/final-viral-score.tsv
3.3 VIBRANT鉴定病毒¶
# ========== 步骤3:VIBRANT — 第二轮病毒鉴定 ==========
# VIBRANT基于蛋白注释(KEGG/VOG/Pfam)来鉴定病毒
# 同时提供功能注释和基因组质量评估
# 安装VIBRANT
conda install -c bioconda vibrant # 安装
# 下载数据库
download-db.sh # VIBRANT自带的数据库下载脚本
# 运行VIBRANT
VIBRANT_run.py \
-i contigs_5kb.fa \ # 输入:>=5kb的contigs
-folder vibrant_output/ \ # 输出目录
-t 16 \ # 16个线程
-l 5000 \ # 最短序列5000bp
-virome # 如果样本是纯virome测序加这个参数
# 如果是普通宏基因组,去掉-virome
# VIBRANT输出结构:
# vibrant_output/VIBRANT_phages_*/ — 鉴定为噬菌体的序列
# vibrant_output/VIBRANT_results_*/ — 详细结果(注释、质量等)
# 查看鉴定结果
echo "VIBRANT鉴定的噬菌体数:"
grep -c ">" vibrant_output/VIBRANT_phages_contigs_5kb/contigs_5kb.phages_combined.fna
3.4 CheckV质量控制¶
# ========== 步骤4:CheckV — 病毒基因组质量评估 ==========
# CheckV做两件核心事情:
# 1. 评估基因组完整性(完整、高质量、中质量、低质量)
# 2. 去除宿主污染区域(trim掉细菌序列)
# 安装CheckV
conda install -c bioconda checkv # 安装
# 下载数据库
checkv download_database /db/checkv/ # 下载数据库
# 先合并VirSorter2和VIBRANT的结果
cat vs2_output/final-viral-combined.fa \
vibrant_output/VIBRANT_phages_*/contigs_5kb.phages_combined.fna \
> all_viral_candidates.fa # 合并所有候选病毒序列
# 去重复序列名
seqkit rmdup all_viral_candidates.fa \ # 去除重复序列
-s \ # 按序列去重
-o viral_candidates_dedup.fa # 输出
# 运行CheckV
checkv end_to_end \
viral_candidates_dedup.fa \ # 输入:候选病毒序列
checkv_output/ \ # 输出目录
-d /db/checkv/ \ # 数据库路径
-t 16 # 16个线程
# CheckV输出解读:
# quality_summary.tsv — 核心结果,每条序列的质量等级
# proviruses.fna — 前噬菌体序列(去除了宿主区域)
# viruses.fna — 纯病毒序列
# 查看质量分布
cut -f8 checkv_output/quality_summary.tsv | sort | uniq -c | sort -rn
# 质量等级:Complete > High-quality > Medium-quality > Low-quality > Not-determined
3.5 共识过滤(提高可靠性)¶
# ========== 步骤5:共识过滤 — 只保留多工具都认可的病毒 ==========
import pandas as pd # 导入pandas
# 读取各工具的鉴定结果
vs2_ids = set() # VirSorter2鉴定的序列ID集合
with open("vs2_output/final-viral-combined.fa") as f:
for line in f:
if line.startswith(">"):
vs2_ids.add(line.strip().split()[0][1:]) # 提取序列ID
vibrant_ids = set() # VIBRANT鉴定的序列ID集合
with open("vibrant_output/VIBRANT_phages_contigs_5kb/contigs_5kb.phages_combined.fna") as f:
for line in f:
if line.startswith(">"):
vibrant_ids.add(line.strip().split()[0][1:])
# 读取CheckV质量评估结果
checkv = pd.read_csv("checkv_output/quality_summary.tsv", sep="\t") # 读取CheckV结果
# 策略1:严格共识(VirSorter2 AND VIBRANT 都鉴定)
consensus_strict = vs2_ids & vibrant_ids # 取交集
print(f"严格共识: {len(consensus_strict)} 条病毒序列")
# 策略2:基于CheckV质量过滤
# 保留中质量以上 + 至少有1个病毒基因的序列
quality_pass = checkv[
(checkv["checkv_quality"].isin(["Complete", "High-quality", "Medium-quality"])) | # 中等质量以上
(checkv["viral_genes"] >= 1) # 或至少有1个病毒基因
]["contig_id"].tolist()
print(f"CheckV质量过滤: {len(quality_pass)} 条病毒序列")
# 最终保留:共识 + 质量过滤
final_viruses = set(quality_pass) & (vs2_ids | vibrant_ids) # 至少一个工具鉴定 + 质量通过
print(f"最终保留: {len(final_viruses)} 条高可信度病毒序列")
# 提取最终的病毒序列
with open("final_viral_sequences.txt", "w") as f: # 写入最终序列ID列表
for vid in final_viruses:
f.write(vid + "\n")
# 用seqkit提取最终病毒序列
seqkit grep \
-f final_viral_sequences.txt \ # 按ID列表筛选
checkv_output/combined.fna \ # 从CheckV的输出中提取
-o final_viruses.fa # 最终的病毒序列文件
echo "最终病毒序列数:" && grep -c ">" final_viruses.fa
3.6 去冗余与分箱¶
# ========== 步骤6:去冗余(Dereplication) ==========
# 如果有多个样本,需要将所有样本的病毒序列去冗余
# 方法1:CD-HIT去冗余(简单直接)
cd-hit-est \
-i final_viruses.fa \ # 输入:所有样本合并的病毒序列
-o viral_clusters.fa \ # 输出:去冗余后的代表序列
-c 0.95 \ # 95%序列一致性阈值(同一种病毒)
-aS 0.85 \ # 较短序列的85%被覆盖
-n 10 \ # 词长
-M 16000 \ # 内存16G
-T 16 # 16线程
# 方法2:vRhyme分箱(将碎片化的病毒基因组拼回完整基因组)
vRhyme \
-i final_viruses.fa \ # 输入:病毒序列
-o vrhyme_output/ \ # 输出目录
-b mapped_reads.bam \ # BAM比对文件(用于覆盖度信息)
-t 16 # 16线程
3.7 宿主预测与功能注释¶
# ========== 步骤7:宿主预测(这个噬菌体感染谁?) ==========
# iPHoP整合多种方法预测病毒宿主
iphop predict \
--fa_file viral_clusters.fa \ # 输入:病毒序列
--out_folder iphop_output/ \ # 输出目录
--db_dir /db/iphop/ \ # iPHoP数据库
--num_threads 16 # 16线程
# iPHoP输出中最重要的文件:
# Host_prediction_to_genus_m90.csv — 属水平的宿主预测
# ========== 步骤8:功能注释(DRAM-v) ==========
# DRAM-v专门对病毒基因组做注释,特别关注辅助代谢基因(AMG)
DRAM-v.py annotate \
-i viral_clusters.fa \ # 输入:病毒序列
-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/ # 输出目录
# DRAM-v特别关注的AMG(辅助代谢基因):
# 这些基因被噬菌体"偷"来帮助宿主提高代谢效率
# 常见AMG:光合作用、碳固定、硫代谢、核苷酸合成相关基因
3.8 病毒定量¶
# ========== 步骤9:定量(用CoverM计算覆盖度) ==========
# 将reads比对到病毒序列
bowtie2-build viral_clusters.fa viral_index # 建立索引
bowtie2 \
-x viral_index \ # 索引
-1 clean_R1.fastq.gz \ # 正向读段
-2 clean_R2.fastq.gz \ # 反向读段
--threads 16 \ # 16线程
--no-unal \ # 不输出未比对的reads
| samtools sort -@ 8 -o mapped.bam # 排序并输出BAM
samtools index mapped.bam # 建立BAM索引
# 用CoverM计算RPKM
coverm genome \
-b mapped.bam \ # 输入:BAM文件
--genome-fasta-files viral_clusters.fa \ # 病毒基因组
-m rpkm \ # 计算RPKM
-o viral_abundance.tsv \ # 输出:丰度表
--min-covered-fraction 0 # 最小覆盖比例
四、新趋势:geNomad(2024)¶
# ========== geNomad:一站式病毒+质粒鉴定 ==========
# 2024年Nature Biotechnology发表,越来越多流程用它替代VirSorter2
# 安装
conda install -c bioconda genomad # 安装geNomad
# 下载数据库
genomad download-database /db/genomad/ # 下载
# 运行geNomad
genomad end-to-end \
contigs_5kb.fa \ # 输入:contigs
genomad_output/ \ # 输出目录
/db/genomad/genomad_db \ # 数据库路径
--threads 16 \ # 16线程
--cleanup # 清理临时文件
# geNomad优势:
# 1. 同时鉴定病毒和质粒
# 2. 自带分类学分类
# 3. 集成CRF模型,前噬菌体边界检测更准
# 4. 速度比VirSorter2快
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
VirSorter2数据库下载失败 | 网络问题或磁盘空间不足 | 检查网络和磁盘(数据库约20GB),用代理下载 |
VirSorter2运行极慢 | contig数量太多 | 先过滤<5kb的contig,减少输入量 |
VIBRANT: No phages found | 序列太短或非病毒 | 检查输入序列长度,确保>5kb |
CheckV: database not found | 数据库路径错误 | 用checkv download_database重新下载 |
iPHoP内存不足 | 数据库太大 | 至少需要64G内存,或使用reduced版本数据库 |
DRAM-v需要VirSorter2输入 | DRAM-v依赖VirSorter2的分数文件 | 必须先跑VirSorter2,用其输出作为DRAM-v的输入 |
contig名有特殊字符 | 组装软件的命名规则 | 用seqkit replace统一contig命名 |
速查表¶
========== 噬菌体宏基因组标准流程 ==========
组装(MEGAHIT) → 鉴定(VirSorter2+VIBRANT+geNomad)
→ 质控(CheckV) → 共识过滤 → 去冗余(CD-HIT)
→ 宿主预测(iPHoP) → 功能注释(DRAM-v)
→ 分类(vConTACT2/geNomad) → 定量(CoverM)
========== 核心工具矩阵 ==========
病毒鉴定 :VirSorter2 / VIBRANT / geNomad / DeepVirFinder
质量评估 :CheckV(必用)
宿主预测 :iPHoP / CHERRY / WIsH
功能注释 :DRAM-v / Pharokka
分类学 :vConTACT2 / geNomad / PhaGCN
去冗余 :CD-HIT-EST / dRep
分箱 :vRhyme
定量 :CoverM / Bowtie2+samtools
整合流程 :MVP / ViWrap / ViroProfiler
========== 病毒基因组质量等级(CheckV) ==========
Complete :完整基因组(100%完整度)
High-quality :>90%完整度
Medium-quality :50-90%完整度
Low-quality :<50%完整度
Not-determined :无法判断
========== 推荐共识策略 ==========
高可信度:VirSorter2 ∩ VIBRANT ∩ CheckV(medium+)
中可信度:(VirSorter2 ∪ VIBRANT) ∩ CheckV(至少1个viral gene)
探索性 :任一工具鉴定 + CheckV不含host gene
面试高频问题¶
Q1:VirSorter2和VIBRANT有什么区别?为什么要同时用?¶
答: - VirSorter2:基于机器学习,用基因组特征(基因密度、链偏好性等)来判断是否是病毒。灵敏度高但假阳性也高 - VIBRANT:基于蛋白注释,将预测的蛋白比对到病毒标记基因数据库(VOG/Pfam/KEGG)。更保守但准确 - 为什么同时用:两个工具的原理不同,取交集可以大幅降低假阳性。2024年的最佳实践是两者取交集,再用CheckV做质量过滤
Q2:CheckV在噬菌体分析中的作用是什么?¶
答: CheckV做两件核心事情: 1. 评估完整性:用参考基因组和AAI(氨基酸一致性)估计病毒基因组的完整度,分为Complete/High/Medium/Low四个等级 2. 去除宿主污染:对于前噬菌体(整合在细菌基因组中的病毒),CheckV会识别病毒-宿主边界,去除两端的宿主序列
这就像买手机前先验货——鉴定出来的"病毒"可能是假的或者质量差的,CheckV帮你筛选。
Q3:什么是AMG(辅助代谢基因)?为什么在噬菌体研究中重要?¶
答: AMG(Auxiliary Metabolic Genes)是噬菌体从宿主"偷"来的代谢基因。噬菌体携带这些基因是为了在感染期间增强宿主的代谢能力,产生更多的核苷酸等原料来复制自己的基因组。
重要性: - AMG可以改变宿主细菌的代谢表型(光合作用、碳代谢、硫代谢等) - 在生态层面,AMG影响整个微生物群落的代谢功能 - 在T2D等疾病研究中,噬菌体携带的AMG可能影响肠道代谢
检测AMG的工具:DRAM-v(DRAM的病毒版本)
Q4:geNomad相比VirSorter2有什么优势?¶
答: geNomad是2024年发表的新工具,主要优势: 1. 多功能:同时鉴定病毒和质粒(VirSorter2只做病毒) 2. 更准确:用深度学习+CRF模型,前噬菌体边界检测更精确 3. 更快:运行速度比VirSorter2快 4. 自带分类:直接输出病毒的分类学信息 5. 维护更新:由NCBI团队维护,数据库持续更新
目前趋势:越来越多的流程(MVP、vRep等)开始用geNomad替代或补充VirSorter2。
Q5:在你的T2D项目中,肠道噬菌体可能扮演什么角色?¶
答(参考框架): 1. 杀死有益菌:噬菌体可能通过裂解有益菌(如产丁酸菌)来加剧T2D 2. 传递毒力基因:噬菌体可以通过转导将毒力基因传递给肠道细菌 3. 调控菌群结构:噬菌体的"猎物-捕食者"关系动态调控菌群组成 4. 免疫调节:噬菌体可以穿过肠道屏障,激活免疫反应 5. AMG影响代谢:噬菌体携带的辅助代谢基因可能影响宿主的糖代谢
研究方法:从宏基因组中鉴定噬菌体序列,分析其与细菌丰度的相关性,预测宿主范围,检测AMG功能。