宏基因组学(Metagenomics)利用高通量测序技术直接捕获环境中的所有微生物的基因组信息,无需依赖传统的培养步骤就能揭示微生物群落的物种组成和功能潜力。这一突破性技术解决了“99% 微生物不可培养”的难题,并在医学、环境科学和工业等领域得到广泛应用。例如,在医学领域,宏基因组学被用于研究肠道菌群与疾病的关联;在环境保护方面,则用于解析参与污染修复的微生物群落;而在工业应用中,则用于筛选具有特殊功能的酶。
相较于仅分析 16S rRNA 等标记基因的扩增子测序,宏基因组学能够同时实现物种分类(达到菌株水平分辨率)和功能注释(全面覆盖代谢通路),甚至可以从数据中组装出微生物的基因组草图(MAGs)。本文将详细介绍从实验设计到生物信息学分析的标准化流程,并提供实际操作代码与关键参数。
确保样本质量是宏基因组学研究成功的关键。基本原则包括代表性、无菌性和即时性。针对不同类型的样本,需采取相应的处理方法:
注意事项:
DNA 的提取过程中需关注三大核心指标——完整性、纯度和浓度。不同类型的样本应采用不同的方法:
质量检测标准包括:
- 纯度:Nanodrop 测定 OD260/280 应在 1.8-2.0 之间(表明无蛋白污染),OD260/230≥2.0(确保无盐类污染);
- 完整性:通过 Agilent Bioanalyzer 检查 DNA 片段的主峰应在 10kb 以上,且没有明显的拖尾现象;
- 浓度:使用 Qubit 荧光定量法测定浓度应不低于 20ng/μL,总量需达到 300ng 或更多(满足建库需求)。
根据研究目的合理选择测序策略:
| 测序平台 | 读长 | 准确率 | 优势场景 | 推荐数据量 |
|---|---|---|---|---|
| Illumina NovaSeq | 150-300bp | >99.9% | 物种分类、功能通路分析 | 肠道 10Gb,土壤 20Gb |
| Nanopore PromethION | >10kb | ~99% | MAGs 组装、耐药基因簇解析 | 10-15Gb |
| PacBio Sequel II | 5-20kb | >99.9% | 高精度基因组完成图构建 | 15-20Gb |
文库构建要点:
原始的 FastQ 格式测序数据中通常包含接头和低质量碱基等杂质,需经过以下步骤进行净化:
# 创建结果目录
mkdir -p quality_reports trimmed_data
# 批量生成质量报告
fastqc -o quality_reports/ raw_data/*.fastq.gztrimmomatic PE -threads 8 \
raw_data/sample_R1.fastq.gz raw_data/sample_R2.fastq.gz \
trimmed_data/sample_R1_paired.fastq.gz trimmed_data/sample_R1_unpaired.fastq.gz \
trimmed_data/sample_R2_paired.fastq.gz trimmed_data/sample_R2_unpaired.fastq.gz \
ILLUMINACLIP:adapters.fasta:2:30:10 \ # 去除Illumina接头
LEADING:3 \ # 切除5'端Q<3的碱基
TRAILING:3 \ # 切除3'端Q<3的碱基
SLIDINGWINDOW:4:20 \ # 4bp窗口平均Q≥20
MINLEN:50 # 保留≥50bp的读段# 构建宿主基因组索引(以人类hg38为例)
bowtie2-build hg38.fa hg38_index
# 比对并筛选非宿主序列
bowtie2 -p 8 -x hg38_index \
-1 trimmed_data/sample_R1_paired.fastq.gz \
-2 trimmed_data/sample_R2_paired.fastq.gz \
--un-conc trimmed_data/sample_clean_.fastq.gz # 输出非宿主序列序列组装的目标是将经过预处理的清洁读段拼接成较长的连续片段(Contig)。常用的工具包括 MEGAHIT(速度快)和 MetaSPAdes(质量高)。具体操作如下:
megahit -1 trimmed_data/sample_clean_1.fastq.gz \
-2 trimmed_data/sample_clean_2.fastq.gz \
--k-min 21 --k-max 121 --k-step 20 \ # k-mer从21到121,步长20
--min-contig-len 500 \ # 保留≥500bp的Contig
--merge-level 20,0.98 \ # 合并相似短片段
-o assembly_output/quast assembly_output/final.contigs.fa \
-o quast_report/ \
--min-contig 500 # 仅统计≥500bp的Contig1. 编码基因预测(Prodigal):
通过 Prodigal 工具对组装后的 Contigs 进行编码基因预测,这是解析微生物功能的第一步。
在宏基因组研究中,从 Contig 中识别开放阅读框(ORF)是生成蛋白序列的关键步骤,这些蛋白序列将用于后续的注释工作。
prodigal -i assembly_output/final.contigs.fa \
-a predicted_proteins.faa \ # 输出蛋白序列
-d predicted_genes.fna \ # 输出核酸序列
-o predicted_genes.gff \ # 输出基因位置信息
-p meta # 宏基因组模式(允许异质性序列)
为了提高比对效率,通常使用 DIAMOND 代替 BLAST 进行蛋白序列的比对。DIAMOND 可以利用多种常用的功能数据库,如 KEGG(代谢通路)、COG(功能分类)和 CAZy(碳水化合物酶),这些数据库在宏基因组分析中非常有用。
diamond makedb --in ko.faa -d kegg_ko
diamond blastp -d kegg_ko \
-q predicted_proteins.faa \
-o ko_annotation.tsv \
--evalue 1e-5 \ # 设定E值阈值
--max-target-seqs 1 \ # 保留最佳比对结果
--outfmt 6 qseqid sseqid pident evalue bitscore qlen slen # 输出格式
# 加载R包
library(dplyr)
library(readr)
# 读取注释结果与KO-通路映射表
ko_annot <- read_tsv("ko_annotation.tsv", col_names = c("gene", "ko", "pident", "evalue", "bitscore", "qlen", "slen"))
ko_pathway <- read_tsv("ko_pathway_mapping.txt", col_names = c("ko", "pathway", "description"))
# 统计通路丰度
pathway_abundance <- ko_annot %>%
group_by(ko) %>%
count(name = "gene_count") %>% # 统计每个KO的基因数
left_join(ko_pathway, by = "ko") %>%
group_by(pathway, description) %>%
summarise(total_genes = sum(gene_count), .groups = "drop") # 汇总通路基因数
# 保存结果
write_tsv(pathway_abundance, "pathway_abundance.tsv")
宏基因组学中,物种分类注释通常采用两种策略:基于读段的快速注释(Kraken2)和基于标记基因的精准注释(MetaPhlAn3)。这两种方法各有优势,适用于不同的研究需求。
Kraken2 通过直接用清洁读段比对物种数据库,适合进行初步筛选和快速分类。
# 构建标准数据库(约16GB)
kraken2-build --standard --db kraken2_db
# 物种分类
kraken2 --db kraken2_db \
--threads 8 \
--paired trimmed_data/sample_clean_1.fastq.gz trimmed_data/sample_clean_2.fastq.gz \
--output kraken2_output/classification.txt \
--report kraken2_output/abundance_report.txt # 输出物种丰度表
MetaPhlAn3 基于特异性标记基因,实现物种水平的精准定量,并支持菌株识别。
# 安装MetaPhlAn3
conda install -c bioconda metaphlan3
# 物种 profiling
metaphlan trimmed_data/sample_clean_1.fastq.gz,trimmed_data/sample_clean_2.fastq.gz \
--input_type fastq \
--nproc 8 \
--output profiled_metagenome.txt \ # 物种丰度表
--bowtie2out metaphlan_bowtie2.bam # 比对结果
使用 R 语言的 ggplot2 包可以将物种丰度数据进行可视化,帮助研究人员直观地理解样本中的物种分布。
library(ggplot2)
library(tidyr)
# 读取物种丰度表(筛选门水平前10)
species_abund <- read_tsv("profiled_metagenome.txt", skip = 4) %>%
filter(`#SampleID` == "sample") %>%
separate(clade_name, into = c("kingdom", "phylum", "class", "order", "family", "genus", "species"), sep = "\\|") %>%
filter(!is.na(phylum)) %>%
group_by(phylum) %>%
summarise(abundance = sum(relative_abundance)) %>%
arrange(desc(abundance)) %>%
slice(1:10)
# 绘制堆叠柱状图
ggplot(species_abund, aes(x = "", y = abundance, fill = phylum)) +
geom_col(width = 1) +
coord_polar("y") +
labs(title = "微生物群落门水平组成", fill = "门水平分类") +
theme_void()
代谢通路的富集分析和组间差异分析是宏基因组学研究中的重要环节,有助于发现样本中的显著功能变化。
通过 R 语言进行通路富集分析,可以筛选出样本中显著富集的代谢通路。
# 加载通路丰度数据
pathway_data <- read_tsv("pathway_abundance.tsv")
# 计算通路占比
pathway_data <- pathway_data %>%
mutate(ratio = total_genes / sum(total_genes) * 100) %>%
arrange(desc(ratio)) %>%
slice(1:15) # 取前15条通路
# 绘制水平条形图
ggplot(pathway_data, aes(x = reorder(description, ratio), y = ratio)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(x = "代谢通路", y = "占比(%)", title = "核心代谢通路占比") +
theme_minimal()
使用 DESeq2 包进行组间差异分析,可以比较实验组与对照组之间的差异物种和通路。这需要输入原始计数矩阵。
library(DESeq2)
library(ggplot2)
# 读取物种丰度矩阵(行:物种,列:样本)
abund_matrix <- read.delim("species_abundance_matrix.txt", row.names = 1)
# 读取样本分组信息
sample_info <- data.frame(
sample = colnames(abund_matrix),
group = factor(c(rep("control", 5), rep("treatment", 5))) # 5个对照,5个处理
)
# 构建DESeq2对象
dds <- DESeqDataSetFromMatrix(
countData = abund_matrix,
colData = sample_info,
design = ~ group
)
# 差异分析
dds <- DESeq(dds)
res <- results(dds, contrast = c("group", "treatment", "control"))
# 筛选显著差异物种(padj < 0.05 & |log2FoldChange| > 1)
diff_species <- res %>%
as.data.frame() %>%
filter(padj < 0.05 & abs(log2FoldChange) > 1) %>%
rownames_to_column("species")
# 绘制火山图
res_df <- res %>% as.data.frame() %>% rownames_to_column("species")
ggplot(res_df, aes(x = log2FoldChange, y = -log10(padj))) +
geom_point(aes(color = ifelse(padj < 0.05 & abs(log2FoldChange) > 1, "red", "black")), alpha = 0.6) +
geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "gray") +
geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "gray") +
labs(title = "差异物种火山图", x = "log2(处理组/对照组)", y = "-log10(调整后P值)", color = "差异显著性") +
theme_minimal()
在宏基因组学研究中,除了基本的物种分类和功能注释外,还可以进行更深入的高级分析。
通过分箱技术将 Contig 分配到单个微生物基因组,常用的流程是 MetaWRAP。这有助于揭示不同微生物在群落中的作用。
# 1. 覆盖度计算
jgi_summarize_bam_contig_depths --outputDepth depth.txt mapping.bam
# 2. 分箱
metawrap binning -o mag_binning -t 8 \
--metabat2 --maxbin2 --concoct \ # 三种分箱工具联合
assembly_output/final.contigs.fa \
depth.txt
# 3. 质量过滤(完整性≥70%,污染率≤10%)
metawrap quality_control -o mag_filtered \
-t 8 --min_completeness 70 --max_contamination 10 \
mag_binning/bins/
使用 R 语言的 igraph 包构建微生物共现网络,可以揭示物种间的共生和竞争关系。
library(igraph)
# 计算物种间Spearman相关性
cor_matrix <- cor(t(abund_matrix), method = "spearman")
# 筛选显著相关对(|r|>0.6 & p<0.05)
cor_signif <- cor.mtest(cor_matrix, conf.level = 0.95)
cor_filtered <- cor_matrix * (abs(cor_matrix) > 0.6 & cor_signif$p < 0.05)
# 构建网络
graph <- graph.adjacency(cor_filtered, mode = "undirected", weighted = TRUE, diag = FALSE)
# 绘制网络
plot(graph, vertex.size = 5, vertex.label = NA, edge.width = abs(E(graph)$weight)*2)
宏基因组学分析遵循 "样本 - 测序 - 分析 - 解读" 的闭环流程。其中,样本处理的严谨性和生信参数的优化(如组装 k-mer、比对 E 值)是核心质控点。随着长读长测序技术(如 Nanopore)的普及,MAGs 组装完整性将进一步提升。结合宏转录组和宏代谢组的多组学整合分析,将实现从 "物种存在" 到 "功能表达" 的深度解析。
本手册提供的代码适用于 Illumina 平台数据,实际分析中需要根据样本类型(如土壤 vs 肠道)和研究目标(如物种鉴定 vs 功能挖掘)调整参数。建议新手先使用公开数据(如 HMP 数据库)进行练习,逐步掌握工具特性和结果解读逻辑。
扫码加好友,拉您进群



收藏
