2016-08-30 4 views
1

回帰係数のブートストラップSEを取得しようとしています。私はブートストラップを実行するためにbootパッケージを使用しています`boot`パッケージの層別サンプル戦略をカスタマイズする

set.seed(1234) 
df <- data.frame(y = rnorm(1:30), 
      fac1 = as.factor(sample(c("A","B","C","D","E"),30, replace = T)), 
      fac2 = as.factor(sample(c("NY","NC","CA"),30,replace = T)), 
      x = rnorm(1:30)) 

library(boot) 
fun <- function(data, index){ 
    data <- df[index,] 
    reg <- lm(y ~ fac1 + fac2 + x, data) 
    coef(reg) 
} 
test.boot <- boot(df, fun, strata = df$fac1, 100) 

をただし、Rは文句:

Error in boot(df, fun, strata = df$fac1, 100) : 
number of items to replace is not a multiple of replacement length 

述べたように私の状況はまったく同じであるように使用してデータが見えますhere。ここでの問題は、各グループの観察が不十分であることです。 bootパッケージのstrataオプションは、1つの要素変数に対してのみ機能するようです。私の場合は、fac1fac2という2つの要素に基づいてサンプルを階層化する必要があります(ここで私の理解が間違っているかどうか教えてください)。

stratified投稿されたhereは、必要な正確な層別サンプルを生成できます。ここでの問題は、boot関数にstratified関数を実装して、boot関数を正しいサンプルで動作させる方法です。

現在、正しい層別サンプルを使用してブートストラップを実行するには、自分でfor-loopを作成しています。しかし、私はまだstratifiedの機能をbootに組み込むことができるかどうかを知りたいですか?助言がありますか?ありがとうございました!

+0

2つの要因から1つの要因を構築するには、 'help(" interaction ")'を参照してください。 – lmo

+0

ありがとう@lmao。私は "相互作用"を使うことは間違いなく上記の問題を解決する良い方法だと思います。もっと複雑な状況のために 'stratified 'によって提供される余分な機能を必要とするかもしれないので、' boot'に 'stratified'のような他のカスタマイズされた機能を組み込むことができるのはまだ不思議です。ありがとう! – Chuan

答えて

1

bootパッケージを慎重に分析した後、元のコードbootを変更せずに問題に解決策を見つけると思います。実際にはbootは、ユーザーにサンプリング戦略をカスタマイズさせる方法を提供します。 help(boot)sim = "parametric"ran.genのオプションを確認してください。

私の場合、ran.gen関数を指定してstratified関数をネストし、それを使ってブートストラップ用のサンプルを再生成することができます。

fun <- function(data){ 
      reg <- lm(y ~ fac1 + fac2 + x, data) 
      coef(reg)} 

rgen <- function(df,stratified){ 
     #code of stratified goes here and other specifications ... } 

test.boot <- boot(df, fun, 1000, sim = "parametric", ran.gen = rgen) 

完了!