通过组替换引导,但为重新采样的单元创建新标识符

时间:2017-12-25 22:25:18

标签: r data.table bootstrapping

我正在尝试使用R中的替换来从数据表中引导组。

这是数据表,例如:

dat = data.table('n'=c(1,1,1,2,2,2,2,3,4,4,4,4,4),'y'=round(rnorm(13,0,1),1))


   n    y
 1: 1 -0.8
 2: 1  0.5
 3: 1 -0.1
 4: 2  0.2
 5: 2 -0.1
 6: 2 -2.7
 7: 2  0.1
 8: 3  0.3
 9: 4 -0.7
10: 4 -0.2
11: 4  1.2
12: 4  1.2
13: 4 -0.1

一个自举样本随机抽取4组'n',所以结果可能是这样的(在这个实现中,绘制了第1,4组,绘制了两次):

   n    y
 1: 4 -0.7
 2: 4 -0.2
 3: 4  1.2
 4: 4  1.2
 5: 4 -0.1
 6: 3  0.3
 7: 3  0.3
 8: 1 -0.8
 9: 1  0.5
10: 1 -0.1

然而,我的问题是,现在如果我按'n'分组,它认为第6行和第7行是同一个组,而实际上它们是重新采样的版本,所以我想以不同方式对待它们,例如,通过添加第三栏中写着“这是从3开始的第二组”(例如3.1和3.2)或其他可以实现这一目标的内容。

1 个答案:

答案 0 :(得分:1)

你可以通过联接(很可能也是其他方式)来做到这一点。

首先我们生成一个bootstrap样本。这包含两个变量:新组ID bid和样本组n

set.seed(84)
bootsample = data.table(n=sample(1:4, 4, replace=TRUE), bid=1:4)
bootsample

   n bid
1: 4   1
2: 2   2
3: 4   3
4: 4   4

然后我们需要将它合并回原始数据表。由于组重复,我们应该使用allow.cartesian=TRUE参数。您可以在后续分析中使用bid变量组。

merge(bootsample, dat, allow.cartesian=TRUE)

    n bid    y
 1: 2   2  1.1
 2: 2   2  2.2
 3: 2   2 -0.8
 4: 2   2 -1.4
 5: 4   1 -1.3
 6: 4   1 -0.4
 7: 4   1 -1.0
 8: 4   1  0.9
 9: 4   1 -0.3
10: 4   3 -1.3
11: 4   3 -0.4
12: 4   3 -1.0
13: 4   3  0.9
14: 4   3 -0.3
15: 4   4 -1.3
16: 4   4 -0.4
17: 4   4 -1.0
18: 4   4  0.9
19: 4   4 -0.3

可能有更紧凑的解决方案。请注意,如果引导组的大小不同,可能会给您带来各种问题,具体取决于您使用引导数据的方式。