ブートストラップの間隔にひどいカバレッジがあるのはなぜですか?


29

t間隔をブートストラップ間隔と比較し、両方のカバレッジ確率を計算するクラスのデモを行いたいと思いました。歪んだ分布からデータを取得したいのでexp(rnorm(10, 0, 2)) + 1、シフトした対数正規分布からサイズ10のサンプルとしてデータを生成することにしました。1000個のサンプルを描画するスクリプトを作成し、各サンプルについて、1000回の繰り返しに基づいて95%のt間隔と95%のブートストラップパーセンタイル間隔の両方を計算しました。

スクリプトを実行すると、両方の方法の間隔は非常に似ており、両方のカバレッジ確率は50〜60%です。ブートストラップの間隔の方が良いと思ったので驚きました。

私の質問は

  • コードを間違えた?
  • 間隔の計算を間違えましたか?
  • ブートストラップ間隔がより良いカバレッジプロパティを持つことを期待することでミスを犯しましたか?

また、この状況でより信頼性の高いCIを構築する方法はありますか?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability

3
多くの場合、ブートストラップの別の使用法であるバイアスを特定して修正することを忘れています。ブートストラップにバイアス補正を含めると、CIのパフォーマンスが大幅に向上する可能性があります。
whuber

@whuber:良い点、+ 1。私が覚えている限りでは、Davison&HinkleyのBootstrapメソッドとそのアプリケーションは、ブートストラップのバイアス補正およびその他の改善について、わかりやすくアクセスしやすい紹介を提供します。
S. Kolassa -復活モニカ

1
他のブートストラップのバリエーション、特に基本的なブートストラップを試す価値があります。
フランクハレル14

3
ブートストラップは大規模なサンプル手順です。特に対数正規データの場合、は大きくありません。n=10
クリフAB

回答:


16

Canto、Davison、Hinkley&Ventura(2006)によるブートストラップ診断と対策は、論理的な出発点のようです。彼らは、ブートストラップが壊れる可能性のある複数の方法について議論し、さらに重要なこととして、診断と可能な対策を提供します。

  1. 外れ値
  2. 誤ったリサンプリングモデル
  3. 非ピボット性
  4. ブートストラップ方式の不整合

この状況では、1、2、および4に問題はありません。3.を見てみましょう。@ Ben Ogorekが述べているように@Glen_bは通常の議論は赤いニシンかもしれませんが)、ブートストラップの有効性は、関心のある統計の重要性に依存します。

Cantyらのセクション4。各リブート内のパラメーター推定値のバイアスと分散の測定値を取得するために、リサンプリング内でリサンプリングすることを提案します。以下は、pから式を複製するコードです。記事の15:

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

ブートストラップ診断

ログのスケールに注意してください-ログがなければ、これはさらに露骨です。ブートストラップの平均推定値の分散が、ブートストラップのサンプルの平均とともにどのように上がるかがわかります。これは、信頼区間の低いカバレッジの原因として、非ピボット性に非難をかけるのに十分な喫煙銃のように見えます。

ただし、多くの方法でフォローアップできることを喜んで認めます。たとえば、特定のブートストラップレプリケートの信頼区間に真の平均が含まれるかどうかは、特定のレプリケートの平均にどのように依存するかを調べることができます。

治療に関しては、Canty et al。変換について議論すると、対数がここで思い浮かびます(たとえば、ブートストラップし、平均ではなく、記録されたデータの平均の信頼区間を構築します)が、実際に機能させることはできませんでした。

カンティ等。重要度サンプリングと平滑化によって内部ブートストラップの数と残りのノイズの両方を削減する方法を議論し続け、ピボットプロットに信頼帯を追加します。

これは賢い学生にとっては楽しい論文プロジェクトかもしれません。他の文献と同様に、私がどこを間違えたかについてのポインタをいただければ幸いです。そしてdiagnostic、この質問にタグを追加する自由を取ります。


13

私はステファンKolassaの分析と結論に同意する一方で、 とサンプル平均は間違いおおよそのピボットではありません、私は追加の発言をしてみましょう。統計 とブートストラップを調査しました。結果は約0.8のカバレッジでした。完全な解決策ではなく、改善点です。 μトン

μ^μ
μ^t
mμ^μσ^

次に、セットアップ全体についてもう少し考えました。10個の観測値と非常にゆがんだ分布で、平均をノンパラメトリックに推定することはもちろん、適切なカバレッジで信頼区間を構築することは基本的に不可能ではないでしょうか?

考慮される対数正規分布の平均は、です。以来、の平均は分布の-quantile!これは、10個すべての観測値が平均よりも小さい確率がであることを意味します。そのため、18%未満のケースでは、最大の観測値は平均値よりも小さくなっています。0.82を超えるカバレッジを取得するには、平均値が最大の観測値を超えるまでの信頼区間の構築が必要です。分布が極端に歪んでいるという事前の仮定なしに、このような構造をどのように作成(および正当化)できるかを想像するのは困難です。しかし、私は提案を歓迎します。 P X 2 = 0.84 X N0 4 0.84 0.84 10 = 0.178e2+1=8.39P(X2)=0.84XN(0,4)0.840.8410=0.178


仰るとおりです。このディストリビューションから1つのサンプルを入手した人の観点から考えたいと思いました。この場合、ブートストラップを安全に使用することは安全ではないことをどのようにして知ることができますか?私が考えることができる唯一の考えは、分析を行う前にログを取ったかもしれないということですが、他の回答者の1人は、これは実際には役に立たないと言います。
ヒラメ14

1
10個のデータポイントだけでは、それが安全か安全かはわかりません。ゆがみや太い尾が疑われる場合、解決策は平均とは異なるパラメーターに焦点を当てることです。たとえば、対数平均または中央値。これは、追加の仮定を行わない限り、平均の推定値(または信頼区間)を提供しませんが、分布の裾に対する感度が低いパラメーターに焦点を合わせることは、より良い考えかもしれません。
NRH

6

計算は正しかったので、よく知られているパッケージbootとクロスチェックしました。さらに、パーセンタイルブートストラップ間隔のバイアス補正バージョンであるBCa間隔(Efronによる)を追加しました。

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

元のサンプルサイズが10、たとえば20または50より大きい場合、間隔ははるかに良好になると思います。

さらに、bootstrap-tメソッドは、通常、統計の歪みに対してより良い結果をもたらします。ただし、ネストされたループが必要なため、計算時間が20倍以上になります。

仮説検定では、片側カバレッジが良好であることも非常に重要です。そのため、両面のカバレッジだけを見ると誤解を招く場合があります。


1
サンプルサイズに関するコメントに加えて:良い、彼のリサンプリング方法(第3版、2006年、19ページ)では、サンプルサイズブートストラップが不安定になる可能性があると述べています。残念ながら、私は手元に本を持っていないので、彼の議論や参考文献を調べることはできません。n<100
S. Kolassa -復活モニカ

5

私もこれについて混乱しており、1996年のDiCiccioとEfronのBootstrap Confidence Intervalsに多くの時間を費やしました。

実際、ブートストラップを汎用的な方法として考えることは少なくなりました。私はそれを、あなたが本当に立ち往生しているときにジャムからあなたを引き出す何かと考えていました。しかし、私はその汚い小さな秘密を学びました:ブートストラップ信頼区間はすべて何らかの形で正規性に基づいています。説明させてください。

ブートストラップは、推定器のサンプリング分布の推定値を提供します。これは、期待できるすべてです。しかし、サンプリング分布と信頼区間の間の古典的なリンクは、重要な量を見つけることに基づいていることを思い出してください。さびている人は、とが既知である場合を考えてください。量は重要です。つまり、その分布は依存しません。したがって、で、残りは履歴です。

xN(μ,σ2)
Z = X - μσ
z=xμσN(0,1)
μPr(1.96xμσ1.96)=0.95

信頼区間に関連する正規分布のパーセンタイルを正当化するものについて考えるとき、それはこの便利なピボット量に完全に基づいています。任意の分布の場合、サンプリング分布のパーセンタイルと信頼区間の間に理論的なリンクはなく、ブートストラップサンプリング分布の生の割合を取得してもそれはカットされません。

そのため、エフロンのBCa(バイアス補正)区間は変換を使用して近似正規性を取得し、ブートストラップtメソッドは結果として得られるt統計がほぼピボットであることに依存します。これで、ブートストラップは瞬時に地獄を推定できるようになり、いつでも標準を想定して標準の+/- 2 * SEを使用できるようになりました。しかし、ブートストラップでノンパラメトリックになったすべての作業を考えると、それは非常に公平ではないように思えますか?


2
私が何かを見逃した可能性はありますが、ブートストラップが重要な量または重要な量に関連しているという事実は、それ自体が正常性との関連を意味しません。特定の状況では、重要な数量にはあらゆる種類の分布があります。また、最後の2番目の段落のイタリック体の文がどのように続くかわかりません。
-Glen_b-モニカーの復活2014

1
それでは、正常性に関する主張はどのように続きますか?
-Glen_b-モニカーの復活2014

1
すべての連続分布は正規性への正確な変換を持っているため(は常に標準正規)、すべての連続分布を正規近似に基づくものとして除外したように見えます。Φ - 1 [ F X ]FΦ1[F(X)]
グレン_b-モニカを復元する14

2
わからない場合、それを識別するのは簡単ではありません。ポイントは、そのような変換が明確に存在するということだけでした。エフロンは、より良い間隔を取得しようとしています。彼がtransform-to-approx-normal / make-an-interval / transform-b​​ackを経由するからといって、それが彼が正規性への特別な接続を想定していることを意味するわけではありません。F
-Glen_b-モニカーの復活2014

2
@Glen_bに追加する方法:正規分布への変換は、メソッドが正しいことを証明するためにのみ必要です。メソッドを使用するために見つける必要はありません。さらに、正規分布が気に入らない場合は、他の対称的で連続的な分布で証明全体を書き換えることができます。正規分布の使用は技術的には有用ですが、厳密に必要というわけではありません。データのソースやサンプル平均については何も言及していません。
ピーター

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.