Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:標準 | 重要度:B(推奨)

📎 前提:ブートストラップ法 | 統計:ブートストラップ・ジャックナイフ

要点(BLUF)

1. 一個抜き(leave-one-out)

ジャックナイフは、ii 番目を除いた n1n-1 個で統計量を計算します。これを全 ii について行い、nn 個の部分推定量 θ^(i)\hat{\theta}_{(i)} を得ます。

θ^(i)=θ^(x1,,xi1,xi+1,,xn)\hat{\theta}_{(i)} = \hat{\theta}(x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n)

これらのばらつきから標準誤差を、平均と元推定量の差からバイアスを見積もります。ブートストラップが「復元抽出をランダムに BB 回」なのに対し、ジャックナイフは「一個抜きを決定的に nn 回」——乱数を使わないので結果が一意です。

2. 標準誤差の推定

ジャックナイフ標準誤差は次式(θˉ()\bar{\theta}_{(\cdot)} は部分推定量の平均):

SE^jack=n1ni=1n(θ^(i)θˉ())2\widehat{\text{SE}}_{\text{jack}} = \sqrt{\frac{n-1}{n}\sum_{i=1}^n \left(\hat{\theta}_{(i)} - \bar{\theta}_{(\cdot)}\right)^2}

係数 (n1)/n(n-1)/n は、一個抜きが標本をほんの少ししか変えない(差が小さい)ことを補正する増幅項です。平均の標準誤差で理論値と一致するか確かめます。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(51)

data = rng.exponential(2.0, 200)
n = len(data)

# 一個抜きで平均を再計算
jack = np.array([np.delete(data, i).mean() for i in range(n)])
jack_mean = jack.mean()
se_jack = np.sqrt((n-1)/n * np.sum((jack - jack_mean)**2))

print(f"ジャックナイフSE(平均)= {se_jack:.4f}")
print(f"理論SE(平均)          = {data.std(ddof=1)/np.sqrt(n):.4f}")

出力:

ジャックナイフSE(平均)= 0.1411
理論SE(平均)          = 0.1411

出力の意味:ジャックナイフ標準誤差 0.1411 が理論値 σ/n\sigma/\sqrt{n} = 0.1411 と完全一致。実は平均に対しては、ジャックナイフ SE は標本標準誤差と代数的に厳密に一致します(一個抜き平均が線形なため)。乱数も反復も使わずに標準誤差が出る点が、ジャックナイフの簡便さです。

3. バイアス推定:n−1 補正を復元する

ジャックナイフの真骨頂はバイアス推定です。推定量のバイアスは

bias^jack=(n1)(θˉ()θ^)\widehat{\text{bias}}_{\text{jack}} = (n-1)\left(\bar{\theta}_{(\cdot)} - \hat{\theta}\right)

で見積もれます。これを、**分散の最尤推定(1/n1/n 版、バイアスあり)**に適用すると、ジャックナイフが自動で 1/(n1)1/(n-1) 補正(不偏分散)を導くことを確認します。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(51)
data = rng.exponential(2.0, 200)
n = len(data)

theta_hat = data.var(ddof=0)                  # 1/n の分散(バイアスあり)
jack_var = np.array([np.delete(data, i).var(ddof=0) for i in range(n)])
bias_jack = (n-1) * (jack_var.mean() - theta_hat)

print(f"プラグイン分散(1/n)   = {theta_hat:.4f}")
print(f"ジャックナイフ バイアス推定 = {bias_jack:.4f}")
print(f"バイアス補正後 = {theta_hat - bias_jack:.4f}")
print(f"不偏分散(1/(n-1)) = {data.var(ddof=1):.4f}")

出力:

プラグイン分散(1/n)   = 3.9610
ジャックナイフ バイアス推定 = -0.0199
バイアス補正後 = 3.9809
不偏分散(1/(n-1)) = 3.9809

出力の意味1/n1/n の分散 3.9610 は真の分散をわずかに過小評価する(負のバイアス)。ジャックナイフはバイアスを 0.0199-0.0199 と推定し、補正すると 3.9809——これは 1/(n1)1/(n-1) で計算した不偏分散とぴったり一致します。ジャックナイフが、教科書の「n1n-1 で割る」というバイアス補正を、式を知らなくてもデータから自動で再発見したわけです。これがジャックナイフがバイアス推定に使われる理由です。

4. ブートストラップとの使い分け

ジャックナイフブートストラップ
リサンプル一個抜き(決定的・nn 通り)復元抽出(ランダム・BB 回)
乱数不要必要
得意バイアス推定・軽量分布全体・信頼区間
弱点非滑らかな統計量(中央値)で不正確計算量が大きい

中央値のような滑らかでない統計量ではジャックナイフは標準誤差を誤ります(一個抜きでは中央値がほとんど動かない)。そこはブートストラップ(ブートストラップ法)の方が信頼できます。ジャックナイフは「ブートストラップの線形近似」と見なせ、両者は親戚です。

数式の直観的意味

ジャックナイフは「**各データ点が推定量にどれだけ影響しているか(影響関数)を、抜いてみることで測る」操作です。ii を抜いたときの推定量の動き θ^(i)θ^\hat{\theta}_{(i)} - \hat{\theta} が、点 ii の「てこの強さ」。標準誤差はこのてこの二乗和、バイアスはてこの平均的なずれから出ます。(n1)(n-1) 倍するのは、一個抜きが標本を 1/n1/n しか変えないので、その微小変化を母集団スケールに引き伸ばすため。分散の n1n-1 補正を復元するのは偶然ではなく、ジャックナイフが「サンプルサイズへの依存(1/n1/n の項)」を一個抜きの差分で捉えているから——バイアスの主要項が 1/n1/n に比例する推定量に対して、ジャックナイフはその項を正確に打ち消します。

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

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

本文の平均のジャックナイフSE(理論と一致)とバイアス推定(分散の n1n-1 補正を復元・default_rng(51))。

関連ノート