如何使用 R 的素食包中的 specaccum() 为排列指定子集/样本数

How to specify subset/ sample number for permutations using specaccum() in R's vegan package

我有一个社区矩阵(物种作为列,样本作为行),我想使用 R 的素食包中的 specaccum() 和 fitspecaccum() 函数从中生成物种积累曲线 (SAC)。为了使样本 X 的结果 SAC 和累积物种丰富度在区域之间具有可比性(每个区域我有 1 个社区矩阵),我需要让 specaccum() 在每个区域内选择相同数量的集合。我的问题是某些地区的集合数量比其他地区多。我想将样本大小限制为区域之间的最小集合数(在我的例子中,最小集合数是 45,所以我希望 specaccum() 随机抽样 45 组,100 次(集合排列=100)对于每个区域。我想从每个区域可用的整个数据集中进行采样。下面的代码没有工作......它不识别 "subset=45"。素食包信息说 "subset" 需要合乎逻辑...我不明白子集编号如何合乎逻辑,但也许我误解了什么是子集...还有另一种方法吗? 运行 specaccum() 就足够了吗对于每个区域可用的全部集合,然后只需 t运行 将输出设为 45?

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

非常感谢任何帮助。

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

subset 适用于您拥有(可能)异构的采样单元集合并且您想要对数据进行分层的情况。例如,如果您只想查看 Barro Colorado 数据的 "OldLow" 栖息地类型中的物种积累,您可以这样做:

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

如果你想拥有相同数据的 30 个样例图的子集,你可以这样做:

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")

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