ブートストラップは、小さなサンプルサイズの「治療」と見なすことができますか?


71

この質問は、私がこの大学院レベルの統計教科書で読んだものによって引き起こされ、統計セミナーでのこのプレゼンテーション中に(独立して)聞いたこともあります。どちらの場合も、ステートメントは「サンプルサイズがかなり小さいため、このパラメトリックメソッド代わりに(またはそれに沿って)ブートストラップを介して推定を実行する」という行に沿っていました。X

彼らは詳細には触れませんでしたが、おそらくその理由は次のとおりでした。メソッドは、データが特定のパラメトリック分布従うと仮定します。実際には、分布は正確にはではありませんが、サンプルサイズが十分に大きければ問題ありません。この場合、サンプルサイズが小さすぎるため、分布を仮定しない(ノンパラメトリック)ブートストラップに切り替えましょう。問題が解決しました!XDD

私の意見では、それはブートストラップの目的ではありません。私がそれを見る方法は次のとおりです:十分なデータがあることが多かれ少なかれ明らかな場合、ブートストラップは1つにエッジを与えることができますが、標準エラー、p値および同様の統計を取得するための閉じた形式のソリューションはありません。古典的な例は、2変量正規分布からサンプルを与えられた相関係数のCIを取得することです。閉形式の解は存在しますが、ブートストラップがより複雑になるほど複雑です。ただし、ブートストラップが小さなサンプルサイズで逃げるのに何らかの形で役立つことを意味するものは何もありません。

私の知覚は正しいですか?

この質問がおもしろい場合は、別のより具体的なブートストラップの質問があります。

ブートストラップ:オーバーフィットの問題

PS「ブートストラップアプローチ」のひどい例の1つを共有することはできません。著者の名前は公開していませんが、2004年にクオンティティブファイナンスに関する本を書いた古い世代の「クオンツ」の1人です。例はそこから引用しています。

次の問題を考えてみましょう。4つの資産と、それぞれ120の月次リターン観測値があるとします。目標は、年間収益の結合4次元累積分布関数を構築することです。1つの資産であっても、4次元cdfの推定はもちろんのこと、年10回の観測だけではタスクはほとんど達成できないように見えます。しかし、心配する必要はありません。「ブートストラップ」が役立ちます。利用可能な4次元の観測値をすべて取得し、12を置換でリサンプリングし、それらを組み合わせて、年間収益の単一の「ブートストラップ」4次元ベクトルを構築します。それを1000回繰り返して、見よ、あなたは自分自身に1000年の年次リターンの「ブートストラップサンプル」を得た。これをcdf推定、または1000年の歴史から導き出せるその他の推論のために、サイズ1000のiidサンプルとして使用します。


18
私はあなたの最初のパラグラフと同じような感情を聞いたり読んだりしますが、私は反対する傾向があります。私は通常、小さなサンプルでは必ずしもブートストラップが役立つとは思わない。その正当化は漸近的/大規模なサンプルであり、実際には多くの場合、小規模なサンプルのパフォーマンスには問題があります。たとえば、間隔のカバレッジは、通常の公称レートとはかなり異なります。これは別の便利なツールですが、長年にわたって告知されてきた他の多くのツールと同様に、一部の人々が想像している万能薬ではありません。私はそれが非常に小さなサンプルに対する解決策だとは本当に思いません。
Glen_b 14

Simon Sheatherの(図3.40)には、サンプルサイズが大きくなく、エラーが正規分布していない場合の推論のブートストラップを提案する回帰のフローチャートがあります。
トニーラドソン14

2
4番目の段落の質問への回答はyesです(または、少なくとも、私のクラスのテストでこの回答をした場合は、議論の功績が認められます)。この議論を確認しましたか?では私の答えは、私は、ブートストラップが作る近似の説明を与え、すべてのブートストラップは、法の限界を認識しているお読みくださいブローあなたのマインド紙への参照を与えました。あなたの質問にトリガブック/論文/プレゼンテーションへの参照を見ていいだろう
StasK

ブートストラップは、補正項を持つ通常の近似のように、エッジワース展開で余分な項を与えるだけではありませんか?
確率論的

回答:


34

私はブートストラップ用のパーセンタイル信頼区間を使用する代わりに、T間隔のZ間隔を使用し、使用することと等価であることを読んだ覚えの代わりに分母のために。残念ながら、これをどこで読んだか思い出せず、クイック検索で参照を見つけることができませんでした。nが大きい(ととき、ブートストラップの利点は、これらのマイナーな問題を上回るとき、これらの違いはあまり重要ではないん大きい)が、小さなでこれは問題を引き起こす可能性があります。シミュレートおよび比較するRコードを次に示します。n 1 n nnn1nn

