r-布雷-柯蒂斯不同人生阶段的差异

  • 本文关键字:人生 布雷 r vegan
  • 更新时间 :
  • 英文 :


我试图计算和可视化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

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

我找到的最好的解决方案来自这个线程。我可以看到这个选项是有效的,只是听起来它仍然不能帮助我跳过上面提到的手动步骤。

谢谢你的帮助!

这可以让你只计算你想要的值,但它不会将它们组合成矩阵,因为你不清楚如何表示缺失的幼虫阶段:

(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 

最新更新