どのブートストラップ回帰モデルを選択すればよいですか?


10

私は、DV(病気:はい/いいえ)と5つの予測因子(人口統計[年齢、性別、喫煙(はい/いいえ)]、医療指標(通常)、1つのランダムな処理[はい/いいえ]のバイナリロジスティック回帰モデルを持っています])。また、すべての両側相互作用項をモデル化しました。主な変数は中央に配置され、多重共線性の兆候はありません(すべてのVIF <2.5)。

いくつか質問があります。

  1. ブートストラップは私の単一のモデルよりも有利ですか?もしそうなら、

  2. どのブートストラップモデルを選択すればよいですか?私は、ブートストラップアルゴリズムが新しいサンプルを作成するためのランダムな方法に従っているかどうか、または厳密なアルゴリズムがあるかどうかを確認したかっただけです。したがって、私は各試行で1000回リサンプリングしました(そのため、ブートストラップされたモデルがいくつかあり、それぞれに1000回の試行があります)。ただし、ブートストラップモデルの係数は毎回異なります(ただし、試行回数は常に1000です)。だから私は私のレポートのためにどちらを選ぶべきかと思いますか?一部の変更はわずかであり、係数の有意性に影響を与えませんが、一部の係数は重要ではなくなります(たとえば、元のモデルで0.05に近いP値が0.06に変化するもののみ)。

  3. 10,000のようなより大きな数を選択する必要がありますか?この制限をどのように決定できますか?

  4. ここでも、最初にブートストラップする必要がありますか?結果が毎回異なる場合、その結果を信頼できますか?

  5. 私のケースで私を助けることができる他の考えを覚えていますか?

大変感謝します。

回答:


21

ブートストラップは、回帰係数のサンプリング分布を推定するためのリサンプリング手法であり、したがって、回帰係数の標準誤差/信頼区間を計算します。この投稿には良い説明があります。必要なレプリケーションの数については、この投稿を参照してください

  1. ノンパラメトリックブートストラップは繰り返し再サンプリングし、ランダムに観測を置き換えて描画します(つまり、一部の観測は1回だけ描​​画され、他の観測はまったく描画されない)、ロジスティック回帰を計算して係数を格納します。これを繰り返しますn回。したがって、10,000の異なる回帰係数が得られます。これらの10'000係数は、信頼度の計算に使用できます。疑似乱数ジェネレータが使用されるため、シードを任意の数に設定するだけで、毎回まったく同じ結果が得られるようになります(以下の例を参照)。本当に安定した見積もりを得るには、1000回以上、おそらく1万回以上の複製をお勧めします。ブートストラップを数回実行して、1000回の複製でも10'000回の複製でも見積もりが大きく変化するかどうかを確認できます。平易な英語で:あなたが収束に達するまで、あなたは複製をとるべきです。ブートストラップ推定値が推定値と観測された単一モデルとの間で異なる場合は、観測されたモデルがサンプルの構造を適切に反映していない可能性があります。bootRたとえば、は、単一モデルの回帰係数とブートストラップサンプルの平均との差である「バイアス」を出力します。
  2. ブートストラップを実行するときは、単一​​のブートストラップサンプルではなく、たとえば10'000個のブートストラップサンプルにわたる統計(たとえば、回帰係数)の分布に関心があります。
  3. 10'000は1000より優れていると思います。最近のコンピューターでは、これは問題になりません。下の例では、私のPCが10'000個のサンプルを描画するのに約45秒かかりました。もちろん、これはサンプルサイズによって異なります。サンプルサイズが大きいほど、すべての観測値が考慮されるようにするために、反復回数を多くする必要があります。
  4. 「結果は毎回異なります」とはどういう意味ですか?ブートストラップのすべてのステップで、観測値は新しく置き換えられて描かれたことを思い出してください。したがって、観察結果が異なるため、結果として回帰係数がわずかに異なる可能性があります。しかし、私が言ったように、あなたは単一のブートストラップサンプルの結果に本当に興味がありません。レプリケーションの数が十分に多い場合、ブートストラップは非常に類似した信頼区間とポイント推定を毎回生成するはずです。

ここに例がありRます:

library(boot)

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

head(mydata)

mydata$rank <- factor(mydata$rank)

my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")

summary(my.mod)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

# Set up the non-parametric bootstrap

logit.bootstrap <- function(data, indices) {

  d <- data[indices, ]
  fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")

  return(coef(fit))
}

set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here

logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples

logit.boot

Bootstrap Statistics :
        original        bias    std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2*  0.002264426  4.054579e-05 0.001146039
t3*  0.804037549  1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099

# Calculate confidence intervals (Bias corrected ="bca") for each coefficient

boot.ci(logit.boot, type="bca", index=1) # intercept
95%   (-6.292, -1.738 )  
boot.ci(logit.boot, type="bca", index=2) # gre
95%   ( 0.0000,  0.0045 ) 
boot.ci(logit.boot, type="bca", index=3) # gpa
95%   ( 0.1017,  1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95%   (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95%   (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95%   (-2.425, -0.698 )

ブートストラップ出力は、元の回帰係数(「元の」)とそれらのバイアス(元の係数とブートストラップされた係数の差)を表示します。また、標準エラーも表示されます。元の標準エラーよりも少し大きいことに注意してください。

信頼区間から、バイアス補正(「bca」)が通常推奨されます。これは、元のスケールの信頼区間を示します。オッズ比の信頼区間については、信頼限界をべき乗するだけです。


完璧な答えをありがとう!:)このように応答しましょう:1.私はその概念に少し精通していました(1000の異なる(リサンプリングされた)モデルで1000の異なる係数の平均を計算しようとしている)。「バイアス」の問題とそのような変動が発生することを明確にしていただきありがとうございます。試行回数を増やす必要があります。:) 2.「ブートストラップモデル」とは、単一のリサンプリングモデルを意味するものではありません。ただし、これらの1000回の反復の平均を意味しました。実際、私は自分のモデルを10回ブートストラップしました。だから私は手元に10のブートストラップモデルを持っています。
Vic

それらのそれぞれは、「異なる」結果を示しています。しかし、10,000のリサンプリングで3つまたは4つのブートストラップモデルを試して、反復数が10,000であるかどうかを確認します。異なるブートストラップモデル(それぞれ10000)は似ているか、それとも100000をさらに増やす必要がありますか?
Vic

@Vicコメントありがとうございます。1000回の反復でそれぞれ10個のブートストラップを実行するのではなく、たとえば10'000回またはそれ以上の反復(50'000?)で1回のみ実行します。これにより、安定した推定値と信頼区間が得られます。
COOLSerdash 2013年

3.それは問題ではありません。どちらの基準でその番号を選択すればよいか知りたいだけですか?私は、1000回のブートストラップを2回実行して、それらが異なることがわかった場合、代わりに、より多くのリサンプリングトライアル(たとえば、5000または10000)が必要になることを根拠にできると思います。
Vic

4.「結果は毎回異なります」とはどういう意味ですか?レプリケーションの数が十分に多い場合、ブートストラップは毎回非常に類似した信頼区間とポイント推定を生成するはずです。
Vic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.