不同生命阶段的 Bray-Curtis 差异

Bray-Curtis Dissimilarity Across Life Stages

我正在尝试计算和可视化一组网站和生命阶段之间的 Bray-Curtis 差异。所以基本上,我正在尝试创建一个可以可视化三件事的矩阵:

  1. 所有成人社区之间的差异
  2. 同一地点的成虫和幼虫群落之间的差异
  3. 所有幼虫群落之间的差异

我可以 运行 对所有社区进行计算,然后手动选择我实际需要的比较(例如比较站点 A 的成虫和站点 C 的幼虫,意义不大对我来说,但与 A 点的幼虫相比,A 点的成虫提供了更多信息)。这实际上是我目前正在通过 Excel 进行的工作,在对角线下方进行成虫比较,在对角线上方进行幼虫比较,然后沿对角线从同一地点对成虫 x 幼虫进行比较。

示例数据集:

library(vegan)

Site = c("A", "B", "C", "D", "E", "A", "B", "D", "E") 

LifeStage = c(Ad, Ad, Ad, Ad, Ad, L, L, L, L) 

Sp1 = c(56, 42, 67, 23, 44, 21, 15, 20, 12) 

Sp2 = c(15, 10, 17, 1, 5, 2, 3, 1,6)

Sp3 = c(10, 6, 7, 10, 5, 4, 0, 1, 0)

Sp4 = c(9, 6, 4, 8, 13, 5, 2, 1, 0)

df = data.frame(Site, LifeStage, Sp1, Sp2, Sp3, Sp4)

mat <- df[,3:6]
 
dist.mat <- vegdist (mat, dist = "bray") #All comparisons, but many unnecessary

注意:我知道不是每个站点都有成虫和幼虫数据

我找到的最佳解决方案来自 。我可以看到此选项有效,只是听起来它仍然无法帮助我跳过上述手动步骤的需要。

感谢您的帮助!

这使您可以只计算所需的值,但不会 assemble 将它们放入矩阵中,因为不清楚您希望如何表示缺失的幼虫阶段:

(Adult <- vegdist(df[which(df$LifeStage=="Ad"), 3:6], dist="bray"))
#           A_Ad      B_Ad      C_Ad      D_Ad
# B_Ad 0.1688312                              
# C_Ad 0.1135135 0.2201258                    
# D_Ad 0.3636364 0.3207547 0.4890511          
# E_Ad 0.1974522 0.1145038 0.2839506 0.3211009

(Larval <- vegdist(df[which(df$LifeStage=="L"), 3:6], dist="bray"))
#           A_L       B_L       D_L
# B_L 0.2692308                    
# D_L 0.1636364 0.2093023          
# E_L 0.4400000 0.2105263 0.3658537

(unlist(sapply(unique(df$Site), function(x) vegdist(df[which(df$Site==x), 3:6], dist="bray"))))
#         A         B         D         E 
# 0.4754098 0.5238095 0.2923077 0.6000000