【问题标题】:Bootstrapping with replacement by group, but creating a new identifier for resampled units按组替换引导,但为重采样单元创建新标识符
【发布时间】:2017-12-25 22:25:18
【问题描述】:

我正在尝试使用 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 组被抽取,第 3 组被抽取两次):

   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)或完成此任务的东西。

【问题讨论】:

    标签: r data.table statistics-bootstrap


    【解决方案1】:

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

    首先我们生成一个引导样本。这包含两个变量:新组 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
    

    一个更紧凑的解决方案可能是可能的。请注意,如果引导组的大小不同,则根据您使用引导数据的方式,引导组可能会给您带来各种问题。

    【讨论】:

      猜你喜欢
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 2018-04-22
      • 1970-01-01
      • 2020-11-21
      • 2013-09-18
      相关资源
      最近更新 更多