代码之家  ›  专栏  ›  技术社区  ›  Christine S

如何使用R的vegan包中的specaccum()指定置换的子集/样本数

  •  0
  • Christine S  · 技术社区  · 7 年前

    我有一个群落矩阵(物种作为列,样本作为行),我想从中使用R的vegan包中的specaccum()和fitspecaccum()函数生成物种累积曲线(SAC)。为了使样本X处得到的SAC和累积物种丰富度在区域之间具有可比性(我每个区域有一个群落矩阵),我需要让specaccum()在每个区域内选择相同数量的集合。我的问题是,一些地区的集合数量比其他地区多。我希望将样本大小限制为区域之间的最小集合数(在我的情况下,最小集合数为45,因此我希望specaccum()为每个区域随机采样45个集合,100次(集合置换=100)。我想从每个地区可用的整个数据集中采样。下面的代码不起作用。。。它不识别“子集=45”。素食套餐信息显示“子集”需要符合逻辑。。。我不明白子集数为什么是逻辑的,但也许我误解了子集是什么。。。还有别的方法吗?对每个区域可用的全部集合运行specaccum()是否足够,然后将输出截断为45?

    require(vegan)    
    pool1<-specaccum(comm.matrix, gamma="jack1", method="random", subet=45, permutations=100)
    

    非常感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jari Oksanen    7 年前

    为什么要将函数限制为在45个案例的随机样本中工作?只需利用物种积累 高达 45例。从45个案例中随机抽取一个子集,除了子采样和丢弃信息的随机误差外,可以得到相同的累积。如果你想比较不同的案例,只需在适合所有案例的样本量下进行比较,即45或更少。这就是物种积累模型的思想。

    subset 适用于(可能)采样单元的异构采集,并且希望分层数据的情况。例如,如果您只想看到巴罗科罗拉多数据的“OldLow”栖息地类型中的物种积累,您可以执行以下操作:

    data(BCI, BCI.env)
    plot(specaccum(BCI, subset = BCI.env$Habitat == "OldLow"))
    

    take <- c(rep(TRUE, 30), rep(FALSE, 20))
    plot(specaccum(BCI)) # to see it all
    # repeat the following to see how taking subset influences
    lines(specaccum(BCI, subset = sample(take)), col = "blue")
    

    如果重复最后一行,您会看到随机子集对结果的影响:这些行通常在所有数据的误差线内,但由于随机误差而彼此不同。