195_微生物组绝对定量¶
一句话概述¶
微生物组绝对定量通过加入已知浓度的spike-in标准品(如合成DNA或已知细菌)或结合流式细胞术/qPCR总菌量测定,将相对丰度数据转化为每克/毫升样本中的绝对菌量,克服组成性数据的固有偏差。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| 相对丰度局限 | 不能反映真实细菌数量变化(组成性偏差) |
| Spike-in方法 | 加入已知量的外源标准菌/合成DNA |
| 流式计数法 | 用流式细胞术直接计数总菌量 |
| qPCR定量 | 扩增16S rRNA基因估计总菌量 |
| ddPCR | 数字PCR,绝对定量不需标准曲线 |
| ZymoBIOMICS | 商业标准品(Spike-in标准品+Mock Community) |
| 应用价值 | 区分"增加"vs"相对增加",避免组成性偏差 |
| 数据处理 | 将相对丰度×总菌量=绝对丰度 |
步骤详解¶
第一步:理解为什么需要绝对定量¶
白话解释:标准的16S或宏基因组分析只给出相对丰度(如物种A占30%)。但如果一个样本总共有100万个细菌,另一个只有1万个,30%代表的实际细菌数差了100倍。绝对定量就是要知道"到底有多少个"。
技术细节:组成性数据的致命问题:当一个物种的绝对数量保持不变但其他物种增加时,它的相对丰度会"被动下降",可能被错误地判定为差异物种。绝对定量通过anchor到已知数量来消除这种偏差。
# 组成性偏差示例
# 样本A:物种X=1000, 物种Y=1000, 物种Z=1000
# 相对丰度:X=33%, Y=33%, Z=33%
# 样本B:物种X=1000, 物种Y=1000, 物种Z=5000
# 相对丰度:X=14%, Y=14%, Z=71%
#
# 相对丰度分析会认为X和Y在B中"下降"了,但实际数量没变!
# 绝对定量能正确反映:X和Y不变,Z增加了。
第二步:Spike-in标准品方法¶
白话解释:在DNA提取前,加入一定量的"外星人"细菌或合成DNA(样本中本来没有的)。测序后看这些"外星人"占了多少比例,就能反推出总菌量。
# Spike-in实验设计
# 1. 选择Spike-in标准品
# - 合成DNA(如ZymoBIOMICS Spike-in Control)
# - 已知浓度的非环境来源细菌(如Imtechella halotolerans)
# - Sequins(合成的全长16S序列)
# 2. 在DNA提取前加入已知量的标准品
# 例如:加入10^6 copies的合成16S到1g土壤样本中
# 3. 正常进行16S扩增子或宏基因组测序
# 4. 数据分析:从测序结果中识别spike-in reads
import pandas as pd
import numpy as np
# 分析spike-in数据
def absolute_quantification(otu_table, spike_in_id, spike_in_copies):
"""
将相对丰度转化为绝对定量
Parameters:
- otu_table: 样本×OTU的count矩阵
- spike_in_id: spike-in OTU的ID
- spike_in_copies: 加入的spike-in拷贝数
"""
# 计算相对丰度
total_reads = otu_table.sum(axis=1)
spike_reads = otu_table[spike_in_id]
spike_fraction = spike_reads / total_reads
# 计算每个样本的总绝对量
# spike_copies / spike_fraction = total_copies
total_absolute = spike_in_copies / spike_fraction
# 计算每个OTU的绝对丰度
relative = otu_table.div(total_reads, axis=0)
absolute = relative.multiply(total_absolute, axis=0)
# 移除spike-in OTU
absolute = absolute.drop(columns=spike_in_id)
return absolute, total_absolute
# 使用示例
otu_table = pd.read_csv("otu_table_with_spikein.csv", index_col=0)
absolute, total = absolute_quantification(
otu_table,
spike_in_id="SyntheticStandard",
spike_in_copies=1e6
)
print("各样本总绝对菌量:")
print(total)
print("\nTop OTU的绝对丰度:")
print(absolute.mean().sort_values(ascending=False).head(10))
第三步:qPCR/ddPCR定量总菌量¶
白话解释:用qPCR扩增16S rRNA基因来估计样本中的总细菌数量。再把这个数字乘以每个物种的相对丰度,就得到绝对丰度。
# qPCR数据与相对丰度整合
library(ggplot2)
# qPCR结果:每个样本的16S拷贝数
qpcr_data <- data.frame(
Sample = paste0("S", 1:10),
copies_per_g = c(1e8, 2e8, 5e7, 3e8, 1e9, 2e7, 8e8, 4e8, 6e8, 1e8)
)
# 16S相对丰度数据
relative_abundance <- read.csv("relative_abundance.csv", row.names = 1)
# 计算绝对丰度
absolute_abundance <- sweep(relative_abundance, 1, qpcr_data$copies_per_g, "*")
# 对比相对vs绝对丰度
species_of_interest <- "Bacteroides_fragilis"
comparison <- data.frame(
Sample = qpcr_data$Sample,
Relative = relative_abundance[, species_of_interest],
Absolute = absolute_abundance[, species_of_interest],
Group = rep(c("Control", "Treatment"), each = 5)
)
# 相对丰度可能显示"下降"
p1 <- ggplot(comparison, aes(x = Group, y = Relative, fill = Group)) +
geom_boxplot() + ggtitle("Relative Abundance") + theme_minimal()
# 绝对丰度显示"不变"
p2 <- ggplot(comparison, aes(x = Group, y = Absolute, fill = Group)) +
geom_boxplot() + ggtitle("Absolute Abundance") + theme_minimal()
library(patchwork)
p1 | p2
第四步:流式细胞术定量¶
# 流式细胞术数据整合
# 使用SYBR Green染色后流式计数
flow_data <- data.frame(
Sample = paste0("S", 1:10),
cells_per_ml = c(5e6, 8e6, 3e6, 1e7, 2e7, 4e6, 1.5e7, 9e6, 7e6, 6e6)
)
# 同样的计算方法
absolute_flow <- sweep(relative_abundance, 1, flow_data$cells_per_ml, "*")
# 比较不同定量方法的一致性
comparison_methods <- data.frame(
qPCR_total = qpcr_data$copies_per_g,
Flow_total = flow_data$cells_per_ml
)
cor(comparison_methods$qPCR_total, comparison_methods$Flow_total, method = "spearman")
实战命令速查¶
# qPCR分析(使用通用16S引物)
# 引物:515F/806R 或 341F/785R
# 标准曲线:已知浓度的16S质粒梯度稀释
# ddPCR绝对定量(更准确,不需标准曲线)
# Bio-Rad QX200系统
# ZymoBIOMICS Spike-in标准品添加
# 在DNA提取前加入已知量到样本中
# 绝对定量计算
absolute <- sweep(relative, 1, total_counts, "*")
# 差异分析(使用绝对丰度)
library(Maaslin2)
Maaslin2(input_data = absolute_abundance, input_metadata = metadata,
output = "absolute_diff", fixed_effects = "group",
normalization = "NONE", transform = "LOG")
面试常问点¶
Q1: 相对丰度分析有什么本质缺陷? A: 相对丰度是组成性数据(总和为1),存在组成性偏差:一个物种的真实增加会导致其他所有物种的相对丰度被动下降。这可能导致差异分析的假阳性和假阴性。绝对定量通过提供真实的菌量信息来消除这一偏差。
Q2: Spike-in方法有什么局限性? A: (1)Spike-in比例难以预先确定(太少检测不到,太多抢占测序资源);(2)Spike-in DNA在提取过程中可能与样本DNA行为不同(提取效率偏差);(3)PCR扩增偏好可能影响spike-in的定量准确性;(4)需要为每个实验单独优化添加量。
Q3: qPCR和流式细胞术定量各自的优劣? A: qPCR优势:灵敏度高,可检测低丰度样本。劣势:16S拷贝数变异导致不同物种每个细胞的拷贝数不同(1-15个),引入系统偏差。流式优势:直接计数细胞,不受拷贝数影响。劣势:需要新鲜样本,无法区分活死细胞(除非用特殊染料)。
Q4: ddPCR比qPCR有什么优势? A: ddPCR将反应分割成数千个微液滴,每个液滴独立进行PCR,通过计数阳性液滴比例绝对定量。不需要标准曲线,对PCR抑制物更耐受,定量精度更高(CV<10%)。
Q5: 绝对定量数据应该用什么统计方法分析? A: 绝对丰度数据不再是组成性数据,可以使用常规统计方法(如t检验/Wilcoxon)。但数据通常仍呈偏态分布,建议log变换后再检验,或使用非参数方法。注意仍需做多重检验校正。
易错点¶
- Spike-in添加时机错误:应在DNA提取前加入,而非提取后
- qPCR忽略16S拷贝数校正:不同物种每基因组的16S拷贝数差异大
- 流式和测序样本不配对:必须对同一份样本同时做流式计数和测序
- 过度稀释spike-in:spike-in reads太少导致定量不准确
- 忽略提取效率差异:spike-in DNA和细胞来源DNA的提取效率可能不同
补充知识¶
绝对定量方法对比¶
| 方法 | 准确度 | 成本 | 复杂度 | 适用场景 |
|---|---|---|---|---|
| Spike-in DNA | 中 | 低 | 低 | 通用 |
| Spike-in细胞 | 高 | 中 | 中 | 粪便/土壤 |
| qPCR | 中 | 低 | 低 | 通用 |
| ddPCR | 高 | 高 | 中 | 精确定量 |
| 流式细胞术 | 高 | 中 | 高 | 液体样本 |
推荐文献¶
- Vandeputte et al. (2017) Quantitative microbiome profiling links gut community variation to microbial load. Nature.
- Props et al. (2017) Absolute quantification of microbial taxon abundances. ISME J.