在子集上重复子采样行和预先形成函数

时间:2018-02-14 22:54:01

标签: r for-loop bootstrapping

我有一个像这样的数据集:

set.seed(569)
dat<- data.frame(region=c(rep(1, 20), rep(2, 10)), loc= paste("plot", "_",seq(1,30,1)), 
      sp1= sample(0:3, 30, replace=T),sp2= sample(0:3, 30, 
      replace=T),sp3= sample(0:3, 30, replace=T),sp4= sample(0:3, 30, 
      replace=T),sp5= sample(0:3, 30, replace=T),sp6= sample(0:3, 30, 
      replace=T),sp7= sample(0:3, 30, replace=T),sp8= sample(0:3, 30, 
      replace=T),sp9= sample(0:3, 30, replace=T),sp10= sample(0:3, 
      30, replace=T))

每行代表一个区域内的绘图数据。我想计算每个子集的多样性,以便我可以了解图的数量的方差如何导致区域alpha多样性的变化。这需要一个循环我不确定如何构建。首先,循环应该按区域进行子集,然后对于每个区域,我想要对单个区域进行RANDOMLY子采样x行(绘图)。然后,我将对每个子集进行预计算并存储输出。

区域子集的每次迭代应该是x-i行,直到x-(x / 2)子集被采样。因此,我想对行进行采样,直到我对一个区域内的一半行进行二次采样。因此,循环应该能够循环通过较小的数据子集并执行函数。

例如,在region 1中,有20个图表或loc的唯一级别。在我的第一个子样本中,我会随机选择19个图并预先形成函数。在第二个子样本中,我将随机选择18个图并继续此过程,直到我对10个图进行二次抽样。对于区域2,我只会为5个地块执行此操作。由于某些地区的地块数量不均匀,因此可能需要if else声明才能采样至少一半(如果不是更多)。

此循环应重复1000次,以便每个子集(x-i)具有1000个值。

以下是我想在每个子集上运行的函数。假设我从区域1开始并随机抽样plot_1-plot_10。

 sub1<- dat[1:10,3:12]

1)首先,计算该子集内每个物种的频率总和:

sub1<- 
 sub1 %>%
 summarise_all(funs(sum))

2)然后,计算该子集的多样性:

sub1 <- d(sub1, lev = "alpha",q=2)

这个特殊的例子会产生5.929448的alpha多样性。值需要存储在具有两列(区域,多样性)的数据框中,以便我可以按区域解开方差。

0 个答案:

没有答案