本ページで扱うキーワード群。 各チップから該当セクションへジャンプできる。
あなたが今見ているのは 区間推定 (interval estimation) の用語ページである。 区間推定は、 母数 (母平均・母比率・母分散など) を「点」ではなく「範囲」で推定する手法で、 推定の不確かさを定量的に伝える役割を持つ。 上位概念は 推定 (estimation)、 対概念は 点推定 (point estimation)、 出力結果は 信頼区間 (confidence interval) として扱われる。 SSDSE-B-2026 の都道府県データを用いて、 全国平均が「どの範囲に含まれる可能性が高いか」を実際に計算する。
点推定が「平均は 100」と一点で答えるのに対し、 区間推定は「平均は 95〜105 の範囲にあると 95% の確信を持って言える」と答える。 サンプルサイズが小さい・ばらつきが大きいほど区間は広がり、 信頼度を上げる (90→99%) ほど区間は広くなる。
日常的なたとえ: 体重計が「68.5 kg」と表示するのは点推定。 「±0.3 kg の誤差で 68.2〜68.8 kg」と幅で答えるのが区間推定。 後者は誤差の存在を率直に開示する。
SSDSE-B-2026 の 47 都道府県人口から「全国 (47 都道府県という母集団) の平均人口」の 95% 信頼区間を求めれば、 全国平均はおおむね 180〜350 万人の範囲内に収まる、 という形で表現できる。
母分散 $\sigma^2$ が既知 (または $n$ が十分大きい) 場合、 母平均 $\mu$ の $100(1-\alpha)\%$ 信頼区間は次で与えられる:
母分散が未知 (実務の大半) の場合は、 標本標準偏差 $s$ と $t$ 分布 (自由度 $n-1$) を用いる:
| 記号 | 読み | 意味 |
|---|---|---|
$\bar{x}$ | エックスバー | 標本平均 — 観測したデータの平均値 |
$\mu$ | ミュー | 母平均 — 推定したい未知の真値 |
$\sigma$ | シグマ | 母標準偏差 (既知/未知で式が変わる) |
$s$ | エス | 標本標準偏差 — 観測データから計算した SD |
$n$ | エヌ | 標本サイズ — 観測した個数 (47 都道府県なら n=47) |
$z_{\alpha/2}$ | ゼット アルファ半 | 標準正規分布の臨界値 (95% なら 1.96) |
$t_{\alpha/2,n-1}$ | ティー | $t$ 分布の臨界値 (自由度 $n-1$、 $n=47$ 95% なら約 2.013) |
$\sigma/\sqrt{n}$ | 標準誤差 | 標本平均のばらつき = SE。 $n$ が増えると区間が縮む |
$\bar{x}$ を中心に、 標準誤差 $s/\sqrt{n}$ に臨界値 $t_{\alpha/2}$ を掛けた幅を上下に取る — これが信頼区間の正体。 $n$ が 4 倍になれば区間幅は半分、 信頼度を 95%→99% に上げれば臨界値が 1.96→2.58 に増え区間は広がる。
SSDSE-B-2026 の総人口 (A1101) 47 都道府県値から、 「全国 (47 都道府県を母集団とみなす) 平均人口」の 95% 信頼区間を算出する。 標本値の要約は以下:
| 統計量 | 値 (人) |
|---|---|
| 標本サイズ $n$ | 47 |
| 標本平均 $\bar{x}$ | 2,645,809 |
| 標本標準偏差 $s$ | 2,797,551 |
| 標準誤差 $SE = s/\sqrt{n}$ | 408,065 |
| $t_{0.025, 46}$ | 2.013 |
| 95% CI 下限 | 1,824,417 |
| 95% CI 上限 | 3,467,200 |
→ 全国の都道府県平均人口は 約 182 万〜347 万人 の範囲に 95% の信頼度で収まる。 区間幅 (約 164 万人) は東京・神奈川などの大都市と鳥取・島根などの小規模県で値の散らばりが極めて大きいことの反映である。
🎯 このコードでやること: SSDSE-B-2026 の総人口 (A1101) について、 scipy.stats.t.interval を使って母平均の 95% 信頼区間を計算する。
📥 入力データ (SSDSE-B-2026 抜粋):
1 2 3 4 5 6 7 8 9 10 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) pop = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna() ci = stats.t.interval(0.95, df=len(pop)-1, loc=pop.mean(), scale=stats.sem(pop)) print(f"標本平均: {pop.mean():,.0f}") print(f"95% CI : ({ci[0]:,.0f}, {ci[1]:,.0f})") |
📤 実行すると次の出力が得られる:
💬 結果の読み方: 47 都道府県の平均人口は約 265 万人で、 母平均 (この場合「47 都道府県という母集団の理論的な平均」) は 95% の確率で 182 万〜347 万人の範囲にある、 と結論できる。
🎯 このコードでやること: 同じ A1101 データを 10,000 回ブートストラップ再標本化し、 平均の経験分布から 2.5% / 97.5% 分位を取って 95% CI を構築する (t 分布を仮定しない手法)。
📥 入力データ: 上と同じ pop シリーズ (47 都道府県の総人口)。
1 2 3 4 5 6 7 8 9 10 | from scipy import stats import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) pop = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna().values res = stats.bootstrap((pop,), lambda x, axis: x.mean(axis=axis), confidence_level=0.95, n_resamples=10000, method='percentile') print(f"Bootstrap 95% CI: ({res.confidence_interval.low:,.0f}, {res.confidence_interval.high:,.0f})") |
📤 実行例:
💬 結果の読み方: t 分布版 (182〜347 万) とほぼ同じ範囲。 ブートストラップは分布を仮定しないので、 歪んだデータ (人口は東京が突出した右裾分布) に対しても妥当な区間が得られる。
🎯 このコードでやること: 信頼水準を 90%/95%/99% と変えて、 区間幅がどう変化するかを比較する。
📥 入力データ: 上と同じ pop (47 都道府県人口)。
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) pop = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna() for conf in [0.90, 0.95, 0.99]: ci = stats.t.interval(conf, df=len(pop)-1, loc=pop.mean(), scale=stats.sem(pop)) width = ci[1] - ci[0] print(f"{conf:.0%} CI: ({ci[0]:,.0f}, {ci[1]:,.0f}) 幅={width:,.0f}") |
📤 実行例:
💬 結果の読み方: 信頼度を上げるほど区間幅は単調に拡大する。 「確実性 (高い信頼水準)」と「情報量 (狭い区間)」はトレードオフ関係にある。
🎯 このコードでやること: 47 都道府県のうち、 ランダムに $n$ 個だけ取り出して 95% CI を計算し、 $n$ が増えると区間幅がどう縮むかを示す (理論的には $1/\sqrt{n}$ で減少)。
📥 入力データ: SSDSE-B-2026 から A1101 (総人口) を読み込み、 サンプルサイズ 5, 10, 20, 47 で部分標本化。
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) pop_all = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna() for n in [5, 10, 20, 47]: sub = pop_all.sample(n=n, random_state=0) ci = stats.t.interval(0.95, df=n-1, loc=sub.mean(), scale=stats.sem(sub)) print(f"n={n:>2}: 平均={sub.mean():>10,.0f} 95%CI幅={ci[1]-ci[0]:>10,.0f}") |
📤 実行例:
💬 結果の読み方: サンプルサイズが増えるにつれて区間幅が縮む傾向が確認できる (実値はランダム性で多少前後)。 区間を半分にするにはサンプル数を 4 倍にする必要がある — これが「平方根則」の威力。
🍰 まずはやさしく
答えを範囲で予想する方法です。
正解がどこにあるかを探るために使います。
テストの平均点をだいたいこの範囲だと予想します。
結論と計算の方法について読みましょう。
最も忙しい読者のために、 まず結論だけまとめます。 詳細は以下のセクションへ:
🍰 まずはやさしく
データの報告でよく使われる書き方です。
数値の不確かさをセットで伝えるために使います。
スマホアプリの利用時間を報告する時に役立ちます。
どこでこの考え方が出てくるかを確認しましょう。
論文で「平均 50.3 (95% CI: 48.1–52.5)」のような表記を見たことがあるはず。 「点推定 + 不確実性」を 1 つのセットで示すのが現代統計の標準。 p 値より 解釈しやすい ため近年は CI 推奨派が増加。
このページの読み方:まず 30秒結論 と 直感 を読み、 必要に応じて 数式 や 計算例、 落とし穴 に進んでください。
🍰 まずはやさしく
的に当てるのではなく網を投げるイメージです。
正解が含まれる範囲を知るために使います。
部活のメンバーの身長をだいたいで予想します。
直感的にどのような仕組みかを見ていきましょう。
「魚の平均サイズを 100 匹からの標本で推定」したい。
区間は「真の平均がどこにありそうか」の 不確実性 を示します。 n が増えるほど区間は狭くなり、 推定精度が上がる。
🍰 まずはやさしく
範囲を決めるための計算ルールです。
正確な幅を導き出すために使います。
買い物で予算の幅を決める時に似ています。
具体的な数式と使いかたを勉強しましょう。
実務でよくある問い「区間幅を ±X にしたい。 何件サンプルすればいい?」を解く。
$$n \geq \left( \frac{z_{\alpha/2} \cdot \sigma}{E} \right)^2 \quad (E = \text{許容誤差})$$
数式を言葉で読み解くと、 「$n$ は許容誤差 $E$ の 2 乗に反比例」。 つまり、 区間幅を半分にしたければサンプルは 4 倍必要。
このコードでやること: SSDSE-B-2026 都道府県データから推定した σ ≈ 2,797,551 を使い、 「95% CI 幅を ±500,000 にするには何件必要か」を計算する。
📥 入力データ: 標本標準偏差 s = 2,797,551(SSDSE-B-2026 47 県人口から計算)
1 2 3 4 5 6 7 8 9 10 11 12 | from scipy import stats import numpy as np sigma_est = 2_797_551 # SSDSE-B-2026 から z = stats.norm.ppf(0.975) # 1.96 # 許容誤差 E ごとに必要 n を計算 print(f'{"許容誤差 E":>14} | {"必要 n":>8}') print('-' * 27) for E in [100_000, 200_000, 300_000, 500_000, 800_000, 1_000_000]: n_req = np.ceil((z * sigma_est / E) ** 2) print(f'{E:>14,} | {int(n_req):>8}') |
📤 実行結果:
💬 結果の読み方: 47 県の現在の σ 推定値で、 ±500,000 の精度が欲しいなら 121 件必要 → 都道府県を超えた市町村レベルのデータが必要になる。 ±200,000 まで絞り込みたいなら 752 件 → 全市町村 (1700 個) でほぼ十分。
本セクションでは、 区間推定 $\bar{x} \pm z_{\alpha/2} \cdot \sigma / \sqrt{n}$ の式を、 構成要素ごとに「言葉」へ翻訳する。 計算手順だけでなく、 「なぜそれを掛けるのか」「なぜ √n で割るのか」まで言語化することで、 公式の暗記ではなく「意味の把握」が可能になる。
$\bar{x}$(標本平均)は、 母平均 $\mu$ の不偏推定量。 「点推定としてはこれが最良」という意味で区間の中心に置く。 ただし「ここに $\mu$ が必ずある」のではなく、 「ここを中心に分布が広がっている」と読む。
個別観測値の散らばりは $\sigma$ だが、 標本平均の散らばりはそれより小さい。 中心極限定理により、 標本平均 $\bar{X}$ の標準偏差は $\sigma / \sqrt{n}$ になる。 「$n$ が 4 倍になると不確かさが 2 倍縮む」は √ の効果。
数式を言葉で読み解くと、 「$\sqrt{n}$ で割る」=「サンプルが増えるほど平均は安定する。 だが、 縮むスピードは線形ではなく、 平方根の速さ」。 これが調査統計学で「サンプルサイズを 2 倍にしても精度は √2 ≒ 1.41 倍しか上がらない」と言われる根拠。
95% 信頼区間なら $z_{0.025} = 1.96$、 99% なら $z_{0.005} = 2.576$、 90% なら $z_{0.05} = 1.645$。 標準正規分布の両側で「外側に $\alpha$ だけ残す」分位点。 「区間が母平均をカバーする確率」を制御するのがこの係数の役割。
| 信頼度 | $\alpha$ | $z_{\alpha/2}$ | 対応する分位点 | 区間幅の目安 |
|---|---|---|---|---|
| 90% | 0.10 | 1.645 | $P(Z>1.645)=0.05$ | 最狭(リスク高め) |
| 95% | 0.05 | 1.960 | $P(Z>1.96)=0.025$ | 標準(実務デフォルト) |
| 99% | 0.01 | 2.576 | $P(Z>2.576)=0.005$ | 広め(高信頼度) |
| 99.9% | 0.001 | 3.291 | $P(Z>3.29)=0.0005$ | 医療等の重要場面 |
$\sigma$ が分からないとき、 標本標準偏差 $s$ で代用する。 だが $s$ 自体に推定誤差があるため、 $z$ よりやや広い分位点が必要。 これが $t$ 分布。 自由度 $df = n-1$。
$t$ 分布は $n$ が大きいほど正規分布に近づく。 「$n \geq 30$ で実用上 $z$ と区別不要」が経験則。 SSDSE-B-2026 (47 都道府県) は $df=46$ で $t_{0.025, 46} \approx 2.013$($z=1.96$ よりわずかに広い)。
区間推定では「信頼区間 (Confidence Interval, CI)」「予測区間 (Prediction Interval, PI)」「信用区間 (Credible Interval, CrI)」の 3 つが混同されがちだが、 解釈もスコープも異なる。 SSDSE-B-2026 47 都道府県データを題材に、 3 つを並べて比較する。
| 区間の種類 | 対象 | 解釈 | 幅の傾向 |
|---|---|---|---|
| 信頼区間 CI | 母平均 μ | 「同じ手順を 100 回繰り返すと 95 回はこの区間に μ が入る」 | 狭い(√n に反比例) |
| 予測区間 PI | 新しい個別観測値 y_new | 「次に観測される値の 95% がこの範囲」 | 広い(個体ばらつき含む) |
| 信用区間 CrI | パラメータ θ の事後分布 | 「与えられたデータの下で μ が 95% の確率でこの範囲」 | 事前分布次第 |
このコードでやること: SSDSE-B-2026 の 47 都道府県の総人口 (A1101) について、 信頼区間と予測区間を同時に出力し、 幅の差を比較する。
📥 入力データ (SSDSE-B-2026 抜粋、 47 行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) pop = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna().values / 1000 # 総人口を千人単位に変換 n = len(pop); mean = pop.mean(); sd = pop.std(ddof=1) se = sd / np.sqrt(n) # 信頼区間 (母平均 μ の 95% CI) ci_lo, ci_hi = stats.t.interval(0.95, df=n-1, loc=mean, scale=se) # 予測区間 (新規 1 県の値の 95% PI) pi_se = sd * np.sqrt(1 + 1/n) pi_lo, pi_hi = stats.t.interval(0.95, df=n-1, loc=mean, scale=pi_se) print(f'平均: {mean:.1f} 千人') print(f'95% CI: [{ci_lo:.1f}, {ci_hi:.1f}] 幅={ci_hi-ci_lo:.1f}') print(f'95% PI: [{pi_lo:.1f}, {pi_hi:.1f}] 幅={pi_hi-pi_lo:.1f}') |
📤 実行例:
💬 結果の読み方: CI の幅 1,643 千人に対し、 PI の幅は 11,382 千人で約 7 倍。 CI は「47 県平均がどこにあるか」の不確かさだけだが、 PI は「次に出てくる 1 県の値」をカバーするため個体差(東京 1409 万、 鳥取 54 万)を含む。 PI 下限が負になっているのは正規近似の限界 → 対数変換や分位点ブートストラップが必要。
区間推定の「振る舞い」を直感で捉えるには、 SSDSE-B-2026 の実データを 3 枚の標準図に当てはめて眺めると速い。 ここでは 散布図・ヒストグラム・箱ひげ図の 3 枚で、 信頼区間がデータのどの側面を要約しているかを読み解く。
横軸を「都道府県の総人口 (A1101)」、 縦軸を「65歳以上人口 (A1303)」とした散布図。 信頼区間は線形回帰の傾きパラメータに対しても定義され、 図中の回帰直線まわりにシャドウとして描かれる。 標本がばらつく中で、 母回帰直線が「どの帯のどこかに収まるか」を視覚化する。
図 1: SSDSE-B-2026 の総人口×65歳以上人口の散布図。 区間推定の対象が「点」ではなく「帯」になっていることがポイント。
同じ母集団から繰り返し標本を取って平均を求めると、 標本平均は釣鐘型に分布する(中心極限定理)。 ヒストグラムの両側 2.5% を切った範囲が、 ほぼ 95% 信頼区間の幅に対応する。 標本サイズ n が増えるほど分布は痩せ、 区間幅は $1/\sqrt{n}$ で縮む。
図 2: 47 都道府県データからブートストラップで 5,000 回再標本化した平均の分布。 両端の 2.5% を除いた範囲が 95% 信頼区間。
地方ブロック別(北海道/東北/関東/中部/近畿/中国/四国/九州)に賃金を箱ひげ図で並べると、 各群の中央値・四分位範囲の差が一目でわかる。 各群に対しブートストラップ CI(ノッチ)を加えると、 「中央値の差が偶然か」を視覚的に判断できる。 ノッチが重なれば差は不確実、 離れていれば有意性が示唆される。
図 3: 地方別賃金の箱ひげ図。 ノッチが中央値の 95% CI、 重なり具合で群差の確からしさを判断する。
区間推定は「結果の数字」よりも「数字の解釈」を間違えやすい。 以下 10 問を自力で答え、 解答と照合しよう。 すべて SSDSE-B-2026 を念頭においた実務想定の設問である。
採点目安: 8 問以上正解で「区間推定を実務で説明できるレベル」、 5-7 問で「概念は OK、 落とし穴の反復学習が必要」、 4 問以下なら本ページの「⚠️ 落とし穴・拡張版」と「信頼区間 vs 予測区間」セクションを再読しよう。
SSDSE-B 47 都道府県の TFR の母平均を区間推定:
解釈:「同じ手順で何度も標本を取り直したら、 そのうち 95% の区間が真の母平均を含む」。
合成データで母平均の信頼区間を計算する。
1 2 3 4 5 6 7 8 | import numpy as np from scipy.stats import norm xbar, sigma, n = 50, 10, 100 se = sigma / n**0.5 z = norm.ppf(0.975) ci = (xbar - z*se, xbar + z*se) print(f"95% CI: [{ci[0]:.2f}, {ci[1]:.2f}]") print(f"幅: {ci[1] - ci[0]:.2f}") |
💬 手計算 (Step 2) と Python 出力が完全一致。
「95% 信頼区間」の本当の意味は、 1 つの区間を見ても分かりません。 同じ手順を何度も繰り返すと初めて見えてきます。 下のシミュレーションでは、 真の母平均 μ = 100(緑の縦線・固定)から標本を何度も抽出し、 各標本の 95% 信頼区間を横棒で描きます。 約 95% の区間(緑)が μ を含み、 約 5% の区間(赤)が外す様子を体感してください。
💡 図の上をタップ/スワイプしても標本を抽出できます。 スライダーを動かすと区間幅が変わり、 標本はリセットされます。
最小再現コード。 SSDSE-B のような実データを前提に、 4〜8 行で動く例です:
1 2 3 4 5 6 7 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) x = df[df['SSDSE-B-2026'] == 2023]['A4103'].dropna() # A4103 = 合計特殊出生率 mean, se = x.mean(), x.std(ddof=1)/(len(x)**0.5) ci = stats.t.interval(0.95, len(x)-1, loc=mean, scale=se) print(f'平均 {mean:.3f}, 95% CI [{ci[0]:.3f}, {ci[1]:.3f}]') |
補足:ライブラリのバージョンや前処理状態によって出力は変わります。 自分の環境で動かすときは pip list でバージョンを確認し、 入力 CSV のパス・列名を実態に合わせてください。
SSDSE-B-2026 の都道府県人口データで、 (1) z 区間、 (2) t 区間、 (3) ブートストラップ区間、 (4) ベイズ信用区間 の 4 種類を計算し、 結果を比較する。
このコードでやること: SSDSE-B-2026 の 47 都道府県人口について、 母分散 σ が「過去の年次から既知 (例: σ=2,800,000)」と仮定し、 z 分布で 95% 信頼区間を計算する。
📥 入力データ: SSDSE-B-2026.csv(カラム例 — A1101 が総人口、 cp932 エンコーディング、 2 行目はカラム説明)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) # 2023 年の 47 都道府県 (R01000..R47000) を抽出 pref = df[df['SSDSE-B-2026'] == 2023].copy() pop = pref['A1101'].astype(float).values # 母標準偏差を既知と仮定 (歴史的データから σ=2,800,000) sigma = 2_800_000 mean = pop.mean() n = len(pop) se = sigma / np.sqrt(n) z = stats.norm.ppf(0.975) # 1.96 ci_low = mean - z * se ci_high = mean + z * se print(f'n = {n}') print(f'標本平均 = {mean:,.0f}') print(f'SE = {se:,.0f}') print(f'95% z 信頼区間: [{ci_low:,.0f}, {ci_high:,.0f}]') print(f'区間幅 = {ci_high - ci_low:,.0f}') |
📤 実行結果:
💬 結果の読み方: 47 県平均人口 2.6 百万人、 95% z 信頼区間 [1.8, 3.4] 百万人。 区間幅が広いのは「全国の県平均」という代表値が、 都道府県間の極端な散らばり(東京 1400 万 vs 鳥取 55 万)の影響を受けるため。
このコードでやること: 標本標準偏差 $s$ を使って t 分布で信頼区間を計算(実務の 99% はこちら)。
📥 入力データ: 上と同じ pop 配列(47 県人口)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from scipy import stats import numpy as np # scipy.stats.t.interval は (信頼度, df, loc, scale) を取る ci_t = stats.t.interval( confidence=0.95, df=n - 1, loc=pop.mean(), scale=stats.sem(pop) # = s / sqrt(n) ) print(f'標本平均 = {pop.mean():,.0f}') print(f'標本標準偏差 s = {pop.std(ddof=1):,.0f}') print(f'SE = {stats.sem(pop):,.0f}') print(f't_{{0.025, 46}} = {stats.t.ppf(0.975, df=n-1):.4f}') print(f'95% t 信頼区間: [{ci_t[0]:,.0f}, {ci_t[1]:,.0f}]') print(f'区間幅 = {ci_t[1] - ci_t[0]:,.0f}') |
📤 実行結果:
💬 結果の読み方: t 区間は z 区間より幅 ≈ 3.3% 広い($t/z = 2.013/1.96 = 1.027$)。 $n=47$ なので差は小さいが、 $n=10$ 程度なら 20-30% 広がる。 「不確かさを二重に補正する」という t 分布の役割が見える。
このコードでやること: 母集団分布の仮定 (正規性) を置かずに、 元データから復元抽出を 10,000 回繰り返してパーセンタイル法で 95% 区間を作る。
📥 入力データ: 上と同じ pop 配列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from scipy import stats import numpy as np # scipy.stats.bootstrap は (data, statistic, ...) のフォーマット rng = np.random.default_rng(seed=42) res = stats.bootstrap( (pop,), statistic=np.mean, n_resamples=10_000, confidence_level=0.95, method='percentile', random_state=rng, ) ci_boot = res.confidence_interval print(f'ブートストラップ標準誤差 = {res.standard_error:,.0f}') print(f'95% ブートストラップ信頼区間: [{ci_boot.low:,.0f}, {ci_boot.high:,.0f}]') print(f'区間幅 = {ci_boot.high - ci_boot.low:,.0f}') # BCa 法 (バイアス補正・加速度補正) も比較 res_bca = stats.bootstrap( (pop,), statistic=np.mean, n_resamples=10_000, confidence_level=0.95, method='BCa', random_state=rng, ) ci_bca = res_bca.confidence_interval print(f'95% BCa 信頼区間: [{ci_bca.low:,.0f}, {ci_bca.high:,.0f}]') |
📤 実行結果:
💬 結果の読み方: BCa はパーセンタイル法より右にシフト。 これは 東京 (1400 万) の極端な右裾による歪みを補正した結果。 元データが対数正規に近い形なら BCa の方が良い被覆率を持つ。 t 区間との不一致は「データが正規でない」ことの証拠。
このコードでやること: 母平均にフラットな事前分布を置き、 事後分布の 2.5%/97.5% 点で 95% 信用区間 (credible interval) を構成する。
📥 入力データ: 47 県人口 pop(平均 2,645,809、 標本 SE = 408,065)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from scipy import stats import numpy as np # Normal-Normal 共役: フラット事前 (分散 → 無限大) なら事後は N(x_bar, SE^2) posterior_mean = pop.mean() posterior_se = stats.sem(pop) # 95% 信用区間 (HDI に近い、 対称事後なら同じ) ci_bayes_low = stats.norm.ppf(0.025, loc=posterior_mean, scale=posterior_se) ci_bayes_high = stats.norm.ppf(0.975, loc=posterior_mean, scale=posterior_se) print(f'事後平均 = {posterior_mean:,.0f}') print(f'事後 SE = {posterior_se:,.0f}') print(f'95% ベイズ信用区間: [{ci_bayes_low:,.0f}, {ci_bayes_high:,.0f}]') # 弱情報事前 (過去の県平均 = 2,500,000、 事前分散 = (500,000)^2) との比較 prior_mean = 2_500_000 prior_var = 500_000 ** 2 data_var = posterior_se ** 2 # Normal-Normal 後事のクローズド形式 posterior_var2 = 1.0 / (1.0/prior_var + 1.0/data_var) posterior_mean2 = posterior_var2 * (prior_mean/prior_var + posterior_mean/data_var) posterior_se2 = np.sqrt(posterior_var2) ci2_low = stats.norm.ppf(0.025, loc=posterior_mean2, scale=posterior_se2) ci2_high = stats.norm.ppf(0.975, loc=posterior_mean2, scale=posterior_se2) print(f'弱情報事前による事後平均 = {posterior_mean2:,.0f}') print(f'95% 信用区間 (弱情報事前): [{ci2_low:,.0f}, {ci2_high:,.0f}]') |
📤 実行結果:
💬 結果の読み方: フラット事前のベイズ区間は z 区間とほぼ同じ。 弱情報事前 (2.5M ± 0.5M) を入れると事後は事前方向に引き寄せられ、 区間が約 23% 狭くなる。 ベイズの「事前情報を活用して精度を上げる」威力が定量的に確認できる。
SSDSE-B-2026 都道府県人口 ($n=47$、 平均 2,645,809) について、 4 種の方法で計算した 95% 区間を一覧する。
| 方法 | 下限 | 上限 | 幅 | 前提 |
|---|---|---|---|---|
| z 区間 (σ 既知) | 1,845,316 | 3,446,301 | 1,600,985 | 正規・σ 既知 |
| t 区間 (σ 未知) | 1,824,417 | 3,467,200 | 1,642,784 | 正規性 |
| Bootstrap % | 1,924,124 | 3,503,093 | 1,578,969 | なし(経験分布) |
| Bootstrap BCa | 2,025,812 | 3,657,451 | 1,631,639 | バイアス・スキュー補正 |
| Bayes (flat prior) | 1,846,016 | 3,445,601 | 1,599,585 | 事前分布 (平坦) |
| Bayes (informative) | 1,967,889 | 3,207,144 | 1,239,255 | 弱情報事前 |
📝 観察:
区間推定 を実務で扱うとき、 多くの分析者が同じところでつまずきます。 代表的な失敗パターンを先回りで押さえておくと、 後工程のトラブルを大幅に減らせます。
※ 上記は文献調査・現場経験で報告される頻度の高い注意点。 ドメインや手法のバージョンによって追加の落とし穴がある場合があります。
初学者が最も混同する 2 つの概念を、 数式と例で完全に切り分ける。
$$\bar{x} \pm t_{\alpha/2, n-1} \cdot \frac{s}{\sqrt{n}}$$
対象は母平均 $\mu$。 「47 県平均人口は約 [1.8M, 3.5M] にあるだろう」と言うときの区間。 $n$ を増やすほど狭くなる。
$$\bar{x} \pm t_{\alpha/2, n-1} \cdot s \cdot \sqrt{1 + \frac{1}{n}}$$
対象は新しい観測値 $X_{new}$。 「次に観測される 1 県の人口は約 [-3.0M, 8.3M] にあるだろう」と言うときの区間(負値が出るのは、 正規仮定が右スキュー実データに合っていない例)。 $n$ を増やしても下限は $\bar{x} \pm t \cdot s$ までしか縮まない。
CI の幅 ∝ $\frac{1}{\sqrt{n}}$、 PI の幅 ∝ $\sqrt{1 + \frac{1}{n}} \to 1$(n→∞)。 PI は「データ生成の散らばり $s$ そのもの」を超えて狭くなることはない。 一方 CI は無限に狭くできる。 「平均」と「個別値」の本質的違いがこの式に詰まっている。
このコードでやること: SSDSE-B-2026 の都道府県人口について、 CI と PI を並べて出力し、 幅の違いを定量化。
📥 入力データ: pop 配列(47 県人口、 平均 2,645,809、 s = 2,797,551)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from scipy import stats import numpy as np n = len(pop) mean = pop.mean() s = pop.std(ddof=1) t_crit = stats.t.ppf(0.975, df=n-1) # 信頼区間 (CI for mu) ci_half = t_crit * s / np.sqrt(n) ci_low, ci_high = mean - ci_half, mean + ci_half # 予測区間 (PI for new observation) pi_half = t_crit * s * np.sqrt(1 + 1/n) pi_low, pi_high = mean - pi_half, mean + pi_half print(f'95% 信頼区間 (母平均): [{ci_low:,.0f}, {ci_high:,.0f}] 幅={2*ci_half:,.0f}') print(f'95% 予測区間 (新観測値): [{pi_low:,.0f}, {pi_high:,.0f}] 幅={2*pi_half:,.0f}') print(f'PI / CI の比 = {pi_half/ci_half:.2f} 倍') |
📤 実行結果:
💬 結果の読み方: PI は CI の約 7 倍広い。 「平均がどこにあるか」と「次の 1 県がどこに来るか」は全く別の問い。 PI の下限が負になっているのは「正規仮定がデータに合っていない」サイン(人口は対数正規)→ ブートストラップや対数変換が必要。
教科書通りに計算しても、 解釈や報告の段階で誤用される例は枚挙にいとまがない。 ビジネスレポートや論文で頻発する 8 つを並べる。
| # | 誤用パターン | 何が問題か | 正しい対応 |
|---|---|---|---|
| 1 | CI を「真値の確率分布」として解釈する | 頻度論の枠組みから外れる。 個別 CI に確率は付与できない | 「手順の長期頻度」として説明、 確率解釈が欲しいならベイズ信用区間へ |
| 2 | CI が 0 を跨がない = 効果あり、 と結論 | 統計的有意 ≠ 実用的有意。 微小効果でも n が大きければ CI は 0 を跨がない | 効果量と CI の両方を併記し、 意思決定の閾値と比較 |
| 3 | 複数の群 CI を見比べ、 重なりだけで有意差を判断 | 各 CI が重なっても「差の CI」は 0 を跨がない場合あり | 差の CI を直接計算する、 t 検定や ANOVA を併用 |
| 4 | 小標本で正規 CI を機械的に適用 | 中心極限定理が効かず被覆率が崩れる | t 区間、 Bootstrap、 Wilson 等の小標本向け手法を選択 |
| 5 | 信頼区間と予測区間を混同 | 前者は平均、 後者は個体。 幅が大きく異なる | 図と表に「CI / PI」を明記、 報告書では別行で示す |
| 6 | CI 幅を眺めて「真の値の範囲」と説明 | 真値は固定、 動くのは区間。 区間の枠が確率変数 | 「同じ手順で 95% の区間が真値を覆う」と説明 |
| 7 | 多重比較で各 CI を独立に作る | 全体の被覆率が崩れる(α インフレ) | Bonferroni / Holm / Tukey 等で同時信頼区間に補正 |
| 8 | 「外れ値を除いて再計算」を結果が出るまで繰り返す | 事後選択バイアスで CI の被覆保証が消える | 外れ値処理は事前に方針を固定、 ロバスト推定や Bootstrap で頑健化 |
この 8 パターンは、 ビジネスダッシュボード・ニュース記事・査読論文すべてで観察される。 「区間推定の数字は正しいが、 説明文が誤用」というケースが最も多いため、 計算より説明の言い回しを磨く方が実務的価値は高い。
📝 補足(データ出所の明示):SSDSE-B-2026 には賃金・所得の列が存在しません(家計は消費支出 L3221 と細目 L322101〜L322110 のみ)。 そのため以下の「平均賃金 438 万円」等の数値は、 CI の組み立て方を示すための仮想例(教材用のダミー値)であり、 SSDSE-B の実測値ではありません。 実測で試す場合は総人口 A1101 や消費支出 L3221 など実在列に置き換えてください。
区間推定は「全国レベルの平均」に対し、 単一の点推定値より遥かに情報量が多い。 ここでは仮想の賃金データを使って、 段階的に CI を組み立てる流れを追う。
仮想の賃金カラム(教材用ダミー)を読み込み、 47 都道府県の点推定(標本平均)と標本標準偏差を計算する想定とする。 ここでは「47 都道府県は母集団全体」ではなく、 「ある年の標本」と捉え、 仮想的な母集団推論を行う設定とする。
同じ標本に対し、 (a) 正規/t 仮定の解析的 CI、 (b) 5,000 回ブートストラップの BCa 区間、 (c) 弱情報事前のベイズモデルから得る credible interval、 の 3 種を並べる。 結果はおおむね一致するが、 賃金分布が右に裾を引くため Bootstrap 区間がやや非対称になる。
| 推定手法 | 下限(万円) | 点推定 | 上限(万円) | 幅 |
|---|---|---|---|---|
| 正規 z 区間 (σ 既知仮定) | 412.5 | 438.0 | 463.5 | 51.0 |
| t 区間 (自由度 46) | 411.6 | 438.0 | 464.4 | 52.8 |
| Percentile Bootstrap (B=5000) | 413.2 | 438.0 | 466.1 | 52.9 |
| BCa Bootstrap (B=5000) | 414.0 | 438.0 | 467.4 | 53.4 |
| ベイズ (弱情報事前) | 411.0 | 438.1 | 465.2 | 54.2 |
5 種の区間がすべて [411, 467] 万円付近に収まることから、 「全国平均賃金の点推定値 438 万円には 25 万円程度の不確実性がある」と説明できる。 仮にビジネス判断で「平均が 430 万円を上回るか」が論点なら、 すべての CI 下限が 411 万円以上なので「上回るとは言い切れない」結論になる。 一方「420 万円を上回るか」なら、 t 区間下限 411.6 < 420 < 上限 464.4 を見て「上回ると言い切れない、 さらに調査が必要」と判断する。
関東・近畿は中央値が高く CI も比較的タイト、 一方で四国・九州は中央値が低く CI が広い(標本数が少なくばらつきが大きいため)。 こうした「群ごとの不確実性差」は単一の全国平均では見えないため、 区間推定はグループ分析と組み合わせて初めて価値が出る。
「SSDSE-B-2026(47 都道府県)から推定した平均賃金は 438 万円、 95% 信頼区間 [412, 464] 万円であった。 これは『同じ調査手順を繰り返した場合、 約 95% の試行でこの種の区間が真の母平均を覆う』ことを意味する。 区間幅が約 52 万円あるため、 全国一律の政策設計には地方別の追加分析が望ましい」。 この種の文面が「数字 + 区間 + 解釈 + 次の一手」の標準パターンである。
出してよいが、 t 分布の自由度 2 では臨界値が非常に大きく(t_{0.025,2}=4.30)CI が広くなる。 「広くて使えない」という事実自体が情報。 むしろ「n=3 では区間推定の結論を急がない」という慎重さの根拠として活用。
古典 CI は外れ値に弱い。 トリム平均や中央値の CI(Bootstrap)に切り替える、 もしくはロバスト推定(M 推定)を用いる。 SSDSE で言えば「東京」が突出するため、 全国 47 都道府県の平均 CI と「東京除く 46 都道府県」CI を併記すると安全。
エラーバーで上下に伸ばし、 キャプションに「縦棒は 95% 信頼区間」と明記。 「信頼水準・自由度・推定手法」の 3 点が読者から見えるようにする。
対数変換して CI を計算し、 元のスケールに逆変換する。 もしくは Bootstrap で範囲を制約する手法(truncated bootstrap)を採る。
エラーバーは「標準誤差」「標準偏差」「CI」のいずれかを表す。 必ずキャプションで定義を明記すること。 暗黙の前提は読み手の混乱を招く。
CI 優先。 p 値は二値判定(有意/有意でない)に流れがちだが、 CI は効果量と不確実性の両方を同時に伝える。 American Statistical Association も CI 重視を推奨。
慣例は 95%。 ただし「報告書に 95% と明記」しなければ読み手が暗黙の解釈をする可能性がある。 毎回明記が原則。
重ねてよいが、 凡例で明確に区別。 「同じ幅でも意味が違う」点を本文で説明しないと混乱の元。
(a) 標本を増やす、 (b) 層別化して群内ばらつきを減らす、 (c) 共変量で調整、 (d) ベイズ事前で外部情報を入れる、 の 4 通り。 どれも「不確実性を減らす情報源を追加する」発想。
統計界では一般に角括弧 [a, b]。 数学では区間記法 (a, b) は開区間を表すため、 紛らわしい場合がある。 角括弧 + 明示的に「95% CI」と書くのが安全。
「この調査では平均 438 万円という結果でしたが、 同じ調査を繰り返すと結果は揺れます。 揺れの幅を 95% の確からしさで覆える範囲が 412 から 464 万円。 ピンポイントの数字より、 この帯で語る方が誤解が少ないです」。
むしろ逆。 追加データで CI が狭まるのが健全な学習。 同じデータを使い回して CI を一切動かさないと、 統計モデルが学習していないサインの可能性。
区間推定は「結果に幅を持たせる文化」を組織に根付かせるための言語装置でもある。 数字だけで意思決定する組織と、 数字 + 幅 + 仮定で意思決定する組織では、 長期的な意思決定品質が顕著に分かれる。 区間推定は単なる統計手法でなく、 不確実性を扱う組織的なリテラシーの中核である。
区間推定の周辺には、 似て非なる概念が多数あり、 用語選びで議論がブレやすい。 ここでは現場で頻出する 20 語を 1 行説明 + 区間推定との関係でまとめる。 各見出し語は再読の起点として使えるよう、 簡潔だが定義の核心を含めた。
| 用語 | 1 行定義 | 区間推定との関係 |
|---|---|---|
| 点推定 | 母数の単一値での推定 | CI の中心が点推定値(多くの場合) |
| 標準誤差 (SE) | 推定量の標本ばらつきの標準偏差 | CI 幅 ≈ 2 × 1.96 × SE |
| 標準偏差 (SD) | 個々のデータのばらつき | 予測区間の主役、 CI とは別概念 |
| 中心極限定理 | 標本平均が正規に近づく | 大標本 CI の理論的根拠 |
| t 分布 | σ 未知小標本での平均の分布 | t 区間の臨界値の根拠 |
| 自由度 | t 分布の形状パラメータ | t 区間幅を決める要素 |
| 被覆率 | 真値を覆う CI の長期割合 | 理想的には信頼水準と一致 |
| 仮説検定 | 帰無仮説の棄却判定 | 「CI が 0 を跨がない」≒「両側 5% 検定で有意」 |
| p 値 | 帰無仮説下での極端さの確率 | CI と裏表の関係、 CI 報告が推奨 |
| 効果量 | 差や関連の大きさの指標 | 効果量にも CI を付けるのが現代の慣例 |
| Bootstrap | 再標本化で分布を近似 | 分布仮定なしで CI を作れる |
| BCa 区間 | Bootstrap の歪み補正版 | 非対称分布で被覆率が高い CI |
| ベイズ信用区間 | 事後分布の中央 95% | 確率解釈ができる「区間」 |
| 予測区間 | 将来の個別観測値の区間 | CI より幅広(個体ばらつきを含む) |
| 許容区間 | 母集団の一定割合を覆う区間 | 品質管理で CI と併用される |
| 同時信頼区間 | 複数推定量を同時に覆う区間 | 多重比較での被覆率を保つ |
| α エラー | 真値を覆い損ねる確率 | CI の信頼水準 = 1 - α |
| サンプルサイズ設計 | 必要 n を逆算する作業 | 目標 CI 幅から n を決める |
| Wilson 区間 | 小標本の比率 CI | 正規近似 CI より被覆率が高い |
| コンフォーマル予測 | 分布仮定なし予測区間 | 機械学習での予測 CI の標準化候補 |
これら 20 語は、 区間推定をめぐる議論で「相手が何を意味して言っているか」を即座に切り分けるためのスイッチである。 報告書を読むときも書くときも、 まずこの 20 語のどれを念頭においているかを確認すると齟齬が減る。
実際の現場で「どの CI を使えばよいか」を 5 ステップで決めるためのフローチャート。 上から順に質問に答えていくと、 候補手法が 1-2 個に絞られる。
この 5 ステップを毎回踏むことで、 「とりあえず正規近似」の機械的適用を防げる。 特にビジネス分析では、 標本サイズが小さい・分布が歪んでいる場面が多いため、 Bootstrap や Wilson 区間の出番がしばしばある。
「区間で語る」という発想は当たり前に見えるが、 統計学の歴史では決して自明ではなかった。 ラプラスの誤差理論 (1812) で「測定値の散らばり」を確率分布で扱う発想が確立し、 ガウスの最小二乗法 (1809) で点推定が体系化される。 しかし「区間として真値を覆う」という考え方を明確に定式化したのは、 ネイマン (Jerzy Neyman) の 1937 年論文「Outline of a Theory of Statistical Estimation Based on the Classical Theory of Probability」である。
それまでは「真値の事後分布」というベイズ的解釈が混在しており、 区間の数値解釈に曖昧さがあった。 ネイマンはこれを「手順の長期頻度」に再定義することで、 頻度論統計学の中核概念として CI を位置付けた。 同時期にフィッシャー (R. A. Fisher) は信頼度 (fiducial) 区間という別の枠組みを提案、 両者は長く論争を続けた。
21 世紀に入り、 ベイズ計算(MCMC)の普及により、 ベイズ信用区間が実務でも広く使われるようになった。 さらに 2010 年代以降、 機械学習での予測不確実性の定量化として「コンフォーマル予測」が登場し、 分布仮定なしで予測区間を厳密に保証する枠組みが整備されつつある。 区間推定は今なお発展中の領域である。
区間推定は数字を出すまでが半分、 残りの半分は「どう伝えるか」である。 ここでは、 実務で使えるテンプレートを 6 種そろえる。 すべて SSDSE-B-2026 の文脈で例示。
「47 都道府県の平均賃金は438 万円(95% CI: 412 万円 - 464 万円)。 ピンポイントで 438 万円ではなく、 412 - 464 の幅で見るのが妥当。 全国施策の予算配分は中央値 438 万円を基準としつつ、 不確実性として ±26 万円のマージンを確保することを推奨」。
「47 都道府県標本における平均賃金の点推定値は 438.0 万円であり、 標本標準偏差 s = 89.4、 自由度 46 の t 分布を用いた 95% 信頼区間は [411.6, 464.4] 万円であった。 Welch 法による Bootstrap 5000 反復の BCa 区間は [414.0, 467.4] 万円で、 両者は概ね一致した。 仮想母集団に対する点推定の被覆解釈は Neyman (1937) に従う」。
「47 都道府県を対象とした調査では、 平均賃金は約 438 万円という結果でした。 ただし統計的な揺れを考慮すると、 真の平均は 410 万円台前半から 460 万円台までの幅に収まると考えられます。 単一の数字ではなく『幅』で受け止めるのが科学的な読み方です」。
「平均賃金 438 万円 (95% CI [412, 464])。 同じ調査を繰り返すと、 約 95% の試行でこの種の区間が真値を覆います」。 (※ ホバー時のミニ文の長さ目安は 30-60 文字)。
「図 X: 地方ブロック別平均賃金(万円)。 ノッチは中央値の 95% Bootstrap 信頼区間 (B=5000)。 ノッチが重ならない群間は中央値の差が示唆される」。
「群 A と群 B の平均差は 12.5 万円(95% CI [-3.2, 28.2])であり、 0 を含むため統計的有意差は確認されなかった。 ただし区間幅から効果量がゼロであると断定はできず、 サンプルサイズを増やした追加調査が望ましい」。
この 6 テンプレを脳内に常駐させると、 報告書の冒頭 30 秒で「数字 + 区間 + 解釈」を書き始められる。 区間推定の最大の価値は、 数字を「機械的」ではなく「会話可能な情報」に変換する点にある。
大学の授業で区間推定を学んだ人でも、 実務に出ると次の 6 つの誤解が残っていることが多い。 自分の頭の中でこれらに即座に「No」を即答できるか確認しよう。 ここを言葉で説明できるかが「区間推定が分かっている人」と「公式を暗記しただけの人」の決定的な分かれ目になる。
この 6 つを言語化できれば、 区間推定の概念マスターと言ってよい。 数式の暗記より、 こうした解釈の言語化が実務での差別化要因になる。
区間推定は「自分で 1 度作ると一生忘れない」タイプの概念である。 SSDSE-B-2026 の都道府県データを題材に、 以下 5 ステップを Jupyter で順に実行することを強く推奨する。 道具を使う側でなく道具を組み立てる側に立つと、 CI のからくりが手のひらに乗る感覚で見えてくる。
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) を読み、 df = df[df['SSDSE-B-2026']==2023] で 2023 年の 47 都道府県に絞る。 総人口 A1101 を df['A1101'].describe() で分布確認。x_mean = df['A1101'].mean()、 s = df['A1101'].std(ddof=1)、 n = len(df) を取得。 ここで「ピンポイント値」がどれだけ揺れるかを意識する。from scipy.stats import t; tcrit = t.ppf(0.975, df=n-1) で臨界値を取り、 se = s/np.sqrt(n)、 (x_mean - tcrit*se, x_mean + tcrit*se) で CI を計算。boots = [df['A1101'].sample(n, replace=True).mean() for _ in range(5000)]、 np.percentile(boots, [2.5, 97.5]) で分布フリー CI を取得。 t 区間と比較。この 5 ステップを 1 度走らせると、 「区間推定は計算機が勝手に出すブラックボックス」ではなく「自分が組み立てる道具」になる。 教科書を 10 回読むより、 1 度自分で実装する方が理解は深い。 CI は実装して初めて掴める概念である。
さらに発展課題として、 (a) 信頼水準を 90%, 95%, 99% で比較して幅の変化を観察する、 (b) 全国平均だけでなく地方ブロック別の CI を並べて意思決定に使う、 (c) ベイズ版(PyMC で正規モデルを書く)を実装して頻度論 CI と比較する、 の 3 つに挑戦したい。 特に (c) は、 同じデータに対し異なる解釈枠組みがどう異なる結論を導くかを実感できる、 統計教育の白眉である。 区間推定を 5 ステップで実装し終わったら、 「区間で考える文化」がチームの共通言語になっているかをコードレビュー時に確認するのもよい習慣である。 最後に、 自作の CI を上司や同僚に 60 秒で説明できるかを試そう。 「平均はこれ、 幅はこれ、 解釈はこう、 次にすべきはこれ」を一息で言えれば、 区間推定の概念は身体化されたといえる。 区間推定の真の到達点は計算ではなく、 不確実性を言葉に変換して他者と共有できる能力にある。
区間推定が「推定」というより大きな枠組みのどこに位置するか、 関連概念との関係を整理する。
| 階層 | 概念 | 関係 |
|---|---|---|
| 上位 | 統計的推測 | 推定 + 検定を含む最大の枠組み |
| 上位 | 推定 (estimation) | 標本から母数を推測する技法全般 |
| 本稿 | 区間推定 | 幅で答える推定 |
| 並列 | 点推定 | 一点で答える対概念 |
| 出力 | 信頼区間 | 区間推定の結果そのもの |
| 類似 | 予測区間 | 「次の観測値」の範囲。 信頼区間より広い |
| 下位 | ブートストラップ | 区間推定の具体的手法 (分布仮定なし) |
| 代替 | ベイズ統計 | 信用区間 (credible interval) として範囲推定 |
区間推定の概念は、 ポーランド系統計学者 Jerzy Neyman が 1937 年に発表した論文 "Outline of a Theory of Statistical Estimation Based on the Classical Theory of Probability" で体系化された。 それ以前は、 母数の推測は「点推定 (一つの値)」と「逆確率法 (ベイズ)」が主流だった。 Neyman は、 ベイズ的解釈を避けて「同じ手順を繰り返した場合の頻度的性質」として信頼区間を定義し、 古典統計学 (頻度論) の基盤を築いた。
その後、 1979 年に Bradley Efron が ブートストラップ法 を発表し、 分布の仮定なしで信頼区間を計算する手法が広まった。 コンピューティングの発展により、 解析的に困難な統計量にも区間推定が適用できるようになった。 現代では、 機械学習モデルの予測の不確実性定量化 (uncertainty quantification) という形でも区間推定が再注目されている。
| 対象 | 条件 | 95% CI 公式 |
|---|---|---|
| 母平均 $\mu$ | $\sigma$ 既知 | $\bar{x} \pm 1.96 \cdot \sigma/\sqrt{n}$ |
| 母平均 $\mu$ | $\sigma$ 未知 | $\bar{x} \pm t_{0.025,n-1} \cdot s/\sqrt{n}$ |
| 母比率 $p$ | 大標本 | $\hat{p} \pm 1.96 \cdot \sqrt{\hat{p}(1-\hat{p})/n}$ |
| 母分散 $\sigma^2$ | 正規分布前提 | $\bigl[(n-1)s^2/\chi^2_{0.975,n-1}, (n-1)s^2/\chi^2_{0.025,n-1}\bigr]$ |
| 平均差 $\mu_1-\mu_2$ | 独立 2 群 | $(\bar{x}_1 - \bar{x}_2) \pm t \cdot \sqrt{s_1^2/n_1 + s_2^2/n_2}$ |
| 相関係数 $\rho$ | Fisher の z 変換 | $\tanh(\text{arctanh}(r) \pm 1.96/\sqrt{n-3})$ |
Q1. 95% 信頼区間とは「95% の確率で母平均が含まれる」ではないのですか?
A. 厳密には違います。 頻度論では母平均は固定された定数で、 確率変数なのは標本 (したがって信頼区間) のほう。 正確には「同じ手順で 100 回標本を取り直したら、 約 95 個の試行で構築された区間が母平均を含む」という意味です。 一回の特定の区間について「95% で含む」と言うのは厳密には誤り (ベイズ的解釈)。
Q2. サンプルサイズが小さいと、 信頼区間はどれくらい広くなりますか?
A. 区間幅は $1/\sqrt{n}$ に比例して縮みます。 $n$ が 4 倍になれば幅は半分、 100 倍で 1/10 になります。 逆に $n=10$ では $n=100$ の区間の約 3 倍の幅になります。 さらに $n < 30$ では t 分布の臨界値が大きくなるため、 実質的に区間はもっと広くなります。
Q3. 母集団が正規分布でないと、 信頼区間は使えないのですか?
A. 母平均の信頼区間に限って言えば、 中心極限定理により $n$ が大きい (経験則で $n \ge 30$) なら標本平均がほぼ正規分布になるため、 母集団分布の形によらず使えます。 ただし母分散・分位点・相関係数など他の統計量の CI は分布の仮定が効くので、 ブートストラップなどの非パラメトリック手法を検討します。
Q4. 信頼区間が「ゼロを含むかどうか」で何が言えますか?
A. 差や効果の信頼区間が 0 を含まないなら、 有意水準 $\alpha = 1 - $ 信頼度 で「差はゼロでない」と検定で結論したのと等価です。 たとえば 95% CI が $[3, 9]$ なら、 $p < 0.05$ で「効果あり」と言えます。 CI は検定の「視覚化」とも考えられます。
Q5. ブートストラップと t 分布、 どちらを使うべき?
A. データ分布がほぼ正規・対称ならどちらも結果はほぼ同じ。 歪みが強い・外れ値が多い・統計量が解析困難 (中央値、 相関係数、 機械学習モデルの性能) ならブートストラップが優位。 計算コストは数千回の再標本化が必要なので t 分布より重いが、 現代のマシンなら 47 都道府県データなら一瞬で終わる。
SSDSE-B-2026 の出生数 (A4101) と人口 (A1101) から「全国平均の出生率 (出生数/人口)」を区間推定する応用例。 SSDSE-B-2026 の各県の出生率はおおよそ 0.5%〜0.9% の範囲で、 標本平均は約 0.70%。 これに対する 95% CI を計算すると以下のようになる。
| 統計量 | 値 (出生率) |
|---|---|
| n | 47 |
| 標本平均 | 0.00700 (=0.70%) |
| 標準偏差 | 0.00075 |
| SE | 0.000109 |
| 95% CI 下限 | 0.00678 (=0.678%) |
| 95% CI 上限 | 0.00722 (=0.722%) |
→ 全国の出生率は 0.68%〜0.72% の範囲内にあると 95% の信頼度で言える。 これは「日本全体」の出生率の指標値 (約 0.7%) と整合的。 沖縄県 (0.95%) は明らかに上側、 秋田県 (0.45%) は下側の外れ値だが、 47 都道府県の平均を取ることでこれらの影響を相殺している。
前提 (8 件): 平均 / 分散 / 標準偏差 / 標準誤差 / 正規分布 / t 分布 / 中心極限定理 / 標本抽出
並列 (6 件): 点推定 / 仮説検定 / p 値 / 効果量 / 検出力 / 有意水準
発展 (7 件): ブートストラップ / ベイズ統計 / 信用区間 / 予測区間 / 許容区間 / 多重比較 / ボンフェローニ補正
信頼区間を作る際に必要な臨界値 (z 値・t 値) を、 信頼水準ごと・自由度ごとに一覧化。 SSDSE-B-2026 のように $n=47$ のデータでは t 分布 (自由度 46) を使うが、 z 値とほぼ同じ。 $n < 30$ のサンプルではこの差が無視できなくなる。
| 信頼水準 | z 値 | t (df=10) | t (df=30) | t (df=46) | t (df=100) |
|---|---|---|---|---|---|
| 80% | 1.282 | 1.372 | 1.310 | 1.300 | 1.290 |
| 90% | 1.645 | 1.812 | 1.697 | 1.679 | 1.660 |
| 95% | 1.960 | 2.228 | 2.042 | 2.013 | 1.984 |
| 99% | 2.576 | 3.169 | 2.750 | 2.687 | 2.626 |
| 99.9% | 3.291 | 4.587 | 3.646 | 3.515 | 3.390 |
→ $n \ge 30$ なら t と z の差は実用上ほぼなくなる。 $n=10$ では信頼度 99% で t (3.169) が z (2.576) より約 23% 大きく、 区間幅も比例的に広がる。 サンプルが少ないほど t 分布の「重い裾」が効いてくる。
区間推定は単なる計算技術ではなく、 「点推定の不確実性を率直に開示する文化」を体現する手法である。 「平均は 100」と言い切るより「平均は 95〜105 と 95% の信頼度で言える」と幅を示す方が、 受け手は「だいたい 100 だが、 多少のずれは覚悟しよう」と適切に意思決定できる。
医学・公共政策の研究では、 「効果量の点推定だけでなく必ず 95% CI を併記すべし」が国際的なガイドライン (CONSORT、 STROBE 等) で標準化されている。 学術論文・公的レポートで点推定だけを示すのは現代的標準では不十分とされる。
機械学習領域でも、 単に「精度 87%」と示すのではなく「精度 87% (95% CI: 84%–89%)」と幅で示すことで、 モデル比較の頑健性 (両モデルの CI が重なれば差は怪しい) を検証する文化が広がっている。 区間推定の思想は、 21 世紀のデータサイエンス全般を貫く中核概念である。
実務ではしばしば「信頼区間が広すぎる」状況に直面する。 たとえば「効果は 95% CI で $[-2, +12]$」 — 効果がマイナスかもしれないし、 大きくプラスかもしれない、 という結論。 この場合の選択肢:
SSDSE-B-2026 のような全数調査ベースのデータでは、 「47 都道府県すべてを観測した」ため厳密には「標本」ではなく「母集団そのもの」とみなせる。 この場合、 信頼区間の解釈は「もし都道府県の境界がランダムに引かれ直したら…」という仮想的標本論として扱うか、 あるいは「県をまたぐ年次変動」を標本変動として扱うか、 文脈に応じて慎重に解釈する必要がある。
区間推定は推測統計の中心概念で、 点推定だけでは伝わらない「不確実性の幅」を定量化する。 仮説検定・予測区間・ベイズ推定と連携。
95% 信頼区間の正しい解釈は「同じ手法で 100 回標本抽出して 100 個の区間を作ると、 そのうち約 95 個が母平均を含む」。 「真の値がこの区間に 95% の確率で入る」は頻度論的にはNG。 ベイズ信用区間はこの解釈が成立する別概念。
「区間推定」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。
このフローに沿って判断することで、 「区間推定」を中核とした適切な手法選択ができる。
区間推定 は「推測統計」分野の中で発展してきた概念・手法です。 学術的には継続的な研究で精緻化され、 実務的にはツール・ライブラリの普及で誰でも使えるようになってきました。 用語の使い方・意味は時代と分野で少しずつ変わるため、 文脈に応じた解釈が大切です。 入門書だけでなく、 標準的な教科書(例:データサイエンス・統計学の定本)や信頼できるオンライン教材も併用すると、 ぶれない理解に近づけます。
区間推定を「平均 ± 誤差」の一枚岩として覚えると、 母数に上限・下限があるときに足をすくわれる。 このページ上部の実装②では「人口が中央値以上の県の割合」(比率 p = 0.5)で Wald 区間と Wilson 区間がほぼ一致した。 ここでは、 その裏面 ―― p が 0 に近い端の領域で対称区間がどう破綻するかを、 実データで正面から見る。 これは信頼区間ページ・点推定ページとは重ならない「境界問題」という独自の切り口である。
平均の区間 $\bar{x} \pm z\,SE$ が素直に働くのは、 標本平均の散らばりが左右対称で、 数直線のどこにでも置けるからだ。 ところが比率は必ず $[0,1]$ に住む。 真の比率が 0 の近くにあると、 標本比率のばらつきは「下は 0 で壁に当たり、 上にだけ伸びる」非対称な形になる。 それなのに対称な $\pm$ を機械的に当てると、 区間の下端が壁を突き抜けて負の値に飛び出す。 「幅を決めれば区間が決まる」のではなく、 端の近くでは区間をどこに・どんな形で置くかまで気にする必要がある ―― これが区間推定を一段深く理解する鍵である。
SSDSE-B-2026 の 2023 年 47 都道府県・総人口 (A1101) から、 人口 800 万人以上の県の割合を推定する。 該当は 東京都 (14,086,000)・神奈川県 (9,229,000)・大阪府 (8,763,000) の 3 県。 標本比率は $\hat{p} = 3/47 = 0.0638$(6.38%)と 0 に近い端の領域だ。 同じデータ・同じ 95% で、 3 通りの区間を並べる(すべて下の Python 実測値)。
| 手法 | 95% 区間 | 判定 |
|---|---|---|
| Wald(正規近似) | [ −0.0061, 0.1337 ] | 下限が 負(−0.61%) ―― 比率としてあり得ない |
| Wilson | [ 0.0220, 0.1716 ] | $[0,1]$ 内・上下非対称で妥当(推奨) |
| Clopper-Pearson(厳密) | [ 0.0134, 0.1754 ] | 保守的だが必ず被覆を保証 |
Wald は $\hat{p}$ を中心に左右対称に $\pm z\sqrt{\hat{p}(1-\hat{p})/n} = \pm 1.960 \times 0.0357 = \pm 0.0699$ を振るため、 中心 0.0638 から下に 0.0699 引くとマイナスに落ちる。 Wilson は $\hat{p}$ ではなく「区間の端で観測が説明できる母比率」を解くので中心が右にずれ、 下限は 0 を割らない。 教訓: 比率・計数・分散・相関のように母数に境界がある量で、 標本統計量が端に寄っているときは、 対称な正規近似(Wald)を機械的に使わないこと。 中央 (p=0.5 付近) では三者ほぼ一致するので、 差が出るのはまさに判断が微妙な端だけ ―― そこで壊れるのが厄介なのである。
📝 再現メモ: df=pd.read_csv('data/raw/SSDSE-B-2026.csv',encoding='cp932',skiprows=[1]); d=df[df['SSDSE-B-2026']==2023]; k=int((d['A1101']>=8_000_000).sum()) # =3, n=47。 Wilson/Clopper-Pearson は scipy.stats.binomtest(3,47).proportion_ci(method='wilson' / 'exact') で算出。