simfun <- function(n=5) {
    x <- rnorm(n)
    m.x <- mean(x)
    s.x <- sd(x)
    z <- m.x/(1/sqrt(n))
    t <- m.x/(s.x/sqrt(n))
    b <- replicate(10000, mean(sample(x, replace=TRUE)))
    c( t=abs(t) > qt(0.975,n-1), z=abs(z) > qnorm(0.975),
        z2 = abs(t) > qnorm(0.975), 
        b= (0 < quantile(b, 0.025)) | (0 > quantile(b, 0.975))
     )
}

out <- replicate(10000, simfun())
rowMeans(out)

1回の実行の結果は次のとおりです。

     t      z     z2 b.2.5% 
0.0486 0.0493 0.1199 0.1631 

したがって、t検定とz検定(真の母標準偏差を使用)を使用すると、設計どおりタイプIエラー率が得られることがわかります。不適切なz検定(サンプル標準偏差で除算しますが、Tの代わりにZ臨界値を使用)は、nullを必要な回数の2倍以上拒否します。ブートストラップでは、nullを必要な回数3回拒否しています(真の平均である0が間隔内にあるかどうかを確認します)ので、この小さなサンプルサイズの場合、単純なブートストラップは適切なサイズではないため、問題を修正しません(これはデータが最適に正常な場合です)。改善されたブートストラップ間隔(BCaなど)はおそらくより良い結果になりますが、これは小さなサンプルサイズの万能薬としてブートストラップを使用することに関する懸念を引き起こすはずです。α


6
あなたの最後の文は私に興味を起こさせたので、私はあなたの例でこれを試しました。bootパッケージを使用し、すべての可能な間隔を提供しました:一次正規近似間隔、基本的なブートストラップ間隔、スチューデント化されたブートストラップ間隔、ブートストラップパーセンタイル間隔(コードは既に提供しています)、および調整されたブートストラップパーセンタイル(BCa)間隔。結果は、スチューデント化された間隔を除いて、本質的にすべて同じでした(拒否率は.16-.17前後)。これは、名目(.05)の拒否率(標準のt検定に似ているので理にかなっています)を持ちました。
ヴォルフガング14

2
@Wolfgang、追加のシミュレーションを行ってくれてありがとう。他の間隔が少し良くなっていないことは少し驚いていますが、0.05のレベルを満たしていないことは驚くことではありません。
グレッグスノー14

1
はい、私も少し驚きました!時々私たちの直感が失敗します。そのため、数分以内にRで小さなスクリプトを作成し、10,000 \times 10,000反復を実行して(完了までにさらに数分かかりました)、物事を確認できるのはとても素晴らしいことです。そして、あなたの例は、物事が「いい」(つまり、データが実際に正常である)場合でも、ブートストラップが小さなサンプルで非常に悪いパフォーマンスを発揮できることをうまく示しています。
ヴォルフガング14

実際、このシミュレーションで見られる問題は、まさにここで質問し、@ whuberのコメントで答えた問題です:stats.stackexchange.com/questions/323455/…。したがって、問題はサンプルサイズではなく、各サンプル内のパラメトリック推論の独立性の違反だとは思いません。
ハーフパス

2
代わりにを使用することと同等であるパー​​センタイル信頼区間に関するコメントは、ここからですtzt
デヨンリム

14

サンプルサイズが小さい場合(サイドライトとして、「小さい」とは、各研究分野の基本的な慣習に依存するようです)、ブートストラップは魔法を使いません。データベースが調査中の2つの変数のそれぞれについて3つの観測値を含むと仮定すると、推論は意味をなしません。私の経験では、ノンパラメトリックブートストラップ(1,000または10,000回のレプリケーション)は、サンプル分布(少なくとも10-15の観測値)が歪んでいて、通常のt検定の前提条件が満たされていない場合、t検定の置換にうまく機能します。さらに、観測数に関係なく、医療費では常に発生するため、データが明確に歪んでいる場合、ノンパラメトリックブートストラップが必須の選択になる場合があります。


1
データが正に歪んでいる場合、ブートストラップは必須の選択肢かもしれません-代わりに対数正規分布または同様の歪んだ分布を使用してはどうですか SASとRには多くの選択肢があります。
ジェームズ14

1
ジェームズの返信に値する検討。ただし、コストデータのロギングで私が直面する通常の問題は、意思決定者に結果を提示する前の元のメトリックへの逆変換です。ノンパラメトリックブートストラップを使用すると、この問題を回避できます。
カルロラザロ14

カルロ、ログ変換の経験があるので、私の別の質問(50ポイントの報奨金があります)に答えることができます。stats.stackexchange.com
ジェームズ

ジェームス、数分前にあなたの質問に誘惑的な答えをしました。
カルロラザロ14

χ 2 1t -testsを参照、歪んだ集団補正することができるjstor.org/stable/2286597 -提案の修正は次のようにかなり偏っ集団でうまく 10の観察と。χ12
StasK 14

13

他の回答では、ブートストラップ自体ではなく、ブートストラップ信頼区間のパフォーマンスを批判しています。これは別の問題です。

