不同生命阶段的 Bray-Curtis 差异
Bray-Curtis Dissimilarity Across Life Stages
我正在尝试计算和可视化一组网站和生命阶段之间的 Bray-Curtis 差异。所以基本上,我正在尝试创建一个可以可视化三件事的矩阵:
- 所有成人社区之间的差异
- 同一地点的成虫和幼虫群落之间的差异
- 所有幼虫群落之间的差异
我可以 运行 对所有社区进行计算,然后手动选择我实际需要的比较(例如比较站点 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
我正在尝试计算和可视化一组网站和生命阶段之间的 Bray-Curtis 差异。所以基本上,我正在尝试创建一个可以可视化三件事的矩阵:
- 所有成人社区之间的差异
- 同一地点的成虫和幼虫群落之间的差异
- 所有幼虫群落之间的差异
我可以 运行 对所有社区进行计算,然后手动选择我实际需要的比较(例如比较站点 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