跳转至

PERMANOVA多元方差分析

一句话概述:PERMANOVA(Permutational Multivariate Analysis of Variance)是基于距离矩阵的非参数多元方差分析,通过置换检验判断不同分组的微生物群落组成是否显著不同,是微生物组研究中最重要的统计检验方法。

核心知识点速查表

概念说明
PERMANOVA置换多元方差分析(白话:用打乱标签的方式检验组间差异)
adonis2R语言vegan包中PERMANOVA的函数名
分组变量解释的变异比例(效应量)
置换检验随机打乱分组标签999次,看真实结果是否显著
前提假设组间方差齐性(betadisper检验)
多因素可同时分析多个分组变量的效应

一、R语言实操

# === 基本PERMANOVA ===
library(vegan)

# 计算距离矩阵
bc_dist <- vegdist(otu_table, method="bray")     # Bray-Curtis距离

# 单因素PERMANOVA
result <- adonis2(
  bc_dist ~ Group,                                # 距离 ~ 分组变量
  data = metadata,                                 # 元数据
  permutations = 999                                # 置换次数(最少999)
)
print(result)
# 关注: R2(解释比例), F值, Pr(>F)(p值)

# 多因素PERMANOVA
result_multi <- adonis2(
  bc_dist ~ Group + Age + BMI + Antibiotics,      # 多个变量
  data = metadata,
  permutations = 999,
  by = "margin"                                    # margin=各变量独立效应
)
print(result_multi)

# === 方差齐性检验(PERMANOVA的前提) ===
# PERMANOVA假设组间方差齐性,如果不齐性,显著结果可能是方差差异而非中心差异
bd <- betadisper(bc_dist, metadata$Group)         # 方差齐性检验
anova(bd)                                          # p>0.05=方差齐性(好)
permutest(bd)                                      # 置换检验

# 如果方差不齐性:
# 1. 报告betadisper结果
# 2. 考虑用ANOSIM替代
# 3. 在论文中讨论这个limitation
# === 成对比较(pairwise PERMANOVA) ===
# 多组比较时,需要两两检验
library(pairwiseAdonis)

pairwise_result <- pairwise.adonis(
  bc_dist,                                         # 距离矩阵
  metadata$Group,                                   # 分组变量
  p.adjust.m = "BH"                                # 多重检验校正
)
print(pairwise_result)

二、面试高频考点

Q1: PERMANOVA的原理是什么?

  1. 计算样本间距离矩阵
  2. 计算真实分组下的F统计量(组间变异/组内变异)
  3. 随机打乱分组标签999次,每次重新计算F值
  4. 看真实F值在置换分布中的位置 → p值
  5. 白话:就像打牌,看你的牌是不是特别好(比随机洗牌的结果好多少)

Q2: PERMANOVA和ANOSIM的区别?

PERMANOVA(adonis2)ANOSIM
输入距离矩阵距离矩阵
统计量F值(R²)R值(-1到1)
多因素支持不支持
敏感度对中心和方差都敏感主要对中心敏感
推荐★首选方差不齐时考虑

Q3: R²值怎么解读?

  • R²=0.05: 分组解释5%的变异(微生物组中常见,生物学意义不大)
  • R²=0.10: 解释10%(有一定生物学意义)
  • R²>0.20: 解释20%以上(效应较强)
  • 微生物组受很多因素影响,单一因素R²通常<10%是正常的

速查表

# === PERMANOVA速查 ===
library(vegan)

# 单因素
adonis2(dist ~ Group, data=meta, permutations=999)

# 多因素
adonis2(dist ~ Group+Age+BMI, data=meta, by="margin")

# 方差齐性检验
betadisper(dist, meta$Group) |> permutest()

# 成对比较
library(pairwiseAdonis)
pairwise.adonis(dist, meta$Group, p.adjust.m="BH")

# 报告格式: PERMANOVA R²=0.15, F=5.2, p=0.001