コンテキストがブートストラップ分布の収束の規則性条件(ブートストラップサンプル数に関する収束)を満たしている場合、十分に大きなブートストラップサンプルを使用すると、メソッドは機能します。

ノンパラメトリックブートストラップの使用に関する問題を本当に見つけたい場合、次の2つの問題があります。

(1)リサンプリングの問題。

ブートストラップの問題の1つは、小さなサンプルでも大きなサンプルでも、リサンプリングのステップです。サンプルの構造(依存性、時間的、...)を維持しながら再サンプリングすることは常に可能とは限りません。これの例は、重ね合わせられたプロセスです。

それぞれにイベントが時々発生する多くの独立したソースがあると仮定します。任意の1つのソースでの連続するイベント間の間隔は、すべてが同じ分布の独立したランダム変数であると想定されるため、各ソースはおなじみのタイプの更新プロセスを構成します。ソースの出力は、1つのプールされた出力に結合されます。

依存関係を未知の構造に保ちながら、どのようにリサンプリングしますか?

(2)狭いブートストラップサンプルと小さなサンプルのブートストラップ信頼区間

小さなサンプルでは、​​各サブサンプルの推定量の最小値と最大値が狭い間隔を定義する場合があります。その場合、一部のモデルでは、信頼区間の左右の端点が非常に狭くなります(小さなサンプルを考えると直感に反します!)。

仮定する、速度です。プロファイル尤度を使用すると、次のように近似信頼区間を取得できます(95%近似信頼区間は0.147レベルのプロファイル尤度間隔です)。λ > 0x1,x2Exp(λ)λ>0

set.seed(1)
x <- rexp(2,1)
# Maximum likelihood estimator
1/mean(x)

# Profile likelihood: provides a confidence interval with right-end point beyond the maximum inverse of the mean
Rp <- Vectorize(function(l) exp(sum(dexp(x,rate=l,log=T))-sum(dexp(x,rate=1/mean(x),log=T))))

curve(Rp,0,5)
lines(c(0,5),c(0.147,0.147),col="red")

この方法では、信頼区間を抽出できる連続曲線が生成されます。の最尤推定量はです。リサンプリングにより、この推定器に対して取得できる値は3つだけであり、その最大値と最小値は、対応するブートストラップ信頼区間の境界を定義します。これは、大規模なブートストラップサンプルでも奇妙に見えるかもしれません(この数を増やしてもあまり効果はありません)。λ = 2 /X 1 + X 2λλ^=2/(x1+x2)

library(boot)
set.seed(1)
x <- rexp(2,1)
1/mean(x)
# Bootstrap interval: limited to the maximum inverse of the mean
f.boot <- function(data,ind) 1/mean(data[ind])
b.b <- boot(data=x, statistic=f.boot, R=100000)
boot.ci(b.b, conf = 0.95, type = "all")
hist(b.b$t)

この場合、とが近いほど、ブートストラップ分布は狭くなり、その結果、信頼区間は狭くなります(実際の値から遠くに位置する可能性があります)。実際、この例は@GregSnowが提示した例に関連していますが、彼の議論はより経験的でした。私が言及した範囲は、@ Wolfgangによって分析されたすべてのブートストラップ信頼区間の悪いパフォーマンスを説明しています。x 2x1x2


6

ブートストラップは、テストの正確性を保証することにより(たとえば、0.05の有意水準がテストの実際のサイズに近い)、小さなサンプルサイズでうまく機能しますが、ブートストラップは魔法の力を余分に与えませ。サンプル数が少ない場合は、ストーリーの終わりにほとんど力がありません。

パラメトリック(線形モデル)およびセミパラメトリック(GEE)回帰では、小さなサンプルプロパティが貧弱になる傾向があります。前者は、パラメトリックな仮定への大きな依存の結果であり、後者は、小さなサンプルのロバストな標準誤差推定の拡大によるものです。ブートストラップ(およびその他のリサンプリングベースのテスト)は、こうした状況で非常にうまく機能します。

予測のために、ブートストラップは分割サンプル検証よりも内部妥当性のより良い(より正直な)推定値を提供します。

ブートストラップは、平均補完手順/ホットデッキング(ファジーマッチングなど)を不注意に修正した結果として、多くの場合電力を削減します。ブートストラップは、個人が十分なクラスターサイズを満たすようにリサンプリングされ、分析データセットよりも大きいブートストラップされた一致データセットを提供する一致分析でより多くのパワーを与えると誤って主張されています。n


2
(たとえば、名目0.05有意水準がテストの実際のサイズに近いこと)-しかし、上記のRコードでは、ブートストラップがテストサイズを保持しないことがわかりました。
ジェームズ

グレッグスノーから提供された答えを参照しているようです。その結果に驚きました。事実を再確認し、回答を編集する必要があります。ありがとう。
AdamO 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.