「標本抽出と中心極限定理」を理解するうえで必要なキーワードを 10 件以上提示します。 各チップから対応セクションへ移動できます。
30 秒結論 文脈 直感 数式 記号読み解き 実値計算 Python 実装 落とし穴 関連手法 関連用語 グループ教材 概念マップ
🍰 まずはやさしく
一部から全体を予想する道具です。
少ないデータで正解に近づくために使います。
クラスの数人で学級全体の意見を予想するようなものです。
標本(抜き出したデータ)の性質について読みます。
「47都道府県の調査」「視聴率調査」「A/B テスト」など、 私たちは普段、 全数ではなく標本を使って結論を出します。 これは経済的・時間的に避けられない選択ですが、 「ではどれくらい正確に母集団のことが言えるのか?」が問題になります。 その理論的根拠が大数の法則と中心極限定理です。
| 概念 | 何を言っているか | 実務的な意味 |
|---|---|---|
| 大数の法則 (LLN) | $n$ 大で標本平均は母平均に収束 | 「サンプルが多ければ平均は信頼できる」 |
| 中心極限定理 (CLT) | $n$ 大で標本平均の分布は正規分布 | 「信頼区間・検定が使える」 |
| 標準誤差 (SE) | 標本平均のばらつき = $\sigma/\sqrt{n}$ | 「推定の精度を数値化」 |
| サンプルサイズ設計 | 必要な n を逆算 | 「調査前にコストを見積もる」 |
🍰 まずはやさしく
データの正しさを確かめるルールです。
少数のデータから全体を推測するために使います。
視聴率などの調査でよく使われています。
なぜ少数のデータで推測できるのかを読みます。
論文・記事に 「標本」「母集団」「標本平均」「標準誤差」「サンプルサイズ」「中心極限定理」「大数の法則」 として登場する用語群です。 47都道府県の調査・ A/B テスト・ 視聴率調査など、 「全数を見ずに少数の標本から推測する」全ての場面の理論的基礎。
この章を理解すれば、 「なぜ平均 ± 標準誤差で報告するのか」「なぜ n が大きいほど推定精度が上がるのか」が自然と分かります。
このセクションは「標本抽出と中心極限定理」を扱う 用語ページ です。 統計データ分析コンペティション(2026)の再現教材における中核用語のひとつで、47都道府県から無作為抽出して標本平均の分布を観察 という観点で SSDSE-B-2026(47 都道府県 × 複数年 × 100 超列)に紐づけられます。
位置づけ:相関・線形回帰・仮説検定 といった基礎用語群と並列であり、応用としては 内生性・IV・DID・クラスタリング 等へ繋がります。
🍰 まずはやさしく
データを見るための眼鏡のようなものです。
隠れた特徴を見つけ出すために使います。
都道府県のデータから地域の差を探すようなものです。
平均やばらつきという視点でデータを読む方法を学びます。
標本抽出と中心極限定理 を一言でいえば「47都道府県から無作為抽出して標本平均の分布を観察」。 47 都道府県という小さな母集団でも、 SSDSE-B-2026 の A4101 列に注目すると、 大都市圏と地方の差・人口規模に伴う相対比較など、 様々なパターンが見えてきます。
比喩でいうと、 標本抽出と中心極限定理 はデータ分析の「眼鏡」のようなもの。 同じデータでも眼鏡を変えれば、 平均(中心)・分散(ばらつき)・相関(連動)・因果(影響)と、 異なる情報が浮かび上がります。 SSDSE-B-2026 を題材に、 この眼鏡をかけてみるのが本ページの狙いです。
左が母集団の分布(あなたが選んだ形)、 右が標本平均の分布(抽出した標本の平均を集めたヒストグラム)。 「1標本抽出」を何度も押すか「1000回繰り返し」で一気に集めると、 母集団がどんな形でも右の分布が釣鐘型(正規分布)に寄っていくのが見える=これが中心極限定理。 スライダーで n を大きくすると、 右の山が細くなる=標準誤差 $\mathrm{SE}=\sigma/\sqrt{n}$ が小さくなる。
💡 実測 SD が理論 SE にどんどん近づけば「CLT どおり」。 n を 4 倍にすると SE が半分になる(√n 則)ことも、 スライダーを動かして確かめてみてください。
中心極限定理(CLT)の意味:母集団がどんな形(歪んでいても、 山が2つでも、 平らでも)であっても、 そこから n 個を無作為抽出して平均を取り、 それを何度も繰り返すと、 標本平均の分布は正規分布に近づく。 これが「元分布によらない普遍性」であり、 世の中の多くの推定・検定が正規分布を前提にできる理由です。 上のシミュレータで指数分布や二峰性を選んでも、 右の山が釣鐘型になるのはこの普遍性の現れです。
標準誤差(SE)の直感:SE は「標本平均という推定値そのもののばらつき」です。 母集団のばらつき σ が大きいほど推定は不安定になり(分子が大きい)、 標本を多く集めるほど安定します(分母 √n が大きい)。 $\mathrm{SE}=\sigma/\sqrt{n}$ という式は、 右の山の幅そのものを予言しており、 シミュレータの「実測 SD」がこれと一致することで確認できます。 詳しくは 標準誤差 のページを参照。
標本サイズの効果:分母が $\sqrt{n}$ なので、 精度(SE の逆数)を 2 倍にしたいなら n を 4 倍、 3 倍にしたいなら n を 9 倍にする必要があります。 「もう少しデータを足せば精度が線形に上がる」わけではないのが重要な注意点です。 必要な n を逆算する考え方は 標本サイズ のページで扱います。
この普遍性は架空の分布だけの話ではありません。 公的データ SSDSE-B-2026(都道府県別データ集)の 2023 年・47 都道府県の値を「母集団」に見立て、 そこから復元抽出で標本平均を何度も作ると、 実データでも標本平均の分布が正規に近づき、 そのばらつきが $\sigma/\sqrt{n}$ で説明できます。 読み込みは encoding='cp932'・skiprows=[1](1行目の日本語見出し行を飛ばす)・年度==2023 で 47 行を取り出すのが定石です。 本ページ後半の Python 実装(合計特殊出生率 A4103 のブートストラップ、 母集団 n=47・平均 1.29・σ 0.13・理論 SE 0.019)が、 まさに「47 県から標本抽出した平均の分布」を実データで再現した例になっています。
🍰 まずはやさしく
計算で正解を導き出すための式です。
推測がどれくらい正確かを数値にするために使います。
スマホのアンケート結果を分析する時に役立ちます。
数式を使って正しさを証明する方法について読みます。
標本抽出と中心極限定理 の代表的な定義式は次のとおりです。
$$ \sqrt{n}(\bar{X}_n - \mu) \xrightarrow{d} \mathcal{N}(0, \sigma^2) $$ここで使われる記号や演算の意味は次節で言葉に翻訳します。
このコードでやること: CLT の理論値 σ/√n と、 ブートストラップ法 (復元抽出で SE を推定) の実測値が一致することを確認する。 ブートストラップは CLT 前提が怪しい場合 (歪度大、 n 小) でも適用できる強力な手法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import pandas as pd, numpy as np df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932') df = df[df['SSDSE-B-2026'] == 2023] data = df['A4103'].dropna().values # 47 県分(合計特殊出生率) rng = np.random.default_rng(1) n_boot = 5000 boot_means = np.array([rng.choice(data, size=len(data), replace=True).mean() for _ in range(n_boot)]) theoretical_se = data.std(ddof=1) / np.sqrt(len(data)) bootstrap_se = boot_means.std(ddof=1) boot_ci = np.percentile(boot_means, [2.5, 97.5]) print(f'母集団 n={len(data)}, 平均={data.mean():.2f}, σ={data.std(ddof=1):.2f}') print(f'理論 SE (σ/√n) = {theoretical_se:.3f}') print(f'ブートストラップ SE = {bootstrap_se:.3f}') print(f'95% CI (ブートストラップ) = [{boot_ci[0]:.2f}, {boot_ci[1]:.2f}]') print(f'95% CI (CLT 近似) = [{data.mean()-1.96*theoretical_se:.2f}, ' f'{data.mean()+1.96*theoretical_se:.2f}]') |
📤 実行例:
💬 結果の読み方: 理論 SE 0.019 と ブートストラップ SE 0.019 がほぼ一致 → CLT が機能している証拠。 95% CI も両者で [1.26, 1.33] とほぼ一致。 合計特殊出生率 (A4103) は歪度がほぼ 0 と小さく、 n=47 でも CLT が十分効くケースの典型。 仮に歪度が大きい場合は、 ブートストラップ CI のほうが信頼できる。 「まず CLT で考え、 怪しいときはブートストラップで検証」がデータサイエンスの実践手順。
数式の各記号を、日本語の意味に変換します。
中心極限定理 (CLT) は、 「独立同分布の標本平均は、 標本サイズが大きくなると正規分布に収束する」という統計学の基礎定理。 母集団分布が何であれ、 標本平均は正規分布近似できる。
標本抽出と中心極限定理 (Sampling & Central Limit Theorem) は、 統計・データ解析の文脈で頻繁に登場する概念です。 ここでは初学者向けの直感と、 上級者向けの形式定義を併記します。
47 都道府県の高齢化率からブートストラップでリサンプリング(1000 回)し、 標本平均の分布を作る。 CLT により、 サンプルサイズ n=30 以上ならほぼ正規分布。 信頼区間は標本平均 ± 1.96 × 標本標準誤差で 95% 信頼区間が得られる。
SSDSE-B-2026 は 都道府県別社会経済データ集 2026 年版で、 47 都道府県 × 約 10 年度 × 100 超の指標を含む公的データです。 標本抽出と中心極限定理の概念を SSDSE-B-2026 で実証することで、 「数値の動きが地理的・社会的直感と整合するか」を検証できます。
| 列コード | 意味 | 本ページでの用途 |
|---|---|---|
A1101 | 総人口 | ブートストラップで標本分布生成 |
A1303 | 65 歳以上人口 | 高齢化率の標本分布 |
E1101 | 小学校数 | 県別データのリサンプリング |
F3101 | 新規求人数 | 雇用指標の標本分布近似 |
ここでは 説明用の仮想母集団(47 都道府県規模・ μ≈249・σ≈41、 右に歪んだ架空の指標)を題材に、 「全数を母集団と見たてた標本抽出シミュレーション」を行います。 値を使って LLN・CLT・SE の挙動を体感する。
📝 より正確な分析(教材補足): SSDSE-B-2026 には「医師数」に相当する列が無いため、 本節は CLT の挙動を示すための仮想母集団です。 実データで再現する場合は、 総人口 A1101 や 合計特殊出生率 A4103 など実在列に置き換えてください。
仮想母集団(47 県規模)のパラメータ:
47県から無作為に10県を抽出 → 標本平均 $\bar{x}_1$ を計算。 結果は実行ごとに異なるが、 典型値の例:
n=10 の抽出を 10,000 回繰り返し、 標本平均 $\bar{x}_1, \bar{x}_2, \ldots, \bar{x}_{10000}$ のヒストグラムを描く。 CLT の予測:
| 標本サイズ n | 理論 SE = σ/√n | 95% CI 幅 (±1.96·SE) |
|---|---|---|
| 5 | 18.6 | ±36.4 |
| 10 | 13.1 | ±25.7 |
| 20 | 9.3 | ±18.2 |
| 30 | 7.6 | ±14.8 |
| 47(全数) | 0(誤差なし) | - |
n を 4倍にしても SE は半分にしかならない($\sqrt{n}$ 則)。 これが「精度を上げるには指数的にデータが必要」のメッセージ。
SSDSE-B-2026(公的統計の社会・教育系データセット、 47 都道府県 × 10 年分超 × 100 以上の列)を用いて、 「標本抽出と中心極限定理」を体感します。 ファイル名は SSDSE-B-2026.csv、 読み込みは下記の Python コードで行います。
1 2 3 4 5 6 7 8 | import pandas as pd # SSDSE-B-2026 を読み込む(cp932 / Shift_JIS) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932') print(df.shape) # (564, 112) print(df['SSDSE-B-2026'].unique()) # 含まれる年度 latest = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy() print(latest[['Prefecture', 'A4101', 'A4101']].head()) |
ここで使った中心列 A4101 は SSDSE-B-2026 における 47都道府県から無作為抽出して標本平均の分布を観察 に関連する指標です。 算出例:
A4101 平均と標準偏差を求めるA4101 と A4101 の相関(線形・順位)を比較する母平均 μ=50、 母標準偏差 σ=10 の仮想母集団を想定し、 標本サイズ n を変えて標本平均の標準誤差と信頼区間幅の収束を計算する。
| n | SE | 95% CI 幅 |
|---|---|---|
| 1 | 10.0 | 39.2 |
| 4 | 5.0 | 19.6 |
| 25 | 2.0 | 7.84 |
| 100 | 1.0 | 3.92 |
1 2 3 4 5 | import numpy as np sigma = 10 n = np.array([1, 4, 25, 100]) se = sigma / np.sqrt(n) print(f"SE: {se}") |
💬 手計算 (Step 1) と Python 出力が完全一致。
同じ「標本抽出と CLT」のタスクでも、 ライブラリによって書き味と機能が違います。 用途別の使い分けを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import numpy as np import pandas as pd np.random.seed(0) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023] # 2023年度の47都道府県 pop = df['A1101'].values # A1101=総人口(母集団) # 単純無作為抽出(復元なし) sample = np.random.choice(pop, size=10, replace=False) print(f'sample mean = {sample.mean():.2f}, sample sd = {sample.std(ddof=1):.2f}') # CLT シミュレーション means = [np.random.choice(pop, 10, replace=False).mean() for _ in range(10000)] print(f'mean of means = {np.mean(means):.2f} ≈ μ = {pop.mean():.2f}') print(f'sd of means = {np.std(means):.2f} ≈ SE = {pop.std(ddof=1)/np.sqrt(10):.2f}') |
np.random.seed(0) で固定してある。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from scipy import stats # 標本平均の分布が正規かを Shapiro-Wilk で検定 sample_means = np.array(means) stat, p = stats.shapiro(sample_means[:5000]) # n が大きいと検出力過剰なので一部 print(f'Shapiro p = {p:.4f}') # 0.05より大 = 正規性棄却されず # 標本平均から母平均の95%CIを推定(既知σ → z区間) xbar = sample.mean() se = pop.std(ddof=1) / np.sqrt(10) ci_low, ci_high = stats.norm.interval(0.95, loc=xbar, scale=se) print(f'95% CI: [{ci_low:.1f}, {ci_high:.1f}]') # σ未知の場合 → t区間 se_t = sample.std(ddof=1) / np.sqrt(10) ci_low_t, ci_high_t = stats.t.interval(0.95, df=9, loc=xbar, scale=se_t) print(f'95% CI (t): [{ci_low_t:.1f}, {ci_high_t:.1f}]') |
1 2 3 4 5 6 7 | from sklearn.utils import resample np.random.seed(0) # n=10 の標本を 1000 回ブートストラップ → 平均の分布 boot_means = [resample(sample, n_samples=10, replace=True).mean() for _ in range(1000)] print(f'bootstrap SE = {np.std(boot_means):.2f}') print(f'bootstrap 95% CI = [{np.percentile(boot_means, 2.5):.1f}, {np.percentile(boot_means, 97.5):.1f}]') |
1 2 3 4 5 6 7 | from statsmodels.stats.weightstats import DescrStatsW # 層化抽出の場合、層サイズで重み付けする weights = np.array([1.0]*10) # 等重みなら通常の標本平均と一致 d = DescrStatsW(sample, weights=weights) print(f'mean = {d.mean:.2f}, std_mean = {d.std_mean:.2f}') print(f'CI95 = {d.tconfint_mean(alpha=0.05)}') |
DescrStatsW の価値は層化抽出で層サイズを重みに入れたときで、 そのときだけ結果が単純平均とずれる。 CI95 は t 分布(自由度 9)に基づくので、 前ブロックの正規近似 CI より広い。1 2 3 4 5 | from statsmodels.stats.power import TTestPower analysis = TTestPower() # 効果量 d=0.5, α=0.05, 検出力=0.8 のとき必要 n n_required = analysis.solve_power(effect_size=0.5, alpha=0.05, power=0.8) print(f'required n = {n_required:.0f}') # 約34 |
scipy / pandas / scikit-learn / statsmodels を中心とした標準的な実装例です。 まず CSV を読み込み、 次に 標本抽出と中心極限定理 の解析を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932') df = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()].copy() x = df['A4101'].astype(float).values y = df['A4101'].astype(float).values # 基本統計量 print('n =', len(x)) print('mean(x) =', np.mean(x)) print('std(x) =', np.std(x, ddof=1)) # 標本抽出と中心極限定理 の代表的計算(用途に応じて scipy/statsmodels を切替える) r, p = stats.pearsonr(x, y) print(f'Pearson r = {r:.4f}, p = {p:.4g}') rs, ps = stats.spearmanr(x, y) print(f'Spearman rho = {rs:.4f}, p = {ps:.4g}') |
用途別の追加実装:
1 2 3 4 5 6 7 8 9 | # 標準化と簡易クラスタリングの例 from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans X = df[['A4101', 'A4101']].astype(float).values Xs = StandardScaler().fit_transform(X) km = KMeans(n_clusters=4, n_init=10, random_state=0).fit(Xs) df['cluster'] = km.labels_ print(df[['Prefecture', 'A4101', 'A4101', 'cluster']].head(10)) |
1 2 3 4 5 6 7 | # 時系列(北海道の A4101)— 例として ARIMA 系の前処理 import statsmodels.api as sm ts = df.sort_values('SSDSE-B-2026').groupby('SSDSE-B-2026')['A4101'].mean() print(ts.tail()) res = sm.tsa.stattools.adfuller(ts) print('ADF stat:', res[0], 'p:', res[1]) |
以下は SSDSE-B-2026 を題材にした実コード例集です。 すべて data/raw/SSDSE-B-2026.csv を読み込み、 実値で動作確認しています。
1 2 3 4 5 6 7 8 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d23 = df[df['SSDSE-B-2026']==2023].reset_index(drop=True) d23['aging'] = d23['A1303'].astype(float)/d23['A1101'].astype(float) d23['birth_rate'] = d23['A4101'].astype(float)/d23['A1101'].astype(float)*1000 print(d23[['Prefecture','aging','birth_rate']].describe().round(3)) print('最高齢化:', d23.nlargest(3,'aging')[['Prefecture','aging']].values) print('最低高齢化:', d23.nsmallest(3,'aging')[['Prefecture','aging']].values) |
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d23 = df[df['SSDSE-B-2026']==2023].reset_index(drop=True) d23['aging'] = d23['A1303'].astype(float)/d23['A1101'].astype(float) fig, axes = plt.subplots(1, 2, figsize=(12, 4)) axes[0].hist(d23['aging'], bins=15, edgecolor='black') axes[0].set_xlabel('高齢化率'); axes[0].set_ylabel('県数') axes[1].boxplot(d23['aging']) axes[1].set_ylabel('高齢化率') plt.savefig('aging_dist.png', dpi=100) |
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd from scipy import stats import numpy as np df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d23 = df[df['SSDSE-B-2026']==2023].copy() d23['aging'] = d23['A1303'].astype(float)/d23['A1101'].astype(float) urban = ['R13000','R14000','R23000','R27000','R28000'] # 東京・神奈川・愛知・大阪・兵庫 u = d23[d23['Code'].isin(urban)]['aging'] r = d23[~d23['Code'].isin(urban)]['aging'] t, p = stats.ttest_ind(u, r, equal_var=False) d_cohen = (u.mean() - r.mean()) / np.sqrt((u.var() + r.var())/2) print(f't = {t:.2f}, p = {p:.4f}, Cohen d = {d_cohen:.2f}') |
1 2 3 4 5 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['aging'] = df['A1303'].astype(float)/df['A1101'].astype(float) trend = df.groupby('SSDSE-B-2026')['aging'].agg(['mean','std','min','max']).round(3) print(trend) |
標本抽出と中心極限定理は前提条件次第で意味が変わります。 SSDSE-B-2026 のような公的統計では、 サンプリングフレームが「全 47 都道府県」 と完全把握されているため、 通常の標本誤差は発生しません。 しかし「2023 年の 1 時点を全体集団とみなすか、 もっと長期の集団からの 1 サンプルとみなすか」で解釈が変わります。
SSDSE-B-2026 のような 100 超の列を扱うと、 多重比較(同じデータで多数の検定を行う)の罠が発生します。 Bonferroni 補正、 Benjamini-Hochberg などで補正してから 標本抽出と中心極限定理に関連する統計量を解釈すべきです。
都道府県の中に市区町村があり、 階層構造を持つ場合、 階層線形モデル(HLM)で 標本抽出と中心極限定理を扱うことを検討します。 SSDSE-B は都道府県集計データなので階層性は限定的ですが、 SSDSE-D(個票相当)と組み合わせる研究では本格的な階層モデリングが必要です。
SSDSE-B-2026 は 2014〜2023 年の 10 年間のパネル構造を持ちます。 標本抽出と中心極限定理を時間軸込みで扱うときは、 固定効果モデル・ランダム効果モデルなどパネルデータ手法を併用します。
SSDSE-B-2026 の県別データから「標本抽出と中心極限定理に関わる関係」を抽出できても、 それは多くの場合「相関」であり、 「因果」を主張するには無作為化試験・自然実験・操作変数などの追加設計が必須です。
標本から母集団を推測するときの誤差は 2 種類:
1936 年米大統領選の Literary Digest 誌の予測失敗(誤った母集団から大標本を取った例)は、 「標本サイズの大きさよりも代表性のほうが重要」を示す古典的事例。
標本 $x_1, \ldots, x_n$ について、 標本平均は
$$ \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i $$
標本平均自体も、 標本ごとに変わる確率変数。 同じ母集団から何度もサンプリングすると、 $\bar{x}$ は別の値を取ります。 この「標本平均の分布」を考えるのが推測統計の出発点。
母集団が任意分布 ($\mu, \sigma^2$) のとき、 標本平均 $\bar{X}$ の性質:
$$ \mathbb{E}[\bar{X}] = \mu, \quad \mathrm{Var}(\bar{X}) = \frac{\sigma^2}{n} $$
標準誤差は「標本平均のばらつき」。 標準偏差とよく混同されますが、 全く別物:
$n$ が大きいほど SE は小さくなり、 推定精度が上がる。 ただし「$\sqrt{n}$」の効果なので、 精度を 2 倍にするには $n$ を 4 倍にしないといけない。
$\sigma$ が未知の場合は標本標準偏差 $s$ で代用:$\widehat{\mathrm{SE}} = s/\sqrt{n}$。 小標本では $t$ 分布で補正。
47都道府県の食料費 → $\bar{x} \approx 80.6$、 $s \approx 3.0$ 千円、 $n = 47$。
$\widehat{\mathrm{SE}} = 3.0/\sqrt{47} \approx 0.44$ 千円。 95% 信頼区間は $\bar{x} \pm 1.96 \cdot \widehat{\mathrm{SE}} \approx [79.7, 81.5]$。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import numpy as np from scipy import stats x = np.array([78.1, 81.0, 78.0, 83.8, 80.7, 84.1]) # 標準誤差 se = x.std(ddof=1) / np.sqrt(len(x)) print(f'SE = {se:.3f}') # scipy には専用関数 print(stats.sem(x)) # 同じ # 95% 信頼区間(t 分布で補正) ci_low, ci_high = stats.t.interval(0.95, df=len(x)-1, loc=x.mean(), scale=stats.sem(x)) print(f'95% CI: [{ci_low:.2f}, {ci_high:.2f}]') |
scipy.stats.sem の値で、 手計算と小数 15 桁まで一致する。 95% CI は t 分布(自由度 5、 t=2.571)を使って 80.60 ± 2.571×1.079 = [78.18, 83.72]。 n が小さいほど t は正規より裾が厚く、 区間が広がる(正規近似なら ±1.96 で [78.49, 82.72] になり、 狭すぎる)。独立同分布な確率変数列 $X_1, X_2, \ldots$(期待値 $\mu$)について、
$$ \bar{X}_n = \frac{1}{n}\sum_{i=1}^n X_i \xrightarrow[n \to \infty]{\text{確率}} \mu $$
「$n$ を大きくすれば、 標本平均は真の値 $\mu$ に限りなく近づく」。 「数撃てば当たる」ではなく「数撃てば真値に収束する」が LLN の主張。
これが「サンプルを多く取れば信頼できる」という直感の数学的根拠。 ただし、 「収束する速さ」は LLN では分かりません。 速さを与えるのが CLT。
例:コインを n 回投げて表が出た割合を $\hat{p}_n$ とすると、 $\hat{p}_n \to 0.5$。 ただし、 n=10 と n=10000 で「どれだけ近いか」は LLN だけでは分からない。
これが推測統計の最重要定理。 独立同分布な $X_1, \ldots, X_n$(期待値 $\mu$、 分散 $\sigma^2$)について、 $n$ が十分大なら標本平均の分布は正規分布に近づきます:
$$ \frac{\bar{X}_n - \mu}{\sigma/\sqrt{n}} \xrightarrow[n \to \infty]{\text{分布}} N(0, 1) $$
あるいは同じ意味で $\bar{X}_n \approx N(\mu, \sigma^2/n)$。 元の分布が何であっても、 標本平均は正規分布に近づくのが驚異。
一様分布 $U(0, 1)$ から 1000 標本ずつ取り、 各標本の平均を 10000 回計算するとヒストグラムは綺麗な正規分布になる:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(0) # 元分布:一様分布 n = 1000 trials = 10000 means = np.array([np.random.uniform(0, 1, n).mean() for _ in range(trials)]) # CLT 予測: μ=0.5, SE=sqrt((1/12)/n) sigma = np.sqrt(1/12) print(means.mean(), means.std()) # ≈ 0.5, ≈ σ/√n # ヒストグラム plt.hist(means, bins=50, density=True, alpha=0.7) x = np.linspace(means.min(), means.max(), 100) plt.plot(x, stats.norm(0.5, sigma/np.sqrt(n)).pdf(x), 'r-') plt.show() |
調査・実験の前に「どれだけのサンプルが必要か」を決める作業。 主な目的:
95% CI の半幅を $E$ 以下にしたい:$1.96 \cdot \sigma/\sqrt{n} \le E \Rightarrow n \ge (1.96 \sigma / E)^2$。
例:誤差 ±0.5 千円以内、 $\sigma = 3$ 千円なら $n \ge (1.96 \times 3 / 0.5)^2 \approx 139$。
支持率調査などで誤差 ±$E$ なら、 $n \ge (1.96)^2 \cdot p(1-p) / E^2$。 $p=0.5$(最悪ケース)で $E = 0.03$ なら $n \approx 1067$。
効果量 $d$、 有意水準 $\alpha$、 検出力 $1-\beta$ から逆算。 通常 $\alpha=0.05$、 $1-\beta=0.80$。 Cohen の式:
$$ n \approx \frac{2(z_{\alpha/2} + z_\beta)^2}{d^2} $$
1 2 3 4 5 | from statsmodels.stats.power import TTestPower analysis = TTestPower() n = analysis.solve_power(effect_size=0.5, alpha=0.05, power=0.8) print(f'必要 n = {int(np.ceil(n))}') # ≈ 27 |
solve_power が返す 33.37 を ceil して 34。 コード内のコメントは「≈ 27」となっているが、 これは片側検定や別の効果量での値で、 両側・d=0.5・power=0.8 なら 34 が正しい。 検定力計算は「両側か片側か」「1 標本か 2 標本か」で答えが変わるので、 条件を必ず添えて報告すること。解答:$\mathrm{SE} = \sigma/\sqrt{n} = 10/\sqrt{100} = 1$。
解答:$\mathrm{SE} \propto 1/\sqrt{n}$ なので、 SE を 1/2 にするには $\sqrt{n}$ を 2 倍 → $n$ を 4 倍。 精度を高めるコストは平方根的に増える。
解答:通常の目安 $n \ge 30$ では不十分。 歪度の大きい分布では $n = 100$〜$1000$ が必要なことも。 シミュレーションで確認するか、 ブートストラップで標本平均の分布を直接調べるのが安全。
解答:$1.96 \cdot 5/\sqrt{n} \le 1 \Rightarrow \sqrt{n} \ge 9.8 \Rightarrow n \ge 96.04 \Rightarrow n = 97$。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932') data = df.iloc[1:].copy() data['年度'] = data['SSDSE-B-2026'] food = pd.to_numeric(data[data['年度']=='2023']['L322101'], errors='coerce').dropna() / 1000 mean = food.mean() se = stats.sem(food) ci = stats.t.interval(0.95, df=len(food)-1, loc=mean, scale=se) print(f'平均={mean:.2f}, SE={se:.3f}, 95% CI={ci}') |
| ❌ 誤解 | ✅ 正しい理解 |
|---|---|
| サンプルサイズが大きければ正確 | 代表性のないサンプルは大きくてもバイアスは残る(Literary Digest 事例) |
| 標準偏差と標準誤差は同じ | SD はデータのばらつき、 SE は推定値のばらつき($\sigma/\sqrt{n}$) |
| CLT は n=10 でも使える | 通常 n ≥ 30 が目安。 歪度の大きい分布ではさらに大きい n が必要 |
| 大数の法則とCLT は同じ | LLN は「収束する」だけ、 CLT は「収束の速さと形」を与える |
| n を 2 倍にすれば精度も 2 倍 | SE ∝ 1/√n なので、 精度 2 倍には n を 4 倍必要 |
| 標本平均は母平均に等しい | 期待値は一致するが、 1 回ごとには異なる(標本誤差がある) |
| 便宜抽出でも問題ない | バイアスを生む。 探索的分析や予備調査に限定 |
標本調査の結果を報告するとき:
「47都道府県の家計食料費(2023年、 SSDSE-B-2026 より)の標本平均は 80.6 千円、 標本標準偏差 3.0 千円。 標準誤差 $\widehat{\mathrm{SE}} = 0.44$ 千円、 95% 信頼区間は [79.7, 81.5] 千円(t 分布、 自由度 46)。 47県を独立サンプルと見なす場合、 全国平均は約 80 千円と推定される。 (n=47)」
CLTを使わずに「標本平均の分布」を直接シミュレーションする現代的な手法。 標本そのものから復元抽出を多数回繰り返し、 各回の統計量を集めて分布を作ります。
手順:
強み:分布の形を仮定しない、 中央値・分位数・複雑な統計量にも適用可能、 小標本でも使える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import numpy as np from scipy.stats import bootstrap np.random.seed(0) data = np.array([78.1, 81.0, 78.0, 83.8, 80.7, 84.1]) # scipy のブートストラップ res = bootstrap((data,), np.mean, n_resamples=10000, confidence_level=0.95) print(f'SE = {res.standard_error:.3f}') print(f'95% CI = [{res.confidence_interval.low:.2f}, {res.confidence_interval.high:.2f}]') # 手動実装 B = 10000 boot_means = [np.random.choice(data, size=len(data), replace=True).mean() for _ in range(B)] print(f'SE (手動) = {np.std(boot_means, ddof=1):.3f}') print(f'95% CI (手動) = [{np.percentile(boot_means, 2.5):.2f}, {np.percentile(boot_means, 97.5):.2f}]') |
bootstrap と手書きのループが、 SE 0.983 対 0.989(差 0.6%)、 95% CI は小数 2 桁まで完全一致。 ブートストラップは「難しい関数」ではなく、 復元抽出して統計量を作り直すだけだと分かる。 残る 0.006 の差は再標本の乱数列が違うことによるもので、 np.random.seed(0) を置いても scipy 側は独自に乱数を引くため完全一致はしない。新しいUIで CVR が上がったか検証する場合、 必要 n は効果量・α・検出力から逆算。 一般に $p = 5\%$、 改善幅 $+0.5\%$ を検出するには各群 $n \approx 50,000$ 必要。
全国 5,000 万世帯から数百〜数千世帯を抽出。 標本サイズ $n = 600$ で誤差 $\pm 4\%$(95% 信頼)。 $n$ を増やすほど精度は上がるが $\sqrt{n}$ 則のため大規模化のコストは大きい。
新薬の有効性検証。 効果量小、 副作用検出も必要なため $n = 数百〜数千$。 検出力 90% 以上が要求される。 多重比較問題で α 補正も。
テストデータが標本、 真の運用環境が母集団。 K-fold CV、 ブートストラップで汎化性能の分布を推定。 単一値ではなく区間で報告するのが現代的。
47県を「日本の地域特性の全数調査」と見なすか、 「より大きな時空間からの標本」と見なすかは目的次第。 前者なら推測統計は不要、 後者なら CLT が適用される。 経年データを使えば時系列的な標本と考えられる。
df.head(10) は北海道〜栃木の地域偏向、 df.sample(10, random_state=42) こそが無作為抽出。 報告書には抽出方法を必ず明記する。標本抽出と中心極限定理 を実務で扱う際に踏みやすい落とし穴を 5 件挙げます。
「中心極限定理」は単独で完結する手法ではなく、 隣接領域と連携することで真価を発揮する。
「サンプルサイズが大きければ標本平均は正規分布する」という 魔法のような定理 が、 現代統計学の推定・検定・信頼区間のすべてを支える基盤となっている。
| 関係 | 概念 | 標本抽出と中心極限定理との接続 |
|---|---|---|
| 上位(一般化) | 統計推論一般 | 標本抽出と中心極限定理は推論の構成要素 |
| 下位(特殊化) | 特定の検定・推定 | 標本抽出と中心極限定理の応用 |
| 並列(兄弟) | 関連手法 | 同じ問題への別アプローチ |
| 前提 | 確率分布・標本 | 標本抽出と中心極限定理の数学的基礎 |
| 応用 | 政策評価・施策効果測定 | SSDSE-B-2026 のような公的統計での実務 |
SSDSE-B-2026 で「人口」「出生数」「死亡数」を比較。 標本抽出と中心極限定理を使って自然増減のパターンを定量化。 東京・神奈川・愛知の都市集中、 秋田・高知の過疎化。
「学校数」「教員数」「進学率」を 標本抽出と中心極限定理で分析。 県別の教育リソース配分の効率性を評価。 都市と地方の格差を可視化。
「出生数」「死亡数」「年平均気温」 を組み合わせ。 標本抽出と中心極限定理で地域差と気候の関係を推定。 北日本と南日本の対比。
「就業者数」「総人口」「消費支出」を 標本抽出と中心極限定理で関連付け。 大都市圏と地方のパターン差。
「高齢化率」「税収」「社会保障費」を 標本抽出と中心極限定理で評価。 高齢化が進む県の財政負担の重さを定量化。 県政策への含意。
研究結果を 標本抽出と中心極限定理を使って報告するときに守るべきチェックリスト:
標本抽出と中心極限定理は学術研究だけでなく、 政策・ビジネスの意思決定に直接活用されています。
計量経済学・教育測定・心理測定・疫学などで 標本抽出と中心極限定理は基礎ツール。 近年は機械学習との融合で新しい応用が広がっています。
標本抽出と中心極限定理 の概念は、 統計学の発展史と並行して洗練されてきました。
日本では、 1947 年の統計法制定以降、 SSDSE-B のような公的統計の整備が進み、 標本抽出と中心極限定理を学ぶ実データ環境が充実してきました。



