置换多元方差分析PERMANOVA+主坐标分析PCoA 算法与代码复现

置换多元方差分析 Adonis

(PERMANOVA)别称Adonis

一般而言,多元方差分析的前提假设(多元正态分布等)通常难以满足。

所以需要鲁棒性更强、对数据分布依赖更少的检验方法。Adonis是其中代表性的方法。

通过一个样本间的距离矩阵或相似性矩阵构建ANOVA分析类似的统计量,然后对每组的观测结果进行随机置换来计算显著性P-value。

Fig 1 | 置换多元方差分析计算方式

黄色部分是组间差异,蓝色部分是组内差异,每个值是计算出的距离(一般为bary方法)。

Fig 2 | p值计算方法

SSa是组间方差平方和,SSw是组内方差平方和,通过F统计量从而得到P值。

PCoA 主坐标分析

原理类似主成分分析PCA,即通过特征向量和特征值的分解进行数据降维以便进行可视化,一般与Adonis一起使用。相对于主成分分析,两者的区别为PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标。

Fig 3 主坐标分析

计算距离后,维度会减一,从而2个样本可在一维进行展现,3个样本可在二维进行展现……依次类推。如果是n个样本,则需要进行降维,将高维展现到二维或三维。

在这里,使用PCoA进行降维,因为与置换多元方差分析使用同样的距离计算方式。

代码复现

library(vegan)
library(tidyverse)
#置换多元方差分析
library(pairwiseAdonis)
library(ggpubr)
data(dune) #vegan包中附带的数据,与农业生产有关
data(dune.env)
otu<-t(dune) #测序得到的结果

# Alpha diversity计算方法
alpha_vegan<-function(otu) {
  shannon <- vegan::diversity(otu, index = "shannon")
  simpson <- vegan::diversity(otu, index = "simpson")
  invsimpson <- vegan::diversity(otu, index = "invsimpson")
  richness <-  rowSums(otu > 0)
  alpha <- data.frame(shannon,simpson,invsimpson,richness)
  return (alpha)
}

species<-colnames(dune)
metadata<-dune.env

#A1: 土壤厚度信息 a numeric vector of thickness of soil A1 horizon.
#Moisture: 湿度等级信息,分4个等级,1 < 2 < 4 < 5.
#Management: 分组信息,不同的管理方式 a factor with levels: BF (Biological farming), HF (Hobby farming), NM (Nature Conservation Management), and SF (Standard Farming).
#Use: 一个分组信息 an ordered factor of land-use with levels: Hayfield < Haypastu < Pasture.
#Manure: 一个分组信息,0 < 1 < 2 < 3 < 4.


alpha_species <- alpha_vegan(otu)
alpha_species$sample_id <- rownames(alpha_species)


dune_dist <- vegdist(dune, method="bray", binary=F) #计算距离,使用bray方法



#PcoA计算
dune_pcoa <- cmdscale(dune_dist, k=3, eig=T)
#cmdscale函数用于执行经典多维尺度分析(Classical Multidimensional Scaling,简称MDS),
#也称为主坐标分析。
#dune_dist是输入的距离矩阵,
#k=3表示我们希望将数据降维到三维空间,
#eig=T表示我们希望返回特征值。
dune_pcoa_points <- as.data.frame(dune_pcoa$points)
sum_eig <- sum(dune_pcoa$eig)
eig_percent <- round(dune_pcoa$eig/sum_eig*100,1)

colnames(dune_pcoa_points) <- paste0("PCoA", 1:3)

dune_pcoa_result <- cbind(dune_pcoa_points, dune.env)

# Adonis置换多元方差分析
dune.div <- adonis2(dune ~ Management, data = dune.env, permutations = 999, method="bray")

dune_adonis <- paste0("adonis R2: ",round(dune.div$R2,2), "; P-value: ", dune.div$`Pr(>F)`)




library(ggalt) #用ggalt和ggplot2进行可视化
#推荐ggalt包对ggplot2有一些其他的补充
ggplot(dune_pcoa_result, aes(x=PCoA1, y=PCoA2, color=Management, group = Management)) +
  labs(x=paste("PCoA 1 (", eig_percent[1], "%)", sep=""),
       y=paste("PCoA 2 (", eig_percent[2], "%)", sep=""),
       title=dune_adonis) +
  geom_point(size=5) + 
  geom_encircle(aes(fill=Management), alpha = 0.1, show.legend = F) +
  theme_classic() + coord_fixed(1)
