Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:大数の法則と中心極限定理の役割 | 統計:ブートストラップ・ジャックナイフ

要点(BLUF)

1. アイデア:データを母集団の代理にする

統計量(平均・中央値・相関…)の誤差を知るには、本来「母集団から標本を取り直す」のを何度も繰り返したい。でも母集団は手に入りません。ブートストラップの発想は、**「手元の標本を母集団の最良の推定(経験分布)とみなし、そこから取り直す」**こと。

経験分布 F^n\hat{F}_n は、観測した nn 点それぞれに確率 1/n1/n を置いた分布。ここから nn 個を復元抽出(同じ点が何度も選ばれうる)すれば、「母集団からの新しい標本」の代理になります。これを BB 回繰り返し、毎回統計量 θ^\hat{\theta}^* を計算すれば、{θ^1,,θ^B}\{\hat{\theta}^*_1, \dots, \hat{\theta}^*_B\} が統計量の標本分布の近似になります。

flowchart LR
    D["元データ n個"] -->|"復元抽出 n個"| R1["リサンプル1 → θ*1"]
    D -->|"復元抽出 n個"| R2["リサンプル2 → θ*2"]
    D -->|"… B回 …"| RB["リサンプルB → θ*B"]
    R1 & R2 & RB --> S["θ* の分布 = 標準誤差・信頼区間"]

2. 検証:平均の標準誤差は理論と一致するか

平均なら標準誤差の理論値 σ/n\sigma/\sqrt{n} が分かっています。ブートストラップがこれを再現するか確かめます(母集団は指数分布、平均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、理論 σ/n\sigma/\sqrt{n} = 0.1187 でほぼ一致——ブートストラップが正しく機能していることの検証です。そして真価は中央値の行:中央値の標準誤差には簡単な閉形式がないのに、ブートストラップは同じ手続きで 0.1370 と出せました。「統計量を計算できさえすれば、その誤差が分かる」——これがブートストラップの汎用性です。

3. なぜ機能するのか(プラグイン原理)

ブートストラップの根拠はプラグイン原理:母集団 FF の代わりに経験分布 F^n\hat{F}_n を「差し込む(plug in)」。大数の法則(大数の法則と中心極限定理の役割)により、nn が大きければ F^n\hat{F}_nFF に近づくので、F^n\hat{F}_n からのリサンプリングは FF からの標本抽出をよく近似します。さらに、BB 回のリサンプリング自体がモンテカルロ近似なので、BB を増やせば近似は精密になります(誤差は 1/B1/\sqrt{B})。

ブートストラップには2段の近似があることに注意:(1) FF^nF \approx \hat{F}_n(標本サイズ nn で決まる、増やせない)、(2) 理論的なブート分布 \approx BB 回の有限反復(BB で決まる、計算で増やせる)。ブートストラップが正当化される条件(一致性)の理論は統計の本拠ブートストラップ・ジャックナイフ)なので、ここでは手続きと数値挙動に集中します。

4. 使いどころと種類

数式の直観的意味

ブートストラップは「もう一度実験をやり直せたら結果がどれだけブレるかを、手元のデータだけでシミュレートする**」操作です。本当は母集団から何度も標本を取り直してばらつきを見たいが、それができないので、「手元の標本=母集団の縮図」と割り切って、その縮図から取り直す。復元抽出なのは、母集団からの抽出が「同じ値が再び出てもおかしくない独立抽出」だから——非復元だと毎回同じデータに戻ってしまい、ばらつきが出ません。中央値のように「順序統計量で、微小変化に対して滑らかでない」量は解析的な誤差評価が難しいのに、ブートストラップは実際に計算してばらつきを数えるので、式の有無に縛られない。これが「シミュレーションに基づく推測」の強みです。

⚠️ よくある誤解・落とし穴

対応シミュレーション参照

本文の平均・中央値のブートストラップSE(default_rng(50)、平均SEが理論と一致)。

関連ノート