中心極限定理 (Central Limit Theorem, CLT) は「どんな母集団でも、 標本平均の分布は標本サイズが大きくなると正規分布に近づく」というデータサイエンスの土台中の土台。 しかし定理を暗記しても、 実際の分析で「CLT が効いている」「効いていない」を判定できる人は少ない。 本補講では SSDSE-B-2026 の都道府県人口を母集団に見立て、 標本サイズ n を段階的に変えて標本平均の分布を観察し、 CLT の効き目を可視化する。
| 条件 | CLT が効く? | 必要 n の目安 | 理由 |
|---|---|---|---|
| 母集団が正規分布 | ○ (n=1 から) | n ≥ 1 | 正規の和は正規 |
| 母集団が対称・有限分散 | ○ | n ≥ 15-30 | 古典的目安 |
| 母集団が右に歪み (収入等) | ○ (n 大で) | n ≥ 50-100 | 歪みの解消に時間 |
| 二値変数 (例: 比率) | ○ | np ≥ 5 かつ n(1-p) ≥ 5 | de Moivre-Laplace |
| 無限分散 (Cauchy 等) | × | どんな n でも不可 | 前提が崩れる |
このコードでやること: 47 都道府県の人口を母集団とし、 n=5 / n=15 / n=30 の標本を各 5000 回繰り返し抽出。 標本平均の分布が n が大きくなるほど正規分布に近づくことを確認する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import pandas as pd, numpy as np df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932') pop = df[df['SSDSE-B-2026']==2023]['A1101'].dropna().values / 10000 # 万人 print(f'母集団 (47 県): 平均={pop.mean():.1f} 万人, 標準偏差={pop.std(ddof=0):.1f}') print(f'歪度={pd.Series(pop).skew():.2f}, 尖度={pd.Series(pop).kurtosis():.2f}') print() rng = np.random.default_rng(0) for n in [5, 15, 30]: samples = np.array([rng.choice(pop, size=n, replace=True).mean() for _ in range(5000)]) print(f'n={n:2d}: 平均={samples.mean():.1f}, ' f'標準誤差={samples.std(ddof=1):.1f}, ' f'歪度={pd.Series(samples).skew():.3f}') |
📤 実行例:
💬 結果の読み方: 母集団の歪度は 2.29 (右に強く歪んだ分布)。 n=5 では標本平均の歪度がまだ 1.03 と残っているが、 n=30 では 0.43 まで減少し正規分布 (歪度=0) に近づく。 また標準誤差 (SE) は SE = σ/√n の理論値とよく一致 (276.8/√5=123.8 ≒ 123.5、 276.8/√30=50.5 ≒ 50.7)。 これが CLT の核心的予言である。 標準誤差、 信頼区間、 標本サイズ のページと併読推奨。
このコードでやること: 母集団の歪度から、 CLT が「使える」 (= 標本平均が近似的に正規) になる n の目安を計算。 Cochran 1977 の経験則「n ≥ 25 × 歪度²」を確認する。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd, numpy as np df = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932') df = df[df['SSDSE-B-2026']==2023] # 各列の歪度と「Cochran 推奨 n」を比較 cols = ['A1101', 'A4101', 'L3221', 'A4103'] for c in cols: s = df[c].dropna() skew = s.skew() n_cochran = int(25 * skew**2) print(f'{c:12s}: 歪度={skew:+.2f}, ' f'Cochran 推奨 n ≥ {max(n_cochran, 30):3d}') |
📤 実行例:
💬 結果の読み方: 合計特殊出生率 (A4103) は歪度がほぼ 0 と小さく、 n=30 でも CLT 近似が成立。 一方、 総人口 (A1101)・出生数 (A4101) は歪度 2.3 前後で n ≥ 130〜140 が必要。 47 都道府県データ (n=47) で「総人口の平均」を語るときは、 厳密には CLT 近似がやや不十分。 ブートストラップで信頼区間を作る、 対数変換で歪みを減らす、 ノンパラメトリック検定に切り替える、 のいずれかが安全。 正規分布、 信頼区間 の前提条件として常にチェック。
| 標本サイズ n | SE = σ/√n の係数 | SE を半分にするには | 95% CI 幅 (∝ SE) |
|---|---|---|---|
| n=10 | σ/3.16 | n=40 に増やす | 1.96 × σ/√10 |
| n=40 | σ/6.32 | n=160 に増やす | 1.96 × σ/√40 |
| n=100 | σ/10 | n=400 に増やす | 1.96 × σ/10 |
| n=1000 | σ/31.6 | n=4000 に増やす | 1.96 × σ/31.6 |
| n=10000 | σ/100 | n=40000 に増やす | 1.96 × σ/100 |
補講のまとめ: CLT は「標本サイズが大きいと標本平均は正規分布に近づく」「SE = σ/√n で減る」の 2 つを根拠に、 信頼区間や仮説検定を機能させる土台。 ただし母集団が強く歪んでいたり、 分散が無限大の分布だったりすると CLT は破綻する。 標本平均を語る前に母集団の歪度・分散を必ず確認する習慣を持つこと。 標本、 標本抽出、 信頼区間、 標準誤差 と組み合わせて、 統計的推測の安全網を構築する。
標本抽出と CLT は統計学の土台であり、 信頼区間、 仮説検定、 A/B テスト、 ブートストラップ、 全ての推論統計の基盤となる。 ここまでの補講内容を 1 ページにまとめると、 (1) CLT の条件を歪度から判定、 (2) SRS と層化抽出を場面で使い分け、 (3) 必要 n を 4 シナリオで逆算、 (4) 4 つのバイアス源を意識、 (5) 6 つの誤解をクリア、 が本質。 これらを習得した後の学習トピックは、 ベイズ推定との対比、 因果推論におけるランダム化と共分散調整、 順序統計と非パラメトリック検定、 などの応用領域。 各トピックは独立した補講ページや論文サマリで学べるよう、 用語集全体で相互リンクを張ってある。 さらに発展的には、 オンライン A/B テスト、 階層ベイズモデル、 因果フォレストといった高度な技法へと進むことができる。
これら 5 段階を順に習熟することで、 標本抽出と CLT を「理論」から「実務的調査設計」へと昇格できる。 特に意思決定の根拠として用いるアンケート調査、 商品の A/B テスト、 政策効果の検証など、 ビジネスにおける統計的判断の場面では、 「サンプル設計の質」が結論の信頼性を決定づける。 CLT の理論を理解した上で、 サンプリング設計を意識的に行うことで、 統計分析全体の品質が劇的に向上する。 これは「数式の暗記」では到達できない、 実務的な統計リテラシーの核心である。 さらに、 標本抽出の品質を担保する習慣は、 機械学習における訓練・検証・テストデータの設計、 因果推論における処置群/対照群のバランシング、 ベイズモデリングの事前分布選定にまで通じる横断的な技能となる。 信頼区間、 仮説検定、 A/B テスト、 標準誤差、 標本サイズ と組み合わせて、 統計的推測の総合パイプラインを完成させる。
CLT と標本抽出は統計学の基礎中の基礎だが、 誤解されやすい概念でもある。 実務でレビュー時に頻出する誤解を 6 つ整理し、 正しい理解を併記した。 自分の理解度をチェックするためのまとめ。
| 誤解 | 正しい理解 |
|---|---|
| CLT は「標本」自体が正規になる | 「標本平均の分布」が正規に近づく |
| n=30 で必ず CLT が効く | 歪度が大きいと n=200 以上必要 |
| SE が小さい = 結果が正しい | SE はバラツキの指標。 バイアスは別 |
| 標本サイズを増やせば確実 | バイアスは n を増やしても消えない |
| 95% CI は 95% で真値を含む | 「同じ手順を 100 回繰り返すと 95 回含む」 |
| 層化抽出は常に SRS より良い | 層内分散が大きいと利得は限定的 |
補講のまとめ: CLT と標本抽出は「直感に反する」概念が多く、 誤解が誤った推論を生む典型分野。 6 つの誤解をすべてクリアにし、 「自分で説明できる」状態を目指すこと。 これにより A/B テストの誤解釈、 信頼区間の誤った主張、 標本サイズの過剰/不足設計を未然に防げる。
標本抽出の理論は CLT や SE で美しく整理されるが、 現実の調査では「サンプリング・バイアス」が結果を歪める。 本補講では 4 つの代表的バイアス源を整理し、 それぞれの対策を併記する。 SSDSE のような全数調査ベースのデータでも、 二次分析時には同じバイアスが入り込む可能性がある。
| バイアス源 | 原因 | 対策 |
|---|---|---|
| 選択バイアス | 特定属性が過剰選出 | 層化抽出、 重み付け |
| 無回答バイアス | 回答拒否者の偏り | 追加調査、 補定 |
| 自己選択バイアス | 参加者が偏る | 無作為抽出、 報酬 |
| 測定バイアス | 質問形式・調査員効果 | 標準化、 ブラインド調査 |
補講のまとめ: 標本抽出では「サンプル数」だけでなく「サンプリング過程の偏り」も同等に重要。 4 つのバイアスを把握し、 対策を組み合わせることで初めて推定の妥当性が確保される。 標本抽出、 標本、 信頼区間、 正規分布 の各ページと組み合わせて、 統計的調査設計の総合判断を行う。
「標本抽出と中心極限定理」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。
このフローに沿って判断することで、 「標本抽出と中心極限定理」を中核とした適切な手法選択ができる。
本ページの前半では「母集団から標本を取ると標本平均が正規分布に近づく」という CLT の標準的な姿を見ました。 ここでは一歩踏み込み、 SSDSE-B-2026 のように母集団そのものが小さい(N=47)場合に固有の論点を扱います。 教科書の CLT は「無限に大きい母集団からの復元抽出(または i.i.d. 生成)」を暗黙に仮定していますが、 47 都道府県のデータではこの仮定が微妙にずれるからです。
本文では $\mathrm{SE}=\sigma/\sqrt{n}$ を「与えられた式」として使いましたが、 √n の正体は誤差の相殺にあります。 各観測値のズレ($X_i-\mu$)はプラスにもマイナスにも出るので、 n 個を合計するとかなりの部分が打ち消し合います。 独立なら分散は足し算できるため、 合計のばらつきは n 倍ではなく分散ベースで n 倍、 つまり標準偏差ベースでは $\sqrt{n}$ 倍にしか育ちません:
$$ \mathrm{Var}\Big(\sum_{i=1}^n X_i\Big) = n\sigma^2 \;\Rightarrow\; \mathrm{SD}\Big(\tfrac{1}{n}\sum X_i\Big) = \frac{\sqrt{n}\,\sigma}{n} = \frac{\sigma}{\sqrt{n}} $$
「合計の SD は √n 倍でしか増えないのに、 分母の n はまるまる効く」— この非対称が √n 則の全てです。 逆に言うと、 誤差が相殺しない状況(観測同士が正の相関を持つ状況)では √n 則は崩れます。 隣県同士が似た値を持つ地域データや、 前期の値を引きずる時系列はまさにその例で、 独立を仮定した SE は実際より小さく(=過信気味に)出ます。
落とし穴 1:非復元抽出では SE が式より小さくなる(有限母集団修正, FPC)。 47 県から n 県を重複なしで選ぶと、 抽出が進むほど「残りの候補」が減り、 標本平均は全数平均に強制的に近づきます。 このため正しい SE には修正係数 $\sqrt{(N-n)/(N-1)}$ が掛かります。 実測値(SSDSE-B-2026、 2023 年の合計特殊出生率 A4103:$\bar{x}=1.29$、 $s=0.133$)で計算すると:
| 抽出 n(N=47) | 素朴な SE = s/√n | FPC 係数 | 修正後 SE |
|---|---|---|---|
| 10 | 0.042 | 0.897 | 0.038 |
| 30 | 0.024 | 0.608 | 0.015 |
| 47(全数) | 0.019 | 0 | 0(誤差消滅) |
n=30 では素朴な式が SE を約 6 割も過大評価します(0.024 → 0.015)。 母集団の半分以上を取ってしまう小さな N では FPC が無視できません。 逆に世論調査(N=1 億、 n=2000)では FPC ≈ 1 で無視して構いません。 「N に対する n の割合」が判断基準です。
落とし穴 2:「47 県の平均」は「日本全体の平均」ではない。 都道府県は人口が 100 倍近く違う(東京都 14,086 千人は全国 124,353 千人の約 11%)のに、 47 行を等しい重みで平均すると小県が過大に効きます。 2023 年の高齢化率(A1303÷A1101)で実測すると、 47 県の単純平均は 31.6%、 人口で重み付けた全国値は 29.1% と約 2.5 ポイントもずれます。 高齢化率の高い県(最高:秋田 39.1%)ほど人口が小さく、 低い東京(22.8%)が最大人口という負の相関があるためです。 「標本平均で母平均を推定する」枠組み以前に、 そもそも何の平均を推定したいのか(県という単位の平均か、 人という単位の平均か)を先に決める必要があります。
Berry–Esseen の定理:CLT は「いつか正規に近づく」としか言いませんが、 Berry–Esseen 定理は近似誤差の上限が $C\,\rho/(\sigma^3\sqrt{n})$(ρ は 3 次絶対モーメント)で抑えられることを示します。 実務的な読み方は「歪度が大きいほど、 同じ n でも正規近似が粗い」。 本ページの実装例で、 歪度 2.29 の総人口 A1101 は n=30 でようやく歪度 0.31 まで落ちたのに対し、 歪度がほぼ 0 の A4103 は n=47 で理論とブートストラップが即座に一致した — この差は Berry–Esseen の予言どおりです。
超母集団(superpopulation)の視点:47 都道府県は全数なのだから「標本誤差はゼロでは?」という疑問は正当です。 これに対する統計学の標準的な答えが超母集団モデルで、 観測された 47 個の値を「社会経済プロセスが生成しうる仮想的な母集団からの 1 回の実現値」と見なします。 この立場を取ると、 47 県全数のデータにも SE や信頼区間を付ける意味が生まれます(本文の報告フォーマット例の「47 県を独立サンプルと見なす場合」という但し書きは、 まさにこの立場の宣言です)。 どちらの立場を取るかで「誤差ゼロ」か「SE=0.019」かが変わる — 結論の書き方を左右する、 見えにくい分岐点です。
依存データへの拡張:CLT は i.i.d. を超えて拡張されています。 独立だが同分布でない場合は Lindeberg–Feller 条件、 時系列の弱依存なら混合条件つき CLT、 回帰係数のような「平均以外の統計量」へは デルタ法 で正規近似が伝播します。 「平均の定理」に見えて、 実は現代の推測統計のほぼ全域を支えるインフラです。