0

問題

サンプリングポイントを確立する際の不十分な実験計画を克服するための解決策を見つけようとしています。目的は、元のデータセットをサブセット化し、いくつかのレベルを持つ 2 つの要因に基づいてサンプリング ポイントの層化を強制することです。

一連の基準レベルを再定義できるような問題の一般的な定式化が必要です。

ノート

基準に基づいてテーブルをサブセット化する例を見つけました。最も関連性の高いのはBrian Diggsからの投稿ですが、そのソリューションを特定のケースに適用する一般的な方法が見つかりません。

データセット

私のdata.frameには、サンプルIDと2つの要素(f1とf2)の3つの列があります。基準は、f1 と f2 の値の間隔に基づいています。

dat <- structure(list(id = 1:203, f1 = c(22, 20.8, 20.7, 22, 12.1, 8, 
20.6, 22, 22, 21.6, 0, 22, 21.4, 15.9, 21.2, 19.1, 12.5, 16.6, 
14, 21.2, 14.7, 20.7, 20.5, 5.4, 19.1, 18.9, 22, 22, 22, 0, 0, 
22, 1.3, 1, 0, 9.4, 7.9, 14.5, 0, 1.5, 0, 20.3, 18, 17.3, 1, 
22, 0, 15, 17.9, 4.3, 19.5, 21.2, 21.2, 14.6, 2.3, 0, 6.7, 17.9, 
9.5, 19, 21.6, 16.6, 11.7, 13.7, 1.5, 1, 7.6, 3.7, 18.5, 13.5, 
20.9, 18.2, 11.5, 7.3, 6.5, 21.1, 22, 20.5, 20.5, 20, 16.2, 18.6, 
22, 15.1, 14.4, 10.8, 17.1, 5.7, 15.1, 12.8, 14.5, 8.8, 16.8, 
18.7, 1, 6.3, 1.8, 14.6, 22, 16.2, 12.9, 9.1, 2, 7.6, 7, 11.7, 
1, 1, 9.6, 11, 2, 2, 14, 14.9, 7.8, 11.4, 8.3, 7.6, 9.1, 4.5, 
18, 11.4, 3.1, 4.3, 9.3, 8.1, 1.4, 5.2, 14.7, 3.6, 5, 2.7, 10.3, 
11.3, 17.9, 5.2, 1, 1.5, 13.2, 0, 1, 7.4, 1.7, 11.5, 20.2, 0, 
14.7, 17, 15.2, 22, 22, 22, 17.2, 15.3, 10.9, 18.7, 11.2, 18.5, 
20.3, 21, 20.8, 15, 21, 16.9, 18.5, 18.5, 10.3, 12.6, 15, 19.8, 
21, 17.2, 16.3, 18.3, 10.3, 17.8, 11.2, 1.5, 1, 0, 1, 14, 19.1, 
6.1, 19.2, 17.1, 14.5, 18.4, 22, 20.3, 6, 13, 18.3, 8.5, 15.3, 
10.6, 7.2, 6.2, 1, 7.9, 2, 20, 16.3), f2 = c(100, 100, 92.9, 
38.5, 100, 90.9, 100, 100, 100, 91.7, 0, 100, 71.4, 100, 100, 
53.8, 28.6, 91.7, 100, 100, 64.3, 100, 92.9, 78.6, 100, 100, 
27.3, 83.3, 14.3, 0, 0, 9.1, 23.1, 12.5, 0, 100, 81.8, 100, 0, 
15.4, 0, 83.3, 100, 75, 7.1, 81.8, 0, 21.4, 84.6, 25, 80, 90.9, 
100, 71.4, 50, 0, 46.2, 90.9, 14.3, 66.7, 90.9, 84.6, 46.2, 91.7, 
33.3, 7.7, 71.4, 27.3, 46.2, 100, 100, 100, 60, 54.5, 46.2, 53.8, 
91.7, 100, 100, 66.7, 45.5, 57.1, 15.4, 75, 75, 76.9, 53.8, 25, 
90.9, 84.6, 91.7, 90.9, 100, 54.5, 23.1, 63.6, 30.8, 90.9, 92.9, 
100, 92.3, 90.9, 12.5, 38.5, 15.4, 84.6, 27.3, 7.1, 75, 21.4, 
7.7, 15.4, 84.6, 100, 69.2, 63.6, 64.3, 53.8, 92.3, 33.3, 11.1, 
61.5, 66.7, 23.1, 85.7, 81.8, 41.7, 69.2, 76.9, 38.5, 9.1, 23.1, 
85.7, 90, 100, 100, 14.3, 36.4, 84.6, 0, 7.7, 61.5, 25, 50, 100, 
0, 63.6, 36.4, 76.9, 100, 100, 100, 100, 90.9, 100, 100, 100, 
100, 100, 83.3, 100, 100, 100, 100, 50, 54.5, 71.4, 100, 85.7, 
100, 75, 100, 76.9, 83.3, 100, 92.3, 33.3, 76.9, 33.3, 0, 40, 
91.7, 100, 53.8, 100, 100, 100, 100, 100, 92.3, 76.9, 23.1, 84.6, 
33.3, 100, 92.3, 46.2, 100, 9.1, 53.8, 7.7, 20, 42.9)), .Names = c("id", 
"f1", "f2"), class = "data.frame", row.names = c(NA, -203L))

期待される出力

サンプリング ポイントは、理想的には交差計画に従ってグループ化する必要があります (これは完全な要因計画ではありません)。

係数 f1 の場合: 0、1 ~ 15、30 ~ 60、80 ~ 95、100
係数 f2 の場合: 0、5 ~ 10、15 ~ 20

次のように、f1 と f2 の間隔のすべての組み合わせを指定してポイントを見つける必要があります。

gr <- expand.grid(f1=c('0', '1-15', '30-60', '80-95', '100'),
                  f2=c('0', '5-10', '15-20'))
> gr
      f1    f2
1      0     0
2   1-15     0
3  30-60     0
4  80-95     0
5    100     0
6      0  5-10
7   1-15  5-10
8  30-60  5-10
9  80-95  5-10
10   100  5-10
11     0 15-20
12  1-15 15-20
13 30-60 15-20
14 80-95 15-20
15   100 15-20

datソリューションは、の行に基づいて分割する必要がありgrます。

すべての組み合わせがこの特定の基準の組み合わせを満たすわけではないため、これは完全な要因計画ではありませんが、NA も特定することが重要です。

どんな助けでも大歓迎です。十分な情報を提供しているかどうかお知らせください。

4

1 に答える 1

2

、 を使用して、ブレークポイントに基づいてcutを分割f1し、f2をまとめて、結合した に基づいて に分割します。factorpastefactorsplitfactor

dat$f1.group<-cut(dat$f1,c(0,1,15,30,60,80,90,95,100))
dat$f2.group<-cut(dat$f1,c(0,5,10,15,20))
gr<-expand.grid(levels(dat$f1.group),levels(dat$f2.group))
names(gr)<-c('f1.group','f2.group')
gr$combined = paste(gr$f1.group,gr$f2.group)
dat<-merge(gr,dat)[c('id','f1','f2','combined')]
split(dat,dat$combined)

これにより、 で定義されたコンボごとに 1 つの要素を持つlistofが得られます。これらの階層で簡単にサンプリングできます。data.framegr

于 2013-04-11T17:46:28.170 に答える