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