<think>好的,我现在需要帮助用户分析PERMANOVA的结果,其中季节差异显著,站位差异不显著,但季节和站位的交互作用显著。首先,我得回忆一下PERMANOVA的基本原理,它要用于检验组间差异是否显著,基于距离矩阵进行分析,类似于ANOVA但适用于多元数据。 用户之前的问题是关于核密度图的分析,现在转向PERMANOVA,可能是在生态学或环境科学领域研究植物群落的变化。当前的结果显示季节和交互作用显著,但站位不显著。我需要考虑用户可能的深层需求,比如如何解释交互作用显著而效应不显著的情况,以及接下来应该做什么分析。 首先,季节差异显著说明不同季节的植株密度SD有显著差异,这是符合预期的,因为季节变化会影响植物生长。站位差异不显著可能意味着GM和JD两个站位之间的整体差异不大,但交互作用显著说明不同季节下站位的影响不同,或者不同站位对季节变化的响应不同。 接下来需要解释交互作用显著的含义。这可能意味着在某些季节,站位的植株密度差异较大,而在其他季节差异较小,甚至相反。这时候可能需要进一步的分析,比如成对比较,看看具体哪些季节的组合导致交互作用显著。 然后,我应该考虑统计解释,比如PERMANOVA的结果是基于置换检验的,需要检查是否满足同质性的假设(如Bray-Curtis距离的同质性),如果不符合,结果可能不可靠。可能需要建议用户检查dispersion(离散度)是否相似,使用betadisper函数进行检验。 此外,用户可能需要可视化方法来展示结果,比如NMDS或PCA图,叠加季节和站位的因子,观察样本的分布情况。同时,建议进行事后检验,比如两两比较季节之间或季节站位的组合,找出具体差异所在。 还需要考虑生态学解释,比如为什么季节和站位的交互作用显著,可能涉及环境因素随时间的变化在不同站位的表现不同,比如降水、温度或人为干扰的季节性影响在GM和JD站位有不同的效应。 最后,确保回答结构清晰,分步骤解释结果,提供统计和生态学角度的建议,并推荐后续分析方法,帮助用户全面理解结果。</think>以下是针对PERMANOVA分析结果的系统性解读框架: --- ### **一、结果基础解读** 1. **效应分析** - **季节差异显著**(p<0.05):植株密度SD的群落结构在季节间存在统计学差异,可能是温度、降水等季节性因子驱动的结果 - **站位差异不显著**(p≥0.05):GMJD两站位间的整体环境差异不足以引起植株密度分布的显著区别 2. **交互作用分析** - **季节×站位交互显著**(p<0.05): - 不同站位对季节变化的响应模式存在异质性 - 可能暗示: - **站位特异性响应**(如JD站夏季密度骤升,GM站无此现象) - **环境缓冲效应**(如某站位存在缓冲机制削弱季节波动) --- ### **二、统计验证要点** 1. **同质性检验**(必需前提) - 使用`betadisper()`检验组内离散度同质性 - 若离散度差异显著(p<0.05),PERMANOVA结果可能不可靠 2. **结果可信度增强策略** - 增加置换次数(推荐≥9999次) - 检查Bray-Curtis距离矩阵的合理性 - 添加协变量(如土壤含水量等季节相关变量) --- ### **三、交互作用分解方法** 1. **分层分析** - **按季节拆分数据集**:分别对每个季节进行PERMANOVA站位间比较 ```r # 示例代码 summer_data <- subset(data, Season == "Summer") adonis2(SD ~ Station, data = summer_data, permutations = 9999) ``` - **按站位拆分数据集**:分别对每个站位进行季节差异检验 2. **两两比较** - 使用`pairwise.perm.manova()`函数比较所有季节-站位组合 - 校正多重检验(如Bonferroni校正) --- ### **四、可视化呈现策略** 1. **坐标分析PCoA+ 因子叠加** - 用不同颜色表示季节,形状表示站位 - 添加95%置信椭圆(`stat_ellipse()` in ggplot2) 2. **交互效应热图** - 绘制季节×站位组合的植株密度均值热图 - 标注显著性星号(*p<0.05, **p<0.01) 3. **轨迹分析图** - 连接同一站位不同季节的质心,观察变化轨迹 - 计算轨迹长度:$L = \sqrt{\sum (\Delta PC1)^2 + (\Delta PC2)^2}$ --- ### **五、生态学解释方向** 1. **环境驱动机制** - 季节敏感因子(如温度)站位特性(如海拔)的耦合作用 - 关键方程: $$ \text{SD} = f(T, P, \text{Station}_i) + \epsilon $$ (T:温度, P:降水, Station_i:站位特性) 2. **生物互作推测** - 竞争-胁迫权衡:某站位在特定季节的资源竞争模式改变 - 先锋物种的季节性迁移导致密度分布重构 --- ### **六、后续分析建议** 1. **指示物种分析** - 使用`indicspecies`包的`multipatt()`函数 - 识别对季节×站位交互作用贡献最大的物种 2. **变分解构** ```r # 计算各因子解释的方差比例 variance_part <- varpart(SD_matrix, ~ Season, ~ Station, data = metadata) plot(variance_part, digits=2) ``` 3. **时间序列建模** - 构建GAMM模型: $$ \log(SD) \sim s(\text{Time}, by = \text{Station}) + \text{Station} $$ --- **注意事项**:当交互作用显著时,效应解释需谨慎,建议优先讨论交互模式。可结合R语言`vegan`包`ggplot2`完成全部分析流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值