宏基因组全流程(Metagenomics Pipeline)¶
一句话概述¶
宏基因组分析从原始测序数据(raw sequencing data)出发,经过 数据校验 → 质量评估 → 质量控制 → 去宿主 → 物种注释 → 功能注释 → 多样性分析 的完整流程,最终实现对环境样本中微生物群落组成和功能的全面解析。
目录¶
- 1. 核心知识点(流程总览表)
- 2. 各步骤详解
- 2.1 md5校验
- 2.2 质量评估
- 2.3 质量控制/清洗
- 2.4 去宿主
- 2.5 物种注释
- 2.6 功能注释
- 2.7 多样性分析
- 3. 实战命令/代码(完整流程)
- 4. 面试常问点
- 5. 易错/易混淆点
- 6. 补充知识
1. 核心知识点(流程总览表)¶
| 序号 | 步骤 | 工具 | 目的 | 输入 | 输出 | 关键参数 |
|---|---|---|---|---|---|---|
| 1 | md5校验 | md5sum | 验证数据传输完整性,防止文件损坏 | 原始 fastq.gz 文件 + md5.txt | 校验通过/失败报告 | -c(check模式) |
| 2 | 质量评估 | FastQC + MultiQC | 评估原始数据质量,发现潜在问题 | fastq.gz 文件 | HTML质量报告 | -t(线程数)、-o(输出目录) |
| 3 | 质量控制 | fastp | 去接头序列、过滤低质量reads、去除短reads | 原始 R1/R2 fastq.gz | 清洗后 clean R1/R2 fastq.gz | --qualified_quality_phred 20、--length_required 50、--detect_adapter_for_pe |
| 4 | 去宿主 | Bowtie2 + samtools | 去除人源序列污染,保留微生物reads | clean fastq.gz + 宿主基因组索引 | 非宿主 reads fastq.gz | --very-sensitive、-p(线程)、-f 12(保留双端未比对) |
| 5 | 物种注释 | Kraken2 + Bracken | 对reads进行物种分类和丰度估计 | 去宿主后 fastq.gz + Kraken2数据库 | 物种分类报告 + 丰度表 | --confidence 0.05、-r(read length)、-l(分类层级) |
| 6 | 功能注释 | HUMAnN3 / eggNOG-mapper | 注释微生物群落的代谢通路和基因功能 | 去宿主后 fastq.gz 或组装后的基因序列 | 通路丰度表、基因家族表 | --threads、数据库路径 |
| 7 | 多样性分析 | R(vegan包)/ Python(scikit-bio) | 评估群落组成差异和样本间关系 | 物种丰度表(OTU/species table) | Alpha/Beta多样性指数、PCoA图等 | 距离度量方法(Bray-Curtis等) |
2. 各步骤详解¶
2.1 md5校验(Data Integrity Check)¶
什么是md5?
md5(Message Digest Algorithm 5)是一种哈希算法,可以为任意大小的文件生成一个固定长度的128位(32个十六进制字符)"指纹"。即使文件只改变1个字节,md5值也会完全不同。
为什么要做md5校验?
- 测序数据通常由测序公司通过网络传输,过程中可能出现数据损坏
- 测序数据文件往往很大(几GB到几十GB),传输中断或磁盘错误的概率不低
- 如果数据损坏却不知道,后续分析结果都不可靠
实际操作:
测序公司交付数据时会同时提供一个 md5.txt 文件,里面记录了每个fastq.gz文件对应的md5值。我们下载数据后,重新计算md5值并与之比较,一致则说明数据完整。
2.2 质量评估(Quality Assessment)¶
FastQC 报告的核心模块:
| 模块名称 | 含义 | 正常标准 | 异常信号 |
|---|---|---|---|
| Per base sequence quality | 每个位置的碱基质量分布 | Q20以上占大多数,Q30>80% | 3'端质量急剧下降 |
| Per sequence quality scores | 每条read的平均质量分布 | 峰值在Q30以上 | 双峰分布 |
| Per base sequence content | 每个位置的ATCG比例 | 四条线平行、接近25% | 开头几个碱基波动(正常,来自random primer) |
| Per sequence GC content | GC含量分布 | 接近理论正态分布 | 多峰(可能有污染) |
| Sequence length distribution | reads长度分布 | 集中在固定长度(如150bp) | 长度不均一 |
| Adapter content | 接头序列残留比例 | 接近0% | 明显上升曲线(需要去接头) |
| Overrepresented sequences | 高频重复序列 | 无或极少 | 大量重复(可能是接头或rRNA污染) |
MultiQC 的作用:
当样本很多时(比如实习中做几十个样本的宏基因组),逐一看FastQC报告太麻烦。MultiQC 能把所有样本的FastQC报告汇总成一个交互式网页,方便横向比较。
关键质量指标阈值:
| 指标 | 好 | 一般 | 差 |
|---|---|---|---|
| Q20 占比 | >95% | 90-95% | <90% |
| Q30 占比 | >85% | 80-85% | <80% |
| Adapter含量 | <5% | 5-15% | >15% |
| 重复率 | <30% | 30-50% | >50% |
| GC分布 | 单峰正态 | 轻微偏移 | 多峰/严重偏移 |
2.3 质量控制/清洗(Quality Control)¶
fastp 是什么?
fastp 是一个高效的fastq文件预处理工具,可以同时完成质量过滤、接头去除、低质量碱基修剪等操作。相比老牌工具 Trimmomatic,fastp 速度更快(C++实现)、使用更简单,且自带HTML质量报告。
fastp 核心参数详解:
| 参数 | 含义 | 常用值 | 说明 |
|---|---|---|---|
-i / -I | 输入R1/R2文件 | fastq.gz | 大写I对应R2 |
-o / -O | 输出R1/R2文件 | clean.fq.gz | 大写O对应R2 |
--detect_adapter_for_pe | 自动检测PE接头 | 开启 | PE数据推荐开启 |
--adapter_sequence | 指定R1接头序列 | Illumina通用接头 | 知道接头序列时手动指定更准确 |
--adapter_sequence_r2 | 指定R2接头序列 | Illumina通用接头 | 同上 |
-q / --qualified_quality_phred | 碱基质量阈值 | 20 | 低于此值的碱基被认为是"不合格" |
-u / --unqualified_percent_limit | 不合格碱基最大比例 | 40 | 一条read中不合格碱基超过此比例则过滤 |
-l / --length_required | 最短read长度 | 50 | 短于此值的read被丢弃 |
--cut_front | 从5'端滑窗切除低质量 | 开启 | 类似Trimmomatic的LEADING |
--cut_tail | 从3'端滑窗切除低质量 | 开启 | 类似Trimmomatic的TRAILING |
--cut_window_size | 滑窗大小 | 4 | 滑窗内平均质量低于阈值则切除 |
--cut_mean_quality | 滑窗内平均质量阈值 | 20 | 与滑窗配合使用 |
-w / --thread | 线程数 | 8-16 | 根据服务器配置设置 |
-j / -h | JSON/HTML报告输出 | 指定路径 | fastp自带质量报告,非常好用 |
--n_base_limit | 允许的最大N碱基数 | 5 | 含N过多的read被丢弃 |
--correction | 碱基校正(PE overlap区域) | 开启 | 利用PE reads重叠区域纠错 |
常见Illumina接头序列:
TruSeq Adapter (Read 1): AGATCGGAAGAGCACACGTCTGAACTCCAGTCA
TruSeq Adapter (Read 2): AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT
Nextera Adapter: CTGTCTCTTATACACATCT
reads保留率参考标准:
| 阶段 | 正常保留率 | 需要注意 |
|---|---|---|
| fastp质控后 | >90% | <85% 说明原始数据质量较差 |
| 去宿主后(人肠道样本) | 70-99%(视样本类型) | <50% 可能宿主污染严重 |
| 去宿主后(土壤/水样本) | >95% | 理论上宿主含量极低 |
2.4 去宿主(Host Removal)¶
为什么要去宿主?
宏基因组测序的对象是环境中的微生物DNA,但在样本采集和提取过程中,不可避免地会混入宿主(如人体肠道样本中的人源DNA)的序列。
不去宿主的后果: 1. 浪费计算资源:人源reads可能占10-50%甚至更高,这些reads参与后续分析纯属浪费 2. 干扰物种注释:人源序列可能被错误注释为微生物,产生假阳性 3. 影响丰度估计:分母(总reads数)被人源序列稀释,微生物丰度被低估 4. 功能注释污染:人类基因功能被混入微生物功能分析中
使用什么参考基因组?
- 人源宿主:GRCh38(hg38),即人类参考基因组第38版
- 下载地址:NCBI(GCA_000001405.15)或 UCSC(hg38.fa.gz)
- 小鼠样本:GRCm39(mm39)
- 其他动物样本:对应物种的参考基因组
Bowtie2 去宿主的原理:
- 先用
bowtie2-build对宿主参考基因组建立索引(只需做一次) - 将质控后的reads比对到宿主基因组
- 提取未比对上的reads(即非宿主、属于微生物的reads)
- 用
samtools从BAM文件中提取未比对的reads
关键概念:samtools flag 过滤
| flag | 含义 |
|---|---|
| 4 | 该read未比对上(unmapped) |
| 8 | 配对的mate未比对上 |
| 12 | 该read和mate都未比对上(4+8=12) |
对于PE数据,我们用 samtools view -b -f 12 提取双端都没比对上宿主基因组的read对。
Bowtie2 比对模式:
| 模式 | 参数 | 速度 | 灵敏度 | 适用场景 |
|---|---|---|---|---|
| very-fast | --very-fast | 最快 | 最低 | 粗筛 |
| fast | --fast | 快 | 较低 | 快速分析 |
| sensitive | --sensitive | 中等 | 中等 | 默认模式 |
| very-sensitive | --very-sensitive | 慢 | 最高 | 去宿主推荐 |
去宿主时推荐 --very-sensitive,因为我们希望尽可能多地识别和去除宿主序列,宁可多去一些也不要漏掉。
2.5 物种注释(Taxonomic Profiling)¶
Kraken2¶
原理:
Kraken2 使用精确的 k-mer 匹配算法进行物种分类。它将每条read切割成连续的 k-mer(默认k=35),然后在预建的数据库中查找每个k-mer属于哪个物种。最终通过LCA(Lowest Common Ancestor,最低公共祖先)算法确定read的分类。
数据库类型:
| 数据库 | 大小 | 覆盖范围 | 适用场景 |
|---|---|---|---|
| Standard | ~70GB | RefSeq完整库(细菌、古菌、病毒、人类) | 常规分析、精度要求高 |
| MiniKraken | ~8GB | 标准库的缩减版 | 内存有限时使用 |
| PlusPF | ~70GB+ | Standard + 真菌 + 原生动物 | 需要分析真核微生物时 |
| 自建库 | 可变 | 自定义 | 特殊需求 |
confidence 参数详解:
--confidence 参数控制分类的严格程度,取值范围 0-1。
- 含义:一条read被分类到某个物种时,支持该分类的k-mer比例必须 >= confidence值
- 默认值:0(不过滤,所有能分类的read都保留分类结果)
| confidence值 | 效果 | 适用场景 |
|---|---|---|
| 0 | 最宽松,分类最多reads,但假阳性最高 | 不推荐用于最终分析 |
| 0.05 | 常用推荐值,轻微过滤,平衡灵敏度和精确度(搭配大型 Standard 数据库时建议 0.15~0.2;使用小型数据库时 ≤0.1) | 常规宏基因组分析 |
| 0.1 | 中等严格 | 需要较高可信度时 |
| 0.2 | 较严格,只保留高置信分类,减少假阳性但可能丢失低丰度物种 | 要求高精度、不关心低丰度物种 |
| 0.5 | 非常严格,大量reads变为"未分类" | 特殊验证用途 |
实际选择建议: - 常规分析:--confidence 0.05 或 --confidence 0.1 - 0.05 保留更多信息,适合探索性分析 - 0.2 更保守,适合需要高精度的发表级分析 - 具体选择还取决于数据库大小和样本类型
Bracken¶
为什么需要Bracken?
Kraken2 的分类结果存在一个问题:很多reads只能被分类到较高的分类层级(如属level),而不是种level。这是因为不同物种之间共享大量k-mer,Kraken2通过LCA算法会把这些reads推到它们的共同祖先节点。
Bracken(Bayesian Reestimation of Abundance with KrakEN)通过贝叶斯算法,将这些高层级的reads重新分配到种level,从而得到更准确的物种水平丰度估计。
Bracken 关键参数:
| 参数 | 含义 | 常用值 |
|---|---|---|
-r | read长度 | 150(与实际测序长度一致) |
-l | 分类层级 | S(种)、G(属)、P(门) |
-t | 最小reads数阈值 | 10(少于此数的物种被过滤) |
分类层级代码:
| 代码 | 层级 | 英文 |
|---|---|---|
| D | 域 | Domain |
| P | 门 | Phylum |
| C | 纲 | Class |
| O | 目 | Order |
| F | 科 | Family |
| G | 属 | Genus |
| S | 种 | Species |
2.6 功能注释(Functional Annotation)¶
为什么要做功能注释?
物种注释告诉我们"有哪些微生物",功能注释则告诉我们"这些微生物在做什么"。功能注释将基因序列映射到已知的功能数据库,揭示微生物群落的代谢潜力。
HUMAnN3¶
HUMAnN3(The HMP Unified Metabolic Analysis Network 3)是宏基因组功能注释的主流工具。
工作流程: 1. 先用MetaPhlAn进行物种鉴定 2. 根据鉴定结果选择对应的泛基因组数据库 3. 用Bowtie2将reads比对到泛基因组 4. 未比对上的reads用DIAMOND比对到UniRef蛋白数据库 5. 整合结果,输出通路丰度和基因家族丰度
主要输出:
| 输出文件 | 内容 | 用途 |
|---|---|---|
| genefamilies.tsv | 基因家族丰度(UniRef90/UniRef50) | 基因水平功能分析 |
| pathabundance.tsv | 代谢通路丰度(MetaCyc) | 通路水平功能分析 |
| pathcoverage.tsv | 通路覆盖度 | 判断通路是否完整存在 |
eggNOG-mapper¶
eggNOG-mapper 通过将基因序列比对到eggNOG数据库,提供多种功能注释: - COG/KOG 分类:蛋白功能正交分类 - GO (Gene Ontology):基因本体注释 - KEGG pathway:代谢通路注释 - CAZy:碳水化合物活性酶
HUMAnN3 vs eggNOG-mapper:
| 特点 | HUMAnN3 | eggNOG-mapper |
|---|---|---|
| 输入 | 原始reads或clean reads | 基因序列(通常需要先组装+预测) |
| 速度 | 较慢 | 较快 |
| 数据库 | MetaCyc + UniRef | eggNOG |
| 注释类型 | 通路为主 | 多种注释体系(COG/GO/KEGG) |
| 常用场景 | 基于reads的功能分析 | 基于基因的功能分析 |
2.7 多样性分析(Diversity Analysis)¶
Alpha多样性(Alpha Diversity)¶
Alpha多样性衡量的是单个样本内部的物种多样性。
常用指标:
| 指数 | 英文 | 含义 | 特点 |
|---|---|---|---|
| Observed Species | 观测到的物种数 | 样本中检测到的物种总数 | 最直观,但受测序深度影响大 |
| Shannon | Shannon-Wiener Index | 综合考虑物种丰富度和均匀度 | 最常用,值越大多样性越高 |
| Simpson | Simpson Index | 随机抽取两个个体属于不同物种的概率 | 对优势物种更敏感 |
| Chao1 | Chao1 Estimator | 根据低丰度物种估计总物种数 | 常用于16S,宏基因组中较少用 |
| Pielou | Pielou's Evenness | 物种均匀度(0-1) | 1表示完全均匀 |
| ACE | ACE Estimator | 基于丰度的覆盖度估计 | 与Chao1类似 |
通俗解释Shannon指数:
想象一个花园: - 花园A:100朵花,分别是50朵玫瑰、30朵百合、20朵菊花 → Shannon较高 - 花园B:100朵花,95朵玫瑰、3朵百合、2朵菊花 → Shannon较低 - Shannon指数同时考虑了"有多少种花"(丰富度)和"每种花的数量是否均衡"(均匀度)
Beta多样性(Beta Diversity)¶
Beta多样性衡量的是不同样本之间的物种组成差异。
常用距离/相异度指标:
| 度量 | 英文 | 特点 | 适用场景 |
|---|---|---|---|
| Bray-Curtis | Bray-Curtis Dissimilarity | 考虑丰度信息,范围0-1 | 最常用,适合丰度数据 |
| Jaccard | Jaccard Distance | 只考虑有无,不考虑丰度 | 关注物种组成差异 |
| UniFrac (weighted) | Weighted UniFrac | 考虑丰度+进化关系 | 16S数据(需要进化树) |
| UniFrac (unweighted) | Unweighted UniFrac | 只考虑有无+进化关系 | 16S数据 |
| Euclidean | Euclidean Distance | 常见距离度量 | 一般用于标准化后的数据 |
常用可视化方法:
| 方法 | 英文 | 用途 |
|---|---|---|
| PCoA | Principal Coordinates Analysis | 展示样本间距离关系(最常用) |
| NMDS | Non-metric Multidimensional Scaling | 展示样本排列,适合非线性关系 |
| PCA | Principal Component Analysis | 降维展示,适合标准化数据 |
| 热图 | Heatmap | 展示物种丰度矩阵 |
统计检验:
| 方法 | 英文 | 用途 |
|---|---|---|
| PERMANOVA | Permutational MANOVA | 检验组间Beta多样性是否有显著差异 |
| ANOSIM | Analysis of Similarities | 类似PERMANOVA,非参数检验 |
| Wilcoxon | Wilcoxon Rank Sum Test | Alpha多样性组间比较 |
| Kruskal-Wallis | Kruskal-Wallis H Test | 多组Alpha多样性比较 |