【问题标题】:How to specify subset/ sample number for permutations using specaccum() in R's vegan package如何在 R 的 vegan 包中使用 specaccum() 为排列指定子集/样本数
【发布时间】:2017-09-15 16:31:22
【问题描述】:

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

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

非常感谢任何帮助。

【问题讨论】:

  • subset而不是subet会有帮助吗?无论如何,手册页说subsetlogical expression indicating sites (rows) to keep。因此,如果您有 n "sets" 并且您想选择其中的 45 个,则您需要一个逻辑变量,即 TRUE 用于 45 个案例,FALSE 用于其他案例:这 45 个具有 TRUE 值的将是您子集。要随机混合您需要的情况,请使用 sample 置换 subset 向量。请注意permutations是指一个subset内的case排列数,即不会改变排列之间的subset

标签: r vegan


【解决方案1】:

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

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

【讨论】:

  • 谢谢贾里!这对我来说很清楚。
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 2020-02-19
  • 2018-08-06
  • 2020-03-16
  • 2016-07-12
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多