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()
三、参数选择指南
| 参数 | 选项 | 推荐 |
|---|
| normalization | TSS/CLR/CSS/TMM | TSS(最稳定,2025基准推荐) |
| transform | LOG/LOGIT/AST | LOG(最常用) |
| analysis_method | LM/CPLM/NEGBIN/ZINB | LM(默认,速度快) |
| min_prevalence | 0-1 | 0.1(至少10%样本有该物种) |
| correction | BH/BY | BH(标准FDR校正) |
| max_significance | 0-1 | 0.25(MaAsLin2默认)或0.05 |
四、面试高频考点
Q1: MaAsLin2相比LEfSe的优势?
- 多变量控制:能控制年龄、性别等混杂因素(LEfSe不能)
- 纵向数据:支持随机效应处理重复测量
- 灵活性:多种标准化、转换、统计方法可选
- 可重复性: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)