跳转至

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变换后再检验,或使用非参数方法。注意仍需做多重检验校正。

易错点

  1. Spike-in添加时机错误:应在DNA提取前加入,而非提取后
  2. qPCR忽略16S拷贝数校正:不同物种每基因组的16S拷贝数差异大
  3. 流式和测序样本不配对:必须对同一份样本同时做流式计数和测序
  4. 过度稀释spike-in:spike-in reads太少导致定量不准确
  5. 忽略提取效率差异: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.