標準誤差(standard error, SE)に関する用語を、 標本統計量別・推定法・関連概念 別に索引化します。
| カテゴリ | キーワード(日本語) | キーワード(英語) |
|---|---|---|
| 基本概念 | 標準誤差、 標準偏差、 標本分布、 推定量の精度 | standard error, sampling distribution, precision |
| 標本統計量別 SE | 平均のSE、 比率のSE、 回帰係数のSE、 差のSE | SE of mean, proportion, regression coef |
| 推定法 | 解析的SE、 ブートストラップ、 ジャックナイフ、 デルタ法 | analytical SE, bootstrap, jackknife, delta method |
| 頑健な SE | ロバスト標準誤差、 クラスター頑健、 ニューウェイ-ウェスト | robust SE, HC0-HC3, cluster, Newey-West |
| 関連指標 | 信頼区間、 t統計量、 z統計量、 p値、 検出力 | CI, t/z statistic, p-value, power |
| 実装 | scipy.stats.sem、 statsmodels、 pingouin、 bootstrap | scipy.stats.sem, statsmodels, pingouin, bootstrap |
🍰 まずはやさしく
推定値のブレを測るものさしです。
答えがどれくらい正確かを知るために使います。
部活の平均点などが、調査のたびに変わる例です。
この章では標準誤差の意味と使い方を学びます。
標準誤差(Standard Error, SE)は「もし同じ調査を何度も繰り返したら、 推定値はどれくらいブレるか」を測る量です。 標準偏差(SD)と紛らわしいですが、 別物です。
SD vs SE:
標本平均の SE は $\sigma/\sqrt{n}$ で計算され、 n が大きいほど小さくなります。 SD は n が変わっても変わりません(データの本質的な広がりだから)。
SE の用途:(i) 信頼区間 = 推定値 ± 1.96·SE、 (ii) t統計量 = 推定値 / SE、 (iii) Wald 検定の分母。 ほぼ全ての推測統計の中核です。
🍰 まずはやさしく
分析結果に添えられる数値のことです。
信頼区間などの計算の出発点になります。
スマホで見る統計データの表に出てくる数値です。
ここでは定義から実装までを順番に解説します。
論文表で各係数の隣に出てくる「std err」「SE」の列。 p値や信頼区間の計算の出発点。
標準誤差 とは:「標本平均がどれくらいブレるか」を測る量。標準偏差をサンプルサイズの平方根で割ったもの。
本ページでは「standard error」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。
「standard error」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。
🍰 まずはやさしく
推定の「自信のなさ」を表す数値です。
データのばらつきと、平均のブレを分けるために使います。
県ごとの違いか、平均値のズレかの違いです。
図にあるエラーバーの意味について詳しく読みます。

標準誤差 (SE) と標準偏差 (SD) は記号も似ていて混同されやすいが、 「何のばらつき」を測るかが全く違う。 SD は「個々のデータ点のばらつき」、 SE は「推定量(例えば平均)のばらつき」。 47 都道府県の年間出生数を考えると、 SD は「県ごとの出生数の散らばり」、 SE は「47 県平均という値そのものの不確実性」になる。
| 観点 | 標準偏差 (SD) | 標準誤差 (SE) |
|---|---|---|
| 対象 | 個々のデータ点 | 推定量(平均、 回帰係数等) |
| 標本サイズの効果 | n が増えても収束(母集団 SD へ) | n が増えると → 0 へ |
| 用途 | 分布の幅を記述 | 推定の精度を表現、 CI 構築 |
| 公式 | $\sqrt{\sum (x_i - \bar x)^2 / (n-1)}$ | $SD / \sqrt n$ |
| 論文の図 | エラーバー(個体差) | エラーバー(推定の幅) |
論文・スライドで エラーバーが SD か SE かを明示しないのは重大な誤り。 SD のエラーバーは大きく、 SE のエラーバーは小さく見える。 同じデータでも見え方が変わるので注意。
標準誤差 (SE) は 「標本統計量のばらつき」 = σ/√N。 「データのばらつき (SD)」とは別物。 以下 3 図で「SD と SE の違い」「N と SE の縮小」「SE が決める CI 幅」を可視化する。
→ SD はデータの散らばり、 SE は標本平均の散らばり。 N=100 なら SE は SD の 1/10。 SE は推定の精度を表す。
→ N を 4 倍に増やすと SE は半分 (1/√4)。 N を 100 倍にしても SE は 1/10 にしかならない (収穫逓減)。 「もう少しデータを増やす」コストの判断材料になる。
→ 95% CI 幅 = ±1.96 × SE。 SE を半分にすれば CI も半分。 SE は「推定の精度」を直接 CI に翻訳する蝶番。
以下 5 問。 すべて「SE = SD/√n」の式と本文で確認できる。
SE は n が増えると √n の速さで縮む。 上図は SD は変わらない一方、 SE だけが小さくなる「精度の改善」を視覚化したもの。
| n | √n | SE = 100/√n | 95% CI 幅 |
|---|---|---|---|
| 10 | 3.16 | 31.6 | ±62.0 |
| 100 | 10.0 | 10.0 | ±19.6 |
| 1000 | 31.6 | 3.16 | ±6.20 |
| 10000 | 100 | 1.00 | ±1.96 |
→ n を 100 倍にすると SE は 10 倍小さくなる(√100=10)。 「精度を 2 倍にしたければ n を 4 倍にせよ」が黄金律。
🍰 まずはやさしく
標準偏差をサンプルサイズの平方根で割った値です。
計算して、推定の精度を数字で出すために使います。
食費のデータから平均のばらつきを出す例です。
なぜこの数式になるのか、その理由を読みます。
$$ SE_{\bar{x}} = \frac{\sigma}{\sqrt{n}} \approx \frac{s}{\sqrt{n}} $$
「47都道府県データから推定した母平均は、 ±0.852千円程度のばらつきで信頼できる」と読めます。
中心極限定理(CLT)から、 標本平均の分散は σ²/n に等しい:
$$ \text{Var}(\bar{X}) = \frac{\sigma^2}{n} \Rightarrow SE = \sqrt{\text{Var}(\bar{X})} = \frac{\sigma}{\sqrt{n}} $$
💡 「精度を上げるには標本を大きくしろ」が常識だが、 √n でしか改善しないため、 巨大なコスト増加。 設計時に SE の目標値とサンプルサイズを慎重に決めるべき。
独立性が崩れる場合、 通常の σ/√n では SE を過小評価。 例:
クラスター ロバスト標準誤差(CR-SE)や混合効果モデルで対処。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # ── この抜粋で使うデータを用意します ── import numpy as np import pandas as pd import statsmodels.api as sm import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023] # 2023 年の 47 都道府県 X = sm.add_constant(df[['A1101']].astype(float)) y = df['A1303'].astype(float) # クラスターは「地方ブロック」。地域コードの上 2 桁から作る _no = df['Code'].str[1:3].astype(int) cluster_id = np.select( [_no <= 7, _no <= 14, _no <= 23, _no <= 30, _no <= 35, _no <= 39], ['北海道東北', '関東', '中部', '近畿', '中国', '四国'], default='九州沖縄') # クラスター ロバストSE model = sm.OLS(y, X).fit(cov_type='cluster', cov_kwds={'groups': cluster_id}) print(model.bse) # クラスター調整後のSE |
独立同分布 (i.i.d.) なデータ $X_1, \dots, X_n$ の標本平均 $\bar X = \frac{1}{n}\sum X_i$ の分散は分散の和の公式から:
$$ \mathrm{Var}(\bar X) = \mathrm{Var}\left(\frac{1}{n}\sum_{i=1}^n X_i\right) = \frac{1}{n^2} \sum_{i=1}^n \mathrm{Var}(X_i) = \frac{\sigma^2}{n} $$
標準偏差を取ると標準誤差:
$$ SE(\bar X) = \sqrt{\mathrm{Var}(\bar X)} = \frac{\sigma}{\sqrt n} $$
母分散 $\sigma^2$ が未知の場合は不偏分散 $s^2$ で推定し、 推定 SE は:
$$ \widehat{SE}(\bar X) = \frac{s}{\sqrt n},\quad s^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar X)^2 $$
信頼区間(t 分布、 自由度 $n-1$):
$$ \bar X \pm t_{n-1,\, 1-\alpha/2} \cdot \widehat{SE}(\bar X) $$
回帰係数 $\hat\beta_j$ の標準誤差(OLS の場合):
$$ \widehat{SE}(\hat\beta_j) = \sqrt{\hat\sigma^2 \left[ (X^\top X)^{-1} \right]_{jj}} $$
標本が母集団 N に対して無視できないほど大きい場合、 SE は 有限母集団修正係数 (FPC) をかけて補正する:
$$ SE_{\mathrm{FPC}} = \frac{\sigma}{\sqrt n} \cdot \sqrt{\frac{N - n}{N - 1}} $$
例:47 県のうち 30 県を標本とした場合、 $\sqrt{(47-30)/(47-1)} = \sqrt{17/46} = 0.608$ で SE を縮小する。 全数調査 $n = N$ なら SE = 0。
非独立データでの SE 補正:
sm.OLS(...).fit(cov_type='HAC', cov_kwds={'maxlags': 4})。cov_type='HC3'。cov_type='cluster', cov_kwds={'groups': id}。クラスター標本では「同じクラスタ内の観測値は似ている」ため、 実質的な情報量は名目 n より少ない。 デザイン効果 $deff$ で表すと:
$$ deff = \frac{\mathrm{Var}_{\mathrm{cluster}}(\bar X)}{\mathrm{Var}_{\mathrm{SRS}}(\bar X)} = 1 + (m - 1)\rho $$
$m$ は 1 クラスタ当たり平均サンプルサイズ、 $\rho$ は intra-cluster correlation (ICC)。 実効サンプルサイズは $n_{\mathrm{eff}} = n / deff$。 例えば 47 県 × 10 市 = 470 サンプル、 ICC=0.2 なら $deff = 1 + 9 \cdot 0.2 = 2.8$、 $n_{\mathrm{eff}} = 168$。
教育・医療・労働経済の現場データではほぼ必ずクラスター構造があり、 通常 SE では 有意性を過大評価 する。 マルチレベルモデル or クラスター頑健 SE で対処。
$\mathrm{Var}(\bar X) = \sigma^2/n$ は「n 個のばらつきを平均することで、 個々のばらつき $\sigma^2$ が $1/n$ に薄まる」と読む。 これは独立性が前提。 もしデータが相関していたら(時系列、 クラスター標本)、 この公式は使えず SE は過小評価される。
$SE = \sigma/\sqrt n$ は「精度を 2 倍にしたければ、 n を 4 倍にする必要がある」を意味する。 √ がついているのが効いていて、 サンプルサイズの効果は逓減する。 1000 サンプルから 4000 サンプルに増やしても、 SE は半分にしかならない。 これがコスト対効果を考える際の重要ポイント。
「数式を言葉で読み解く」と、 $\widehat{SE}$ の hat はあくまで推定であって、 真の SE は未知。 推定 SE には自分自身の不確実性がある。 t 分布を使うのはこの「SE の不確実性」を取り込むため。 n が小さいほど t 分布の裾は厚くなり、 信頼区間は広がる。
回帰係数の SE の公式 $\sqrt{\hat\sigma^2 [(X^\top X)^{-1}]_{jj}}$ は、 「データの誤差分散 × 説明変数の構造」の積。 多重共線性があると $X^\top X$ がほぼ特異になり対角成分が大きくなる → SE が爆発。 これが「VIF が高いと係数の SE が膨らむ」のメカニズム。
ブートストラップ標準誤差は「データから復元抽出で B 個の擬似標本を作り、 各擬似標本で推定量 $\hat\theta^{*b}$ を計算し、 その標準偏差を SE とみなす」というアイデア。 数式で書くと:
$$ \widehat{SE}_{\mathrm{boot}}(\hat\theta) = \sqrt{\frac{1}{B-1} \sum_{b=1}^B \left(\hat\theta^{*b} - \bar{\hat\theta^*}\right)^2} $$
これを言葉で読むと「データを観測値の経験分布とみなし、 そこから何度も再標本化して推定量の散らばりを測る」。 利点は 分布の形を仮定せずに済む こと。 例えば中央値や 95 パーセンタイルなど、 解析的 SE が難しい推定量にも適用できる。
B は 1,000〜10,000 程度を取る。 B が小さいと SE 自体の MC 誤差が大きい。 47 都道府県のように $n$ が小さい場合、 ブートストラップは 「観測されなかった裾」を見落とす 傾向があるので注意(例:もっと大きい県があり得たかもしれないが、 標本にないので再現できない)。
ブートストラップ CI には percentile, BCa, basic, percentile-t など複数の方式がある。 BCa (bias-corrected and accelerated) は歪んだ分布に対して最も性能が良い。 単純な percentile 法は CI のカバレッジが低くなることがある。
SSDSE-B-2026(2023 年)から「47 都道府県の総人口」を 1 つの標本とみなし、 母平均の標準誤差を計算します。
| 統計量 | 値 | 説明 |
|---|---|---|
| n | 47 | 標本サイズ |
| x̄ | 264.6 万人 | 標本平均 |
| SD | 279.8 万人 | 標本標準偏差 |
| SE = SD/√n | 279.8/√47 ≈ 40.8 万人 | 平均の標準誤差 |
自由度 df = n − 1 = 46、 t₀.₀₂₅,₄₆ ≈ 2.013
CI = x̄ ± t · SE = 264.6 ± 2.013 × 40.8 = (182.4, 346.7) 万人
母平均は95%の確率で この区間に含まれると解釈。
| n | SE | 95% CI 幅 |
|---|---|---|
| 10 | 88.5 | ±178 |
| 47 | 40.8 | ±82 |
| 100 | 28.0 | ±56 |
| 1000 | 8.85 | ±17.8 |
💡 n を4倍にしないと SE は半分にならない(SE は √n に反比例)。 精度を上げるコストは 非線形に増大 する。
skiprows=[1] でラベル行を除外し、 年度 2023 で抽出)。 SD が平均より大きい(CV≈1.06)のは東京都など巨大県による右裾の偏りで、 これ自体が実データの重要な特徴。最新年度の 47 都道府県人口の平均と SE を計算する。 47 都道府県は「47 県という有限母集団全体」とも見なせるが、 ここでは「日本の地域 × 時間 の母集団からの 47 標本」と仮定して扱う。
このコードでやること:SSDSE-B-2026 から 47 都道府県の最新年度総人口を取り出し、 平均・SD・SE・95% 信頼区間を scipy.stats.sem と t 分布で計算する。
📥 入力データ (SSDSE-B-2026 抜粋):
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]) latest = df[df['SSDSE-B-2026'] == 2023] pop = latest['A1101'].values n = len(pop) mean = pop.mean() sd = pop.std(ddof=1) se = stats.sem(pop) # = sd / sqrt(n) t_crit = stats.t.ppf(0.975, df=n-1) ci_low, ci_high = mean - t_crit*se, mean + t_crit*se print(f'n = {n}') print(f'平均 = {mean:,.0f}') print(f'SD = {sd:,.0f}') print(f'SE = {se:,.0f}') print(f't (df={n-1}, 0.975) = {t_crit:.3f}') print(f'95% CI = ({ci_low:,.0f}, {ci_high:,.0f})') |
📤 実行すると次の出力が得られる:
💬 SD ≈ 276 万人(県ごとの大きなばらつき)に対し、 SE ≈ 40 万人(平均推定の不確実性)。 比率は √47 ≈ 6.86 倍で、 公式 $SE = SD/\sqrt n$ と完全に一致。 95% CI は「日本の県人口平均は 182 万〜347 万人の間」と読める(東京都の影響で歪んでいる点に注意)。
47 都道府県の各指標について平均・SD・SE・CV を出すと、 「どの指標が県差が大きいか」「どの推定が精度高いか」が並列に見える。
このコードでやること:SSDSE-B-2026 の 4 指標について平均・SD・SE・変動係数 CV=SD/平均 を一括計算し、 推定精度と県差を比較する。
📥 入力データ: 47 県 × 4 指標 (総人口、 高齢人口、 出生数、 死亡数)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import pandas as pd from scipy import stats cols = {'総人口': 'A1101', '高齢人口': 'A1303', '出生数': 'A4101', '死亡数': 'A4200'} rows = [] for name, c in cols.items(): x = latest[c].values mean = x.mean() sd = x.std(ddof=1) se = stats.sem(x) cv = sd / mean rows.append((name, f'{mean:,.0f}', f'{sd:,.0f}', f'{se:,.0f}', round(cv, 3)) out = pd.DataFrame(rows, columns=['指標','mean','SD','SE','CV']) print(out.to_string(index=False)) |
📤 実行例:
💬 総人口 (CV=1.06)・出生数 (CV=1.11) は CV が 1 を超えており「SD が平均より大きい」状態 = 東京都など巨大県が分布を歪めている。 4 指標では出生数の CV=1.11 が最も大きく、 死亡数 (0.87)・高齢人口 (0.90) は相対的に県差が小さい(高齢化・死亡は全県に広く進むため)。 SE は単位を持つので大小比較しにくいが、 SE/平均(=CV/√n)で標準化すれば「平均の相対精度」になる。
「マージン・オブ・エラー $\pm M$ で平均を推定したい」と決めれば、 必要サンプルサイズが逆算できる。 95% CI で $M = 1.96 \cdot \sigma/\sqrt n$ より:
$$ n \ge \left( \frac{1.96 \cdot \sigma}{M} \right)^2 $$
このコードでやること:47 県人口データから $\sigma$ を推定し、 目標誤差 ±10 万、 ±5 万、 ±1 万人での必要サンプル数を計算する。
📥 入力データ: 47 県の総人口(事前情報)。
1 2 3 4 5 6 7 | import numpy as np sigma_hat = pop.std(ddof=1) print(f'推定 σ = {sigma_hat:,.0f}') for M in [100_000, 50_000, 10_000]: n_req = (1.96 * sigma_hat / M) ** 2 print(f'M = ±{M:,} → 必要 n = {n_req:,.1f}') |
📤 実行例:
💬 ±10 万人精度なら 3,007 県相当、 ±1 万人精度なら 30 万県相当の標本が必要。 県のばらつきが大きいので「平均を正確に推定する」のは本質的に困難。 これが「東京都を除外する」「人口層別に層化抽出する」といったデザインの動機。
合成データで標本平均の SE を計算する。
| n | SE |
|---|---|
| 25 | 2.0 |
| 100 | 1.0 |
| 400 | 0.5 |
| 2500 | 0.2 |
1 2 3 4 5 | import numpy as np sigma = 10 n = np.array([25, 100, 400, 2500]) SE = sigma / np.sqrt(n) print(f"SE: {SE}") |
💬 手計算 (Step 2) と Python 出力が完全一致。
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 | import numpy as np # x はこのあとのブロックで使う 47 都道府県の総人口 import pandas as pd _d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) x = _d[_d['SSDSE-B-2026'] == 2023]['A1101'].astype(float).values import numpy as np from scipy import stats # 標本平均のSE data = np.array([45, 50, 55, 60, 65]) se = stats.sem(data) # scipy のヘルパー se_manual = data.std(ddof=1) / np.sqrt(len(data)) print(f'SE = {se:.4f}') # 比率のSE p_hat = 30 / 100 # 成功割合 n = 100 se_prop = np.sqrt(p_hat * (1 - p_hat) / n) # 回帰係数のSE(statsmodels) import statsmodels.api as sm X = sm.add_constant(x) model = sm.OLS(y, X).fit() print(model.bse) # 各係数のSE |
線形回帰でも、 各係数 β_j の標準誤差が計算されます。 これを使って t統計量と p値が出ます:
$$ t_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} $$
ランダムフォレストでは、 N本の木の予測の標準偏差が予測の不確実性(SE)として使えます。
任意のモデルで、 ブートストラップサンプルから繰り返し学習・予測し、 その分散から SE を推定。
SD はデータの散らばり、 SE は推定値のばらつき。 グラフのエラーバーが SD か SE かは必ず明記。
σ/√n は独立同分布のサンプリングを前提。 時系列、 クラスター内データでは違う SE 公式が必要。
n=5〜10 では、 s 自体がぶれるため SE もぶれます。 ブートストラップでより堅実な推定を。
標本平均 x̄ の精度はSE = σ/√n で測ります。 これは標本平均の標準偏差でもある。
95%CI ≈ x̄ ± 1.96 × SE。 つまり SE が分かれば直接 CI が作れる。
t統計量 = (推定値 - 仮説値) / SE。 SE が小さいほど検出力が高い。
| 指標 | 意味 | グラフで使う場面 |
|---|---|---|
| SD(標準偏差) | データ1個のばらつき | 分布の広がりを示したい時 |
| SE(標準誤差) | 推定値のばらつき | 平均の精度を示したい時 |
| 95%CI | 真値の入る範囲 | 不確実性を直感的に示したい時 |
論文・報告で「エラーバー」を描く時は、 何を表しているか必ず明記。 SD でも SE でも CI でも見た目は似ているが意味が違う。
n > 30 ではCLTが効くため、 SE × 1.96 ≈ 95%CI が一律に使えます。 小標本では t分布で補正が必要。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd from scipy.stats import sem, t df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]).query('`SSDSE-B-2026` == 2023') x = df['A1101'] se = sem(x) # ddof=1 がデフォルト print(f'SE = {se:.3f}') # 95% 信頼区間 n = len(x) ci_half = t.ppf(0.975, df=n-1) * se print(f'95% CI: ({x.mean()-ci_half:.2f}, {x.mean()+ci_half:.2f})') |
1 2 3 4 5 6 7 8 9 10 | import numpy as np import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]).query('`SSDSE-B-2026` == 2023') x = df['A1101'].to_numpy() n = len(x) sd = x.std(ddof=1) # 標本SD se = sd / np.sqrt(n) print(f'SD={sd:.2f}, n={n}, SE={se:.3f}') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import statsmodels.api as sm import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]).query('`SSDSE-B-2026` == 2023') X = sm.add_constant(df[['A1101']]) y = df['A1303'] # 通常のSE ols = sm.OLS(y, X).fit() print(ols.bse) # 係数のSE # ロバストSE(HC3) robust = sm.OLS(y, X).fit(cov_type='HC3') print('HC3:', robust.bse) # クラスター頑健SE cluster = sm.OLS(y, X).fit(cov_type='cluster', cov_kwds={'groups': df['Prefecture']}) print('cluster:', cluster.bse) |
1 2 3 4 5 6 7 8 9 10 11 | from scipy.stats import bootstrap import numpy as np import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]).query('`SSDSE-B-2026` == 2023') x = df['A1101'].to_numpy() res = bootstrap((x,), np.mean, n_resamples=10000, confidence_level=0.95, random_state=0) print(f'ブートストラップSE: {res.standard_error:.3f}') print(f'CI: {res.confidence_interval}') |
1 2 3 4 | import pingouin as pg res = pg.compute_bootci(x, func='mean', n_boot=10000, confidence=0.95, seed=0) print(f'95% CI (bootstrap): {res}') |
1 2 3 4 5 6 7 | import seaborn as sns import matplotlib.pyplot as plt # 群ごとの平均±SE をプロット sns.barplot(data=df, x='Prefecture', y='A1101', estimator='mean', errorbar=('ci', 95)) # 自動で SE→CI plt.show() |
このコードでやること:分布の仮定なしで SE を計算するブートストラップを scipy.stats.bootstrap で実行し、 解析公式の SE と比較する。
📥 入力データ: 47 県の総人口(上記と同じ)。
1 2 3 4 5 6 7 8 9 10 11 | import numpy as np from scipy.stats import bootstrap rng = np.random.default_rng(0) res = bootstrap((pop,), np.mean, n_resamples=10000, confidence_level=0.95, method='percentile', random_state=rng) print(f'bootstrap SE = {res.standard_error:,.0f}') print(f'bootstrap 95% CI = ({res.confidence_interval.low:,.0f}, ' f'{res.confidence_interval.high:,.0f})') print(f'(解析的 SE = {se:,.0f}、 95% CI = ({ci_low:,.0f}, {ci_high:,.0f}))') |
📤 実行例:
💬 ブートストラップ SE と解析的 SE はほぼ一致 (約 2% 差)。 ただし CI は若干非対称(東京都という強い右裾の外れ値があるため)。 ブートストラップは 分布の歪み を自然に取り込めるのが強み。 中央値・分位数・相関係数など、 解析公式が複雑な場合に特に有用。
このコードでやること:47 都道府県で「総人口 → 高齢人口」の単回帰を statsmodels.OLS で当てはめ、 係数の SE と t 統計量を出力する。
📥 入力データ: 47 県の総人口 (x) と高齢人口 (y)。
1 2 3 4 5 6 7 | import statsmodels.api as sm x = latest['A1101'].values y = latest['A1303'].values X = sm.add_constant(x) model = sm.OLS(y, X).fit() print(model.summary().tables[1]) |
📤 実行例(抜粋):
💬 傾き 0.246 の SE は 0.005、 t 統計量は 49.6 で極めて有意。 95% CI = [0.236, 0.256] は「総人口が 1 人多い県は高齢者が約 0.24〜0.26 人多い」と解釈できる。 SE が小さいのは説明変数のばらつきが大きい(東京都〜鳥取県の差)ため。 多重共線性があれば SE は膨らむ → VIF で確認。
姉妹ページの 標準偏差(データの散らばりそのもの)、 信頼区間(「95%」の意味)、 ブートストラップ(再標本化)に対し、 本ラボは 「SD と SE の区別」と「√n の壁」 に特化する。 母集団は架空データ(架空のテスト得点:平均 μ=60、 SD σ=12 の正規母集団)を使う。 乱数はシード付き擬似乱数なので、 リセット後は誰がいつ触っても同じ結果になる(再現可能)。
スライダーで標本サイズ n を選び、 「標本を1つ抽出」を押すと上段に 個々のデータ点の散らばり(=SD の世界) と標本平均(▼)が表示される。 「1000回抽出」を押すと下段に 標本平均だけの分布 が積み上がる。 下段の山の幅(=SE)が上段よりずっと狭いこと、 そして 実測 SE が理論値 SD/√n とほぼ一致する ことを確かめてほしい。 n を大きくすると下段だけが痩せていき、 上段(SD)は痩せない。
💡 観察ポイント:(i) 上段の点の広がり(SD≈12)は n を増やしてもほぼ変わらない。 (ii) 下段の山の幅(SE)は n=25 なら 12/5=2.4、 n=100 なら 12/10=1.2 と √n で痩せる。 (iii) K=1000 まで積むと実測 SE は理論値と数 % 以内で一致する(この一致こそが「SE は標本平均の SD」という定義の実演)。
下の曲線 SE = σ/√n 上をドラッグ(タッチ対応)またはスライダーで n を動かすと、 n(青)と 4n(橙) の 2 点が表示される。 どこを選んでも「n を 4 倍にすると SE はちょうど半分」。 精度を 10 倍にしたければ n は 100 倍必要 — これがデータ収集コストの「壁」になる。
| n | SE = 12/√n | 前の行からの改善 | 追加コスト(観測数) |
|---|---|---|---|
| 25 | 2.40 | — | — |
| 100 | 1.20 | 半分 | +75 |
| 400 | 0.60 | 半分 | +300 |
| 1600 | 0.30 | 半分 | +1200 |
→ 「SE を半分に」するたびに追加コストは 4 倍ずつ膨らむ(収穫逓減)。 サンプルサイズ 設計で目標 SE から必要 n を逆算する意味がここにある。
論文・スライドのエラーバーは SD・SE・95%CI のどれかで見た目の意味がまるで違う。 3 問で読み方を確認しよう(ボタンを押すと解説が出る)。
Q1. 「47 都道府県それぞれの値がどれだけ違うか(個体差)」を図で見せたい。 エラーバーに使うべきは?
Q2. 「2 群の平均値の推定精度(平均がどれだけ信頼できるか)」を比較して見せたい。 使うべきは?
Q3. 2 群の「平均 ± SE」のエラーバーが少し重なっている。 この 2 群の差は…
直感:SD は「データの散らばり」を記述する記述統計の量、 SE は「推定量の精度」を測る推測統計の量。 ウィジェット①で n を増やしても上段(SD の世界)は広がったままなのに、 下段(SE の世界)だけが痩せる — この非対称こそ両者の本質的な違いで、 式では「SD は n に依存しない、 SE = SD/√n は n に反比例して縮む」に対応する。 下段の山が n が小さくても釣鐘型に近づくのは中心極限定理(本文「なぜ √n で割るのか」参照)の働きである。
落とし穴:①「SE が小さい=効果が大きい」ではない。 SE は n さえ増やせばいくらでも縮むので、 巨大データでは実質的に無意味な差でも t = 推定値/SE が巨大になり「有意」が出る。 精度(SE)と大きさ(効果量)は必ず分けて報告する。 ②エラーバーの誤読(クイズ③):SE 棒の重なりで有意差の有無を断定しない。 ③このラボの SE=SD/√n は独立な抽出が前提で、 クラスター構造や時系列相関があると過小評価になる(本文「クラスター・階層構造での SE」「有限母集団修正」参照)。
発展:中央値や分位数のように解析公式が面倒な統計量の SE は ブートストラップ(再標本化して推定量の SD を測る — 発想はウィジェット①の「1000回抽出」を実データの経験分布で代替したもの)で推定できる。 回帰では不均一分散に HC0〜HC3 のロバスト SE、 グループ内相関にはクラスター SE、 自己相関には Newey-West(HAC)を使う — いずれも「σ/√n が使えない状況で SE を正しく測り直す」技術であり、 本文の該当節で SSDSE-B の実値例を確認できる。
cov_type='HC1')を使うのが安全。標準誤差(standard error, SE)は、 「同じ母集団から何度も標本を取り、 標本平均を計算したときのばらつき」を表します。
左:データそのもののばらつき(標準偏差 σ)。
右:標本平均のばらつき(標準誤差 SE)— ずっと小さい。
💡 SE と SD は別物。 SD は「データ1個のばらつき」、 SE は「平均のばらつき」。 SE は SD より√n 倍小さい。
標準誤差 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
🌐 統計・データサイエンス › 推測統計 › 推定 › 標準誤差
中心に 標準誤差 を置き、 そこから 標準偏差・信頼区間・分散・標本サイズ・p値・回帰の有意性 など 計 17 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語とあとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。
大きな円が小さな円を包含する Circle Packing 図。 「標準誤差」は緑色でハイライト。
長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「標準誤差」は緑色でハイライト。
| マップ | 分かること | こんな時に見る |
|---|---|---|
| 🔗 関係マップ | 手法間の横の関係(前提→発展→応用) | 「次に何を学べばよい?」 学習順序の判断 |
| ⭕ 包含マップ | 分類体系の入れ子構造(上位⊃下位) | 「この手法はどんなジャンルに属する?」 |
| 🌳 ツリーマップ | 分野の規模比較(面積=ボリューム) | 「データサイエンス全体の俯瞰像」 |
💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは 標準誤差 の隣に何が並ぶかを、 包含マップとツリーマップは 統計・データサイエンス → 推定 → 標準誤差 という入れ子の位置を示します。 「推定には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。
標準誤差 SE = SD/√n は「サンプル統計量 (推定量) のばらつき」を表す指標。 SSDSE-B-2026 の 47 都道府県を「日本全体の何らかの母集団からの標本」と見立てれば、 各指標の平均推定値の SE が計算でき、 信頼区間 mean ± 1.96·SE を導出できる。 SD は「個体のばらつき」、 SE は「推定量のばらつき」で両者は別概念。
SD と SE の混同が論文での頻出ミス。 「個体差を示したい」なら SD、 「推定の精度を示したい」なら SE と用途で使い分ける。 SSDSE 47 都道府県の SD は約 290 万 (人口)、 SE は 290万/√47 ≈ 42 万になる。
標準誤差 (SE) は「推定量の不確実性」を測る指標であり、 推定対象 (平均・割合・差・回帰係数 …) と データの取得方法 (単純標本・複雑抽出・時系列) によって計算式と推奨手法が変わる。 以下に典型シナリオと推奨 SE 計算法を示す。
| シナリオ | 重視する観点 | 推奨 SE 計算法 |
|---|---|---|
| 標本平均の SE が欲しい / 単純無作為標本 | 解析公式・正規近似 | SE = s/√n (s は標本 SD) |
| 割合 (比率) の SE が欲しい | 二項分布・離散値 | SE = √(p(1−p)/n) ・ Wilson 信頼区間 |
| 分布が歪む / 中央値や複雑な統計量 | 分布仮定なし・再標本化 | ブートストラップ SE (B=1000 以上) |
| 回帰係数の SE が欲しい | 分散均一性・正規性 | OLS SE / 不均一分散時は HC3 (robust SE) |
| クラスタ / 層化抽出データ | 独立性が崩れる | クラスタロバスト SE / 設計効果 (deff) 調整 |
| 時系列・自己相関あり | 系列依存・分散長期化 | Newey-West SE (HAC) |
標準偏差 (SD) と標準誤差 (SE) を一言で対比すると、 SD は「世界そのものの多様さ」、 SE は「その世界を私たちがどれだけ細かく測れているか」。 SD は母集団に固有の量で、 いくらデータを増やしても消えない(47 都道府県の人口はどこまで調べても東京都と鳥取県で桁が違う)。 一方 SE は「観測努力の関数」で、 n を増やすほど 0 に近づく。 前者は記述統計、 後者は推測統計の量であり、 この線引きが SD/SE 混同を防ぐ最初の鍵になる。
SE の定義は「もし同じ標本抽出を無限回繰り返したら、 標本平均 $\bar x$ はどれだけばらつくか」の標準偏差。 つまり SE = 標本平均という確率変数の SD。 本ページの 🎮 体感ラボ①で「1000 回抽出」した下段の山の幅がまさにこれで、 実測(1000 個の平均の SD)が理論値 $\sigma/\sqrt n$ とほぼ一致することを確かめられる。 「推定値そのものがブレる幅」を測っているから、 SE が小さい=別の標本を取っても結論が変わりにくい=精度が高い、 と読める。
2023 年の 47 都道府県総人口 A1101(skiprows=[1]・2023 抽出の実測)では、 SD ≈ 279.8 万人(県ごとの巨大な散らばり)に対し、 平均推定の SE ≈ 40.8 万人。 両者の比はちょうど $\sqrt{47} = 6.86$ 倍で、 公式 $SE = SD/\sqrt n$ と小数第 4 位まで一致する(6.8557)。 SD は「県の多様さ」、 SE は「47 県平均という 1 つの数字の不確実さ」で、 桁が 1 つ違う。
| 量 | 実測値(総人口 A1101, 2023) | 意味 | n を増やすと |
|---|---|---|---|
| SD | 2,797,551 人 | 県どうしの散らばり | 変わらない(母の性質) |
| SE = SD/√n | 408,065 人 | 平均推定のブレ幅 | √n で 0 へ縮む |
| SD/SE | 6.856 = √47 | 両者の橋渡し | √n に等しい(定義) |
| 相対 SE = CV/√n | 0.154(15.4%) | 平均に対する精度 | √n で縮む |
相対 SE(=変動係数 CV=1.057 を √47 で割った値)は「平均の推定は約 15% の相対誤差を持つ」と読める。 単位に依存しないので、 総人口・出生数・死亡数のように単位や桁が違う指標どうしでも「どの平均が相対的に精度よく測れているか」を横並び比較できる。
SE にまつわる誤りは大半が「本来より小さい SE を報告してしまう」方向に働く。 SE が小さいほど t 統計量 = 推定値/SE が大きくなり、 偽陽性(あるはずのない有意)を生むからだ。 最頻の誤りから順に整理する。
cov_type='cluster')や混合効果モデルで対処。cov_type='HC3')が現代の既定。 時系列の自己相関には Newey-West (HAC)。$SE=\sigma/\sqrt n$ という「大きさ」の式に対し、 中心極限定理は「形」を保証する。 元データの分布が歪んでいても(総人口は東京都のせいで強い右裾)、 標本平均 $\bar X$ の分布は n が増えると正規に近づく。 だからこそ「±1.96·SE で 95%」という正規近似の区間が使える。 逆に n が小さい・元分布が極端に歪むと近似が甘くなり、 t 分布やブートストラップが必要になる。 体感ラボ①下段の山が n が小さくても釣鐘型に見えるのは CLT の働きである。
SE は信頼区間の「幅の単価」。 総人口の実測では 95%CI = 264.6 万 ± 2.013×40.8 万 = (182.4, 346.7) 万人。 SE を半分にすれば CI 幅も半分。 これが「精度を CI に翻訳する蝶番」であり、 仮説検定の $t=\hat\theta/SE$、 p 値、 t 検定もすべて SE を分母に共有する。
| 状況 | 問題 | 頑健 SE | 実装 (statsmodels) |
|---|---|---|---|
| 不均一分散 | 残差分散が非一定 | HC0〜HC3 | cov_type='HC3' |
| グループ内相関 | クラスタで独立性崩壊 | クラスタ頑健 | cov_type='cluster' |
| 自己相関(時系列) | 系列依存 | Newey-West (HAC) | cov_type='HAC', cov_kwds={'maxlags':L} |
いずれも点推定 $\hat\beta$ は変えず、 「σ/√n が過小評価する不確実性を正しく測り直す」技術。 現代の実証研究では既定に近い。
推定量 $\hat\theta$ の関数 $g(\hat\theta)$ の SE は、 1 次テイラー展開で $SE(g(\hat\theta)) \approx |g'(\hat\theta)| \cdot SE(\hat\theta)$ と近似できる(デルタ法)。 例:対数変換なら $SE(\log\hat\theta)\approx SE(\hat\theta)/\hat\theta$、 オッズ比・比率・弾力性など「解析式はあるが直接分散が出しにくい量」に有効。 解析式が複雑すぎるときはブートストラップが代替になる。
比率 $\hat p$ の SE は $\sqrt{\hat p(1-\hat p)/n}$。 (実測)2023 年で「総人口 100 万人超の県」は 47 県中 37 県、 $\hat p=0.787$ なので SE $=\sqrt{0.787\times0.213/47}=0.060$(6.0 ポイント)。 世論調査の「±3 ポイント」は $1.96\times\sqrt{0.5\cdot0.5/1000}\approx0.031$ に由来し、 $\hat p=0.5$ で SE が最大化する(最悪ケース設計)。
検出力(真の差を有意と判定できる確率)は SE が小さいほど高い。 効果量 $\delta$、 有意水準 $\alpha$、 検出力 $1-\beta$ に対し必要 n は $n=(z_{\alpha/2}+z_\beta)^2\,2\sigma^2/\delta^2$ で、 SE を目標値まで下げる設計に等しい。 SE は「精度の入口」であり検出力・必要標本数の共通通貨になる。 関連: 検出力分析/サンプルサイズ/再現性。