🎓 レベル:標準 | 重要度:A(必須)
📎 前提:大数の法則と中心極限定理の役割 | 統計:ブートストラップ・ジャックナイフ
要点(BLUF)
- ブートストラップ法:手元の 個のデータを「母集団の縮図(経験分布)」とみなし、そこから復元抽出で 個を取り直すことを多数回繰り返します。
- 各リサンプルで統計量を計算すると、そのばらつきが統計量の標準誤差・分布の推定になります。解析式が要りません。
- 平均の標準誤差が理論値 と一致(0.1192 vs 0.1187)。解析式のない中央値の標準誤差も同じ手続きで得られます。
1. アイデア:データを母集団の代理にする
統計量(平均・中央値・相関…)の誤差を知るには、本来「母集団から標本を取り直す」のを何度も繰り返したい。でも母集団は手に入りません。ブートストラップの発想は、**「手元の標本を母集団の最良の推定(経験分布)とみなし、そこから取り直す」**こと。
経験分布 は、観測した 点それぞれに確率 を置いた分布。ここから 個を復元抽出(同じ点が何度も選ばれうる)すれば、「母集団からの新しい標本」の代理になります。これを 回繰り返し、毎回統計量 を計算すれば、 が統計量の標本分布の近似になります。
flowchart LR
D["元データ n個"] -->|"復元抽出 n個"| R1["リサンプル1 → θ*1"]
D -->|"復元抽出 n個"| R2["リサンプル2 → θ*2"]
D -->|"… B回 …"| RB["リサンプルB → θ*B"]
R1 & R2 & RB --> S["θ* の分布 = 標準誤差・信頼区間"]
2. 検証:平均の標準誤差は理論と一致するか
平均なら標準誤差の理論値 が分かっています。ブートストラップがこれを再現するか確かめます(母集団は指数分布、平均2)。
import numpy as np
# 乱数シードを固定
rng = np.random.default_rng(50)
data = rng.exponential(2.0, 200) # 観測データ(n=200)
n = len(data)
B = 10000 # ブートストラップ反復回数
idx = rng.integers(0, n, size=(B, n)) # 復元抽出のインデックス
resamples = data[idx] # B×n のリサンプル
boot_means = resamples.mean(axis=1) # 各リサンプルの平均
boot_medians = np.median(resamples, axis=1)
print(f"標本平均 = {data.mean():.4f}")
print(f"ブートSE(平均)= {boot_means.std(ddof=1):.4f}")
print(f"理論SE(平均) = {data.std(ddof=1)/np.sqrt(n):.4f}")
print(f"標本中央値 = {np.median(data):.4f}")
print(f"ブートSE(中央値)= {boot_medians.std(ddof=1):.4f} (簡単な解析式なし)")
出力:
標本平均 = 1.7653
ブートSE(平均)= 0.1192
理論SE(平均) = 0.1187
標本中央値 = 1.2062
ブートSE(中央値)= 0.1370 (簡単な解析式なし)
出力の意味:平均の標準誤差はブートストラップ 0.1192、理論 = 0.1187 でほぼ一致——ブートストラップが正しく機能していることの検証です。そして真価は中央値の行:中央値の標準誤差には簡単な閉形式がないのに、ブートストラップは同じ手続きで 0.1370 と出せました。「統計量を計算できさえすれば、その誤差が分かる」——これがブートストラップの汎用性です。
3. なぜ機能するのか(プラグイン原理)
ブートストラップの根拠はプラグイン原理:母集団 の代わりに経験分布 を「差し込む(plug in)」。大数の法則(大数の法則と中心極限定理の役割)により、 が大きければ は に近づくので、 からのリサンプリングは からの標本抽出をよく近似します。さらに、 回のリサンプリング自体がモンテカルロ近似なので、 を増やせば近似は精密になります(誤差は )。
ブートストラップには2段の近似があることに注意:(1) (標本サイズ で決まる、増やせない)、(2) 理論的なブート分布 回の有限反復( で決まる、計算で増やせる)。ブートストラップが正当化される条件(一致性)の理論は統計の本拠(ブートストラップ・ジャックナイフ)なので、ここでは手続きと数値挙動に集中します。
4. 使いどころと種類
- ノンパラメトリック・ブートストラップ:本ノートの方法。分布を仮定せずデータから直接リサンプル。
- パラメトリック・ブートストラップ:分布形を仮定し、推定したパラメータの分布から生成。
- 適する統計量:平均・中央値・分位点・相関・回帰係数・予測誤差など、計算できる量なら何でも。
- 信頼区間への発展はブートストラップ信頼区間、一個抜きの親戚はジャックナイフ法。
数式の直観的意味
ブートストラップは「もう一度実験をやり直せたら結果がどれだけブレるかを、手元のデータだけでシミュレートする**」操作です。本当は母集団から何度も標本を取り直してばらつきを見たいが、それができないので、「手元の標本=母集団の縮図」と割り切って、その縮図から取り直す。復元抽出なのは、母集団からの抽出が「同じ値が再び出てもおかしくない独立抽出」だから——非復元だと毎回同じデータに戻ってしまい、ばらつきが出ません。中央値のように「順序統計量で、微小変化に対して滑らかでない」量は解析的な誤差評価が難しいのに、ブートストラップは実際に計算してばらつきを数えるので、式の有無に縛られない。これが「シミュレーションに基づく推測」の強みです。
⚠️ よくある誤解・落とし穴
- 「ブートストラップで標本サイズの不足を補える」ではない: が小さいと が母集団を近似できず、ブートストラップも当てになりません。 を増やしても (1) の近似は改善しません。
- 「非復元抽出でいい」ではない:復元抽出が必須。非復元だと毎回元データそのものになり、ばらつきがゼロに。
- 「 は大きいほど常に良い」だが限界も: を増やすとモンテカルロ誤差は減りますが、 由来の誤差は減りません。〜10000 が目安。
- 「極値・最大値にも使える」ではない:最大値など裾に強く依存する統計量はブートストラップが破綻しがち(経験分布に最大値より大きい値がない)。
- 「独立データ前提」を忘れない:時系列など依存データには素朴なブートストラップは不適。ブロックブートストラップ等が必要(統計)。
対応シミュレーション参照
本文の平均・中央値のブートストラップSE(default_rng(50)、平均SEが理論と一致)。
関連ノート
- ジャックナイフ法(次のトピック・一個抜き)
- 並べ替え検定(permutation test)(リサンプリングによる検定)
- ブートストラップ信頼区間(区間への発展)
- 推定量の信頼区間(解析的な信頼区間との対比)
- ブートストラップ・ジャックナイフ(統計・推定論)
- 第8章 ブートストラップとリサンプリング 目次
- シミュレーション・モンテカルロ法 全体目次