跳转至

MaAsLin2多变量关联

一句话概述:MaAsLin2(Microbiome Multivariable Associations with Linear Models)是Huttenhower实验室开发的微生物组多变量关联分析工具,能同时控制多个协变量(年龄、性别、BMI等),是2025年推荐的微生物组差异分析方法之一。

核心知识点速查表

概念说明
MaAsLin2微生物组多变量线性模型(白话:控制各种混杂后找差异微生物)
多变量同时考虑多个影响因素(如疾病+年龄+BMI)
标准化支持TSS/CLR/CSS/TMM等多种标准化方法
转换支持LOG/LOGIT/AST等转换方法
固定效应需要检验的主要变量
随机效应纵向数据中的个体效应

一、安装与基本使用

# === 安装 ===
# BiocManager::install("Maaslin2")
library(Maaslin2)

# === 基本分析 ===
result <- Maaslin2(
  input_data = otu_table,             # 物种丰度表(样本×物种)
  input_metadata = metadata,           # 元数据表(样本×变量)
  output = "maaslin2_output",          # 输出目录

  # 关键参数
  fixed_effects = c("Group", "Age", "BMI"),  # 固定效应(检验这些变量)
  reference = c("Group,Healthy"),             # 参考组(Healthy为基准)

  # 标准化和转换
  normalization = "TSS",               # 标准化: TSS/CLR/CSS/TMM/NONE
  transform = "LOG",                   # 转换: LOG/LOGIT/AST/NONE

  # 统计参数
  analysis_method = "LM",              # 方法: LM/CPLM/NEGBIN/ZINB
  correction = "BH",                   # 多重检验校正
  max_significance = 0.25,             # 最大q值阈值

  # 其他
  min_abundance = 0.0,                 # 最低丰度过滤
  min_prevalence = 0.1,                # 最低流行率(>10%样本中出现)
  cores = 4                             # CPU线程数
)

1.1 纵向数据分析

# === 纵向数据(添加随机效应) ===
result_long <- Maaslin2(
  input_data = otu_table,
  input_metadata = metadata,
  output = "maaslin2_longitudinal",

  fixed_effects = c("Treatment", "Timepoint"),  # 固定效应
  random_effects = c("Subject"),                  # 随机效应(受试者ID)

  normalization = "TSS",
  transform = "LOG",
  analysis_method = "LM",                         # 线性混合模型
  cores = 4
)

二、结果解读

# === 查看输出文件 ===
# maaslin2_output/
# ├── all_results.tsv          # ★所有关联结果
# ├── significant_results.tsv  # ★显著结果
# └── figures/                  # 散点图(每个显著关联一张)

# 读取结果
results <- read.table("maaslin2_output/all_results.tsv",
                       header=TRUE, sep="\t")

# 关键列解读
# feature: 物种名
# metadata: 关联的变量
# coef: 回归系数(正=正相关,负=负相关)
# stderr: 标准误
# pval: p值
# qval: FDR校正后的q值 ★看这个
# N: 样本数
# N.not.zero: 非零样本数

# 筛选显著结果
sig <- results[results$qval < 0.25, ]           # q<0.25(MaAsLin2默认阈值)
sig_strict <- results[results$qval < 0.05, ]    # q<0.05(更严格)
# === 自定义可视化 ===
library(ggplot2)

# 火山图
ggplot(results[results$metadata=="Group",],
       aes(x=coef, y=-log10(qval))) +
  geom_point(aes(color=qval<0.25), size=2) +     # 按显著性着色
  geom_hline(yintercept=-log10(0.25), linetype="dashed") +  # 阈值线
  geom_text_repel(data=subset(results, qval<0.05 & metadata=="Group"),
                  aes(label=feature), size=3) +    # 标注显著物种名
  labs(x="Coefficient", y="-log10(q-value)") +
  theme_minimal()

三、参数选择指南

参数选项推荐
normalizationTSS/CLR/CSS/TMMTSS(最稳定,2025基准推荐)
transformLOG/LOGIT/ASTLOG(最常用)
analysis_methodLM/CPLM/NEGBIN/ZINBLM(默认,速度快)
min_prevalence0-10.1(至少10%样本有该物种)
correctionBH/BYBH(标准FDR校正)
max_significance0-10.25(MaAsLin2默认)或0.05

四、面试高频考点

Q1: MaAsLin2相比LEfSe的优势?

  1. 多变量控制:能控制年龄、性别等混杂因素(LEfSe不能)
  2. 纵向数据:支持随机效应处理重复测量
  3. 灵活性:多种标准化、转换、统计方法可选
  4. 可重复性:2025基准测试显示可重复性77%(LEfSe较低)

Q2: MaAsLin2的q值0.25是不是太宽松了?

  • 微生物组数据噪声大,0.25是该领域的惯例
  • 发表时通常同时报告q<0.25和q<0.05的结果
  • 重要发现建议用更严格阈值(q<0.05)
  • 探索性分析可以用0.25,验证性研究用0.05

速查表

# === MaAsLin2速查 ===
library(Maaslin2)

# 横断面数据
Maaslin2(otu, meta, "output",
         fixed_effects=c("Group","Age","BMI"),
         reference=c("Group,Control"),
         normalization="TSS", transform="LOG")

# 纵向数据
Maaslin2(otu, meta, "output",
         fixed_effects=c("Treatment","Time"),
         random_effects=c("Subject"),
         normalization="TSS", transform="LOG")

# 结果: significant_results.tsv (qval<0.25)