r - R中治疗组和地点的多样性指数

标签 r plyr vegan

我正在尝试使用素食主义者的 diversity() 函数计算 R 中的反辛普森多样性指数。我想为每个实验处理计算这个指数。

我的数据看起来有点像这样,其中 species 是物种 x 站点列联表,env 是处理因子 x 站点表:

spe <- read.table(header=TRUE, text="
  S1   S2   S3   S4
  0    1    2    1
  0    1    1    0
  1    0    0    3
  0    1    0    1
  1    2    1    0
")  

env <- read.table(header=TRUE, text="
  Stage
  a
  b
  c
  a
  c
")  

理想情况下,我会为每个 (a,b,c) 治疗因素获得一个单一的多样性指数值。

我知道 specnumber() 函数有一个组选项,但我没有看到任何类似的多样性,希望找到一种简单的方法来做同样的事情。我尝试过应用 summaryBy()aggregate()ddply(),但没有成功。

我还为每个 env$Stage 尝试了蛮力计算 diversity(subset(spe, env$Stage=="a"),"simpson") >但这仍然为我提供了该阶段每个站点的辛普森多样性指数,而不是整个阶段的指数。

谢谢。

最佳答案

diversity 中没有这样的groups 参数,因为它没有明确定义:你是指一个组中抽样单元的平均多样性,还是一组抽样单位的平均值?它们是不同的东西,最好明确地做你想让这个索引做的事情。

第一件事比较简单:只需计算 SU 的多样性并按组取平均值:

tapply(diversity(spe, "simpson"), env$Stage, mean)

对于普通社区的多样性,您首先需要按聚合数据,然后计算每个组的多样性(对于大多数指数meansum 在通常的 diversity() 索引中给出相同的结果,但 summean 不适用的某些情况下有效:

diversity(aggregate(. ~  env$Stage, spe, sum)[,-1], MARGIN=1, index="simpson")

aggregate 想要添加一个额外的列来命名行,我们必须用 [,-1] 删除它,并给出转置的结果,我们需要设置MARGIN = 1(或使用 t() 进行反向转置)。

如您所见,结果是不同的。有些人将这种差异称为 beta 多样性。

关于r - R中治疗组和地点的多样性指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376286/

相关文章:

r - 涉及希腊符号的构面标签

r - 如何计算数据集中每个主题的变量

重命名 ldply 中的 .id 列

r - 在 ggplot2 中绘制 envfit 向量(vegan 包)

r - 叠加不同物种积累图

r - 如何在R中的数据框中创建具有相同ID的四个点的组合?

重新排序因子给出不同的结果,具体取决于加载的包

r - face_wrap 图与 R 中的 pROC 包(几个变量)

r - 使用 ifelse 和 is.null 来测试 NULL 值

r - 对质心的 95% 置信椭圆进行颜色编码