基本的なブートストラップ信頼区間のカバレッジ確率


11

現在取り組んでいるコースについて次の質問があります。

モンテカルロ研究を実施して、標準の通常のブートストラップ信頼区間と基本的なブートストラップ信頼区間のカバレッジ確率を推定します。正規母集団からサンプリングし、サンプル平均の経験的カバレッジレートを確認します。

標準の通常のブートストラップCIのカバレッジ確率は簡単です。

n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);

LNorm = numeric(B);
UNorm = numeric(B);

for(j in 1:B)
{
    smpl = x[sample(1:n, size = n, replace = TRUE)];
    xbar = mean(smpl);
    s = sd(smpl);

    LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
    UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}

mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail

このコースで学んだことから、基本的なブートストラップ信頼区間は次のように計算できます。

# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);

それは理にかなっている。私が理解していないのは、基本的なブートストラップCIのカバレッジ確率を計算する方法です。カバレッジ確率は、CIに真の値(この場合mu)が含まれる回数を表すことを理解しています。boot関数を何度も実行するだけですか?

この質問にどのように別の方法でアプローチできますか?


あなたsize=100はタイプミスですか?ループでCIを計算すると(sqrt.n計算で使用するため)、暗黙的なサンプルサイズは1000と表示されるため、上限と下限が正しいとは思えません。また、なぜmu直接0ではなく(後者が真の意味である)と比較しているのですか?
枢機卿

また、smpl = x[sample(1:n, size = 100, replace = TRUE)]; に簡略化できますsmpl = sample(x, size=100, replace=TRUE)
枢機卿、

@cardinal-はい、タイプミスであり、mu0 と同じです。通常のCIは正常に機能します。これは、私が苦労してきた基本的なブートストラップCIです。
TheCloudlessSky

回答:


16

用語が一貫して使用されていない可能性があるため、以下は元の質問を理解する方法にすぎません。私の理解では、計算した通常のCIは要求されたものではありません。ブートストラップ複製の各セットは、1つではなく1つの信頼区間を提供します。一連のブートストラップ複製の結果から異なるCIタイプを計算する方法は次のとおりです。

B    <- 999                  # number of replicates
muH0 <- 100                  # for generating data: true mean
sdH0 <- 40                   # for generating data: true sd
N    <- 200                  # sample size
DV   <- rnorm(N, muH0, sdH0) # simulated data: original sample

計算をpackageの結果と比較したいのでboot、最初に、各複製で呼び出される関数を定義します。その引数は、元のサンプル、および単一の複製のケースを指定するインデックスベクトルです。それは戻り、の推定値でプラグイン、ならびに、プラグイン推定平均値の分散のための。後者は、ブートストラップ -CIにのみ必要です。MμSM2σM2t

> getM <- function(orgDV, idx) {
+     bsM   <- mean(orgDV[idx])                       # M*
+     bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N    # S^2*(M)
+     c(bsM, bsS2M)
+ }

> library(boot)                                       # for boot(), boot.ci()
> bOut <- boot(DV, statistic=getM, R=B)
> boot.ci(bOut, conf=0.95, type=c("basic", "perc", "norm", "stud"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL : 
boot.ci(boot.out = bOut, conf = 0.95, type = c("basic", "perc", "norm", "stud"))

Intervals : 
Level      Normal            Basic         Studentized        Percentile    
95%   ( 95.6, 106.0 )   ( 95.7, 106.2 )  ( 95.4, 106.2 )   ( 95.4, 106.0 )  
Calculations and Intervals on Original Scale

パッケージbootを使用replicate()しなくても、ブートストラップ複製のセットを取得するために単に使用できます。

boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))

しかしboot.ci()、参考のためにの結果に固執しましょう。

boots   <- bOut$t                     # estimates from all replicates
M       <- mean(DV)                   # M from original sample
S2M     <- (((N-1)/N) * var(DV)) / N  # S^2(M) from original sample
Mstar   <- boots[ , 1]                # M* for each replicate
S2Mstar <- boots[ , 2]                # S^2*(M) for each replicate
biasM   <- mean(Mstar) - M            # bias of estimator M

基本、パーセンタイル、および -CIは、ブートストラップ推定の経験的分布に依存しています。および変位値を取得するには、ブートストラップ推定値のソートされたベクトルに対応するインデックスを見つけます(インデックスが自然数でない場合、経験的変位値を見つけるために、より複雑な補間を行うことに注意してください)。 。tα/21α/2boot.ci()

(idx <- trunc((B + 1) * c(0.05/2, 1 - 0.05/2)) # indices for sorted vector of estimates
[1] 25 975

> (ciBasic <- 2*M - sort(Mstar)[idx])          # basic CI
[1] 106.21826  95.65911

> (ciPerc <- sort(Mstar)[idx])                 # percentile CI
[1] 95.42188 105.98103

以下のために -CI、我々はブートストラップ必要重要な計算に見積もりを -値を。標準正規CIの場合、臨界値は標準正規分布の値になります。tttz

# standard normal CI with bias correction
> zCrit   <- qnorm(c(0.025, 0.975))   # z-quantiles from std-normal distribution
> (ciNorm <- M - biasM + zCrit * sqrt(var(Mstar)))
[1] 95.5566 106.0043

> tStar <- (Mstar-M) / sqrt(S2Mstar)  # t*
> tCrit <- sort(tStar)[idx]           # t-quantiles from empirical t* distribution
> (ciT  <- M - tCrit * sqrt(S2M))     # studentized t-CI
[1] 106.20690  95.44878

これらのCIタイプのカバレッジ確率を推定するには、このシミュレーションを何度も実行する必要があります。コードを関数にラップし、CI結果のリストを返し、この要旨でreplicate()示されているように実行します。


うわー!-私が間違っていたことについての素晴らしい説明。また、コードのヒントをありがとう!これは完璧に動作します!
TheCloudlessSky

最後の質問です。この情報を複製しようとするcomputeCIsと、関数を作成してを呼び出しましたresults = replicate(500, computeCIs());。最後にcomputeCIs戻りますc(ciBasic, ciPerc)。カバレッジ確率をテストするにはmean(results[1, ] < 0 & results[2, ] > 0)、真の平均(カバレッジ確率)を含むすべての基本CIをテストする必要がありますか?これを実行すると、取得1する必要があると思います0.95
TheCloudlessSky

@TheCloudlessSkyは、カバレッジ周波数の面で期待される結果との完全な機能と完全なシミュレーションは、以下を参照してくださいpastebin.com/qKpNKK0D
カラカル

うん、私はばかです:)... Rでコードをコピーするときにタイプミスをしました...助けてくれてありがとう!:)
TheCloudlessSky

良い答えをありがとう@caracal。リンクpastebin.com/qKpNKK0Dが壊れています。更新して完全な機能と完全なシミュレーションを提供していただければ幸いです。ありがとう
MYaseen208
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.