跳转至

ANCOM-BC组成矫正差异分析

一句话概述:ANCOM-BC(Analysis of Compositions of Microbiomes with Bias Correction)是专门为组成数据设计的微生物组差异丰度分析方法,通过估计和校正测序深度引起的采样偏差,在控制假阳性的同时保持统计功效。

核心知识点速查表

概念说明
ANCOM-BC带偏差校正的微生物组成分分析
组成偏差测序深度不同导致的丰度偏差
采样分数每个样本中微生物被采样到的比例
ANCOM-BC2升级版,支持多组比较和纵向数据
结构零物种在某组中真正不存在(ANCOM-BC能识别)

一、R语言实操

# === 安装 ===
# BiocManager::install("ANCOMBC")
library(ANCOMBC)
library(phyloseq)

# === ANCOM-BC(经典版) ===
result <- ancombc(
  phyloseq = ps,                      # phyloseq对象
  formula = "Group",                   # 模型公式
  p_adj_method = "holm",               # 多重检验校正方法
  alpha = 0.05,                        # 显著性阈值
  group = "Group",                     # 分组变量
  struc_zero = TRUE,                   # 检测结构零
  neg_lb = TRUE,                       # 使用负下界估计偏差
  conserve = TRUE                      # 保守估计(推荐)
)

# 查看结果
res <- result$res                       # 提取结果
# res$beta: 效应量(log fold change)
# res$se: 标准误
# res$W: Wald统计量
# res$p_val: p值
# res$q_val: 校正后q值
# res$diff_abn: 是否差异显著(TRUE/FALSE)

# 查看显著差异物种
sig_taxa <- rownames(res$q_val)[res$diff_abn[,1] == TRUE]
cat("显著差异物种数:", length(sig_taxa), "\n")
# === ANCOM-BC2(升级版,推荐使用) ===
result2 <- ancombc2(
  data = ps,                            # phyloseq对象
  fix_formula = "Group + Age + BMI",    # 固定效应(可控制协变量)
  p_adj_method = "holm",                # 多重检验校正
  alpha = 0.05,                          # 显著性阈值
  group = "Group",                       # 分组变量
  struc_zero = TRUE,                     # 检测结构零
  neg_lb = TRUE,                         # 负下界
  pseudo_sens = TRUE,                    # 伪计数敏感性分析
  n_cl = 4                               # 并行线程数
)

# 查看结果
res2 <- result2$res                      # 提取结果
# 全局检验
result2$res_global                        # 多组全局检验

# 成对比较
result2$res_pair                          # 两两比较结果

二、结果可视化

# === 火山图 ===
library(ggplot2)

plot_df <- data.frame(
  Taxon = rownames(res$beta),
  logFC = res$beta[, 1],                   # log fold change
  qval = res$q_val[, 1],                   # 校正后p值
  significant = res$diff_abn[, 1]          # 是否显著
)

ggplot(plot_df, aes(x=logFC, y=-log10(qval), color=significant)) +
  geom_point(size=2) +
  scale_color_manual(values=c("grey", "red")) +
  geom_hline(yintercept=-log10(0.05), linetype="dashed") +
  labs(x="Log Fold Change", y="-log10(q-value)",
       title="ANCOM-BC Differential Abundance") +
  theme_minimal()

三、面试高频考点

Q1: ANCOM-BC解决了什么问题?

  • 微生物组数据是组成数据,各物种丰度的总和受测序深度限制
  • 直接比较相对丰度会产生虚假差异
  • ANCOM-BC通过估计每个样本的采样分数来校正这个偏差
  • 白话:就像比较两个人的工资比例,需要先知道他们的总工资才公平

Q2: ANCOM-BC vs ALDEx2 vs MaAsLin2?

方法优点注意事项
ALDEx2最保守,假阳性最低(79%可重复)可能漏掉弱信号
MaAsLin2多变量灵活,可重复性77%需选择合适的标准化
ANCOM-BC理论基础强,识别结构零BC2版本存在一些问题(2025基准)

Q3: 2025年推荐用哪种差异分析?

  1. 首选:ALDEx2(最可靠)或MaAsLin2(最灵活)
  2. 配合:多方法取交集更可靠
  3. 注意:ANCOM-BC2在最新基准中冲突率(3%)高于理想值
  4. 趋势:简单方法(Wilcoxon+TSS)反而更可重复

速查表

# === ANCOM-BC速查 ===
library(ANCOMBC)

# ANCOM-BC2(推荐)
ancombc2(ps, fix_formula="Group+Age", group="Group",
         struc_zero=TRUE, alpha=0.05)

# 经典版
ancombc(ps, formula="Group", group="Group",
        struc_zero=TRUE, alpha=0.05)

# 结果: res$diff_abn (TRUE/FALSE差异标记)
#        res$beta (效应量)
#        res$q_val (校正后p值)