4

グループを含むデータ セットをブートストラップしたいと考えています。簡単なシナリオは、単純な手段をブートストラップすることです:

data <- as.data.table(list(x1 = runif(200), x2 = runif(200), group = runif(200)>0.5))
stat <- function(x, i) {x[i, c(m1 = mean(x1), m2 = mean(x2)), by = "group"]}
boot(data, stat, R = 10)

incorrect number of subscripts on matrix一部のため、これによりエラーが発生しますby = "group"。サブセット化を使用してなんとか解決できましたが、この解決策は気に入りません。この種のタスクを機能させる簡単な方法はありますか?

特に、次のような統計関数に追加の引数を導入し、stat(x, i, groupvar)それを次のようなブート関数に渡したいと思いboot(data, stat(groupvar = group), R = 100)ます。

4

3 に答える 3

2

これはそれを行う必要があります:

data[, list(list(boot(.SD, stat, R = 10))), by = group]$V1
于 2013-09-20T14:03:13.377 に答える
1

グループ部分に到達する前に、コードに多くの問題があります。

このようなことを意味していましたか?

data <- as.data.frame(list(x1 = runif(200), x2 = runif(200), group = factor(sample(letters[1:2]))))
stat <- function(x, i)  c(m1 = mean(x$x1[i]), m2 = mean(x$x2[i]))

> stat(x,1:10)
       m1        m2 
0.4465738 0.5522221 

そこから、グループごとに行うことを心配することができます。

例えば:

library(plyr)
dlply( data, .(group), function( dat ) boot(dat, stat, R=10) )

より大きなデータセットについては、次を試してくださいdata.table

by( seq(nrow(data)), data$group, function(idx) myboot(data[idx,]))

出力をリストにしたいので、の引数でby()はなくを使用しました。それを行うために私が知らない機能がいくつかあるかもしれませんが、見つけることができませんでした (それが引き起こした問題については編集履歴を参照してください)。data.table,by=

サブセット化は引き続きdata.table's[]メソッドを介して行われるため、かなり高速になるはずです。

于 2013-09-20T11:00:13.197 に答える