2017-12-25 6 views
2

は、これは、例えば、データテーブルである:ブートストラップが、リサンプリングユニットのための新しい識別子を作成

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 
結果はこのようなものであるかもしれないので

ブートストラップサンプルを無作為に、「N」の4つのグループを描画する(この実現では、グループ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から引き出された2番目のグループです"(例えば3.1および3.2)またはそれを達成するもの。

答えて

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 

:これは、2つの変数が含まれています。グループが繰り返されるので、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 

よりコンパクトな解決策が可能です。ブートストラップされたデータをどのように使用するかによって、ブートストラップグループが同じサイズでなければ、あらゆる種類の問題が発生する可能性があります。

関連する問題