You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的NMDS图呈拱形/马蹄形?——春季浮游动物群落分析疑问

解决NMDS分析中拱形(马蹄形)效应的方案

你的NMDS图出现拱形(马蹄形),核心原因是数据存在连续梯度结构——10年春季的总丰度可能呈现逐年连续变化的趋势,而非离散分组,这种情况下NMDS会将样本沿梯度排列成拱形。以下是具体解决思路和代码调整方案:

一、调整距离矩阵与数据转换

总丰度是连续数值,若当前用欧氏距离,容易放大梯度差异引发马蹄形。建议:

  • 换用适合群落丰度数据的Bray-Curtis距离
  • 对总丰度做转换,弱化极端值影响

代码示例:

# 对总丰度做对数转换(用log1p避免0值问题)
Total_Abundance_Spring_Mero$transformed_abun <- log1p(Total_Abundance_Spring_Mero$Total_Abundance)
# 计算Bray-Curtis距离矩阵
dist_matrix <- vegdist(matrix(Total_Abundance_Spring_Mero$transformed_abun, ncol=1), method = "bray")

二、提高NMDS维度k值

当前用k=2维度,尝试增加到k=3,可缓解马蹄形并降低压力值:

set.seed(123)
# 用k=3重新运行NMDS
nmds <- metaMDS(dist_matrix, k = 3, trymax = 100)
stress_value <- nmds$stress
cat("当前压力值:", round(stress_value,4), "\n")

# 提取前两个维度的得分做图,同时可结合第三维度验证分组
nmds_scores <- as.data.frame(scores(nmds))[,1:2]
nmds_scores$month <- Total_Abundance_Spring_Mero$Month
nmds_scores$year <- Total_Abundance_Spring_Mero$Year

三、验证时间梯度的显著性

即使图呈拱形,可通过PERMANOVA检验年份/月份是否对总丰度有显著影响,确认是否存在真实的时间趋势:

# 检验年份的影响
adonis_year <- adonis(dist_matrix ~ factor(year), data = Total_Abundance_Spring_Mero)
print(adonis_year)

# 检验月份的影响
adonis_month <- adonis(dist_matrix ~ factor(month), data = Total_Abundance_Spring_Mero)
print(adonis_month)

若结果显示P<0.05,说明年份/月份确实带来显著差异,只是表现为连续梯度而非离散分组。

四、优化可视化方式

通过调整图的元素,更清晰展示时间梯度:

  1. 添加年份连线,体现连续变化趋势:
ggplot(nmds_scores, aes(x = NMDS1, y = NMDS2, color = factor(year), shape = factor(month))) +
  geom_point(size = 3) +
  geom_path(aes(group = year), alpha = 0.6) +  # 按年份连接同一年的春季样本
  labs(title = "春季浮游动物总丰度(m⁻³)NMDS分析", 
       x = "NMDS1", y = "NMDS2", 
       color = "年份", shape = "月份") +
  theme_classic()+
  annotate("text", x = Inf, y = Inf, 
           label = paste("压力值 =", round(stress_value, 4)), 
           hjust = 1.1, vjust = 1.1, size = 5, color = "red")
  1. 用渐变颜色展示年份,突出连续梯度:
ggplot(nmds_scores, aes(x = NMDS1, y = NMDS2, color = year, shape = factor(month))) +
  geom_point(size = 3) +
  scale_color_viridis_c(option = "plasma") +  # 连续渐变配色
  labs(title = "春季浮游动物总丰度(m⁻³)NMDS分析", 
       x = "NMDS1", y = "NMDS2", 
       color = "年份", shape = "月份") +
  theme_classic()+
  annotate("text", x = Inf, y = Inf, 
           label = paste("压力值 =", round(stress_value, 4)), 
           hjust = 1.1, vjust = 1.1, size = 5, color = "red")

五、重新审视分析目标

仅用总丰度单指标做NMDS,解释性有限——群落结构分析通常基于物种组成数据。如果核心目标是看群落分组,建议后续改用物种水平的丰度数据进行分析;当前无环境变量时,可聚焦于验证时间梯度的显著性,而非强制追求离散分组。

内容的提问来源于stack exchange,提问作者Ariel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:45:56