如何在R的纯素包中使用specaccum()指定排列的子集/样本号

时间:2017-09-15 16:31:23

标签: r vegan

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

为什么要将功能限制在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")

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