論文表で各係数の隣に出てくる「std err」「SE」の列。 p値や信頼区間の計算の出発点。
標準誤差 とは:「標本平均がどれくらいブレるか」を測る量。標準偏差をサンプルサイズの平方根で割ったもの。
標準誤差(Standard Error, SE)は「もし同じ調査を何度も繰り返したら、 推定値はどれくらいブレるか」を測る量です。 標準偏差(SD)と紛らわしいですが、 別物です。
SD vs SE:
標本平均の SE は $\sigma/\sqrt{n}$ で計算され、 n が大きいほど小さくなります。 SD は n が変わっても変わりません(データの本質的な広がりだから)。
SE の用途:(i) 信頼区間 = 推定値 ± 1.96·SE、 (ii) t統計量 = 推定値 / SE、 (iii) Wald 検定の分母。 ほぼ全ての推測統計の中核です。

cov_type='HC1')を使うのが安全。標準誤差(standard error, SE)は、 「同じ母集団から何度も標本を取り、 標本平均を計算したときのばらつき」を表します。
左:データそのもののばらつき(標準偏差 σ)。
右:標本平均のばらつき(標準誤差 SE)— ずっと小さい。
💡 SE と SD は別物。 SD は「データ1個のばらつき」、 SE は「平均のばらつき」。 SE は SD より√n 倍小さい。
$$ 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 |
| 比率 | √(p(1-p)/n) |
| 2標本の平均差 | √(σ₁²/n₁ + σ₂²/n₂) |
| 回帰係数 | σ_ε / (√n × σ_x) |
| 相関係数 | √((1-r²)/(n-2)) |
| 分散 | σ² √(2/(n-1)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 もぶれます。 ブートストラップでより堅実な推定を。
| 用語 | 記号 | 何を測る? | 公式 |
|---|---|---|---|
| 標準偏差 | σ, s | データ1個のばらつき | √(Σ(x-x̄)²/(n-1)) |
| 標準誤差 | SE | 推定値のばらつき | σ/√n |
| 信頼区間 | CI | 真値の入る範囲 | x̄ ± z·SE |
| p値 | p | 偶然この結果が出る確率 | P(|T| ≥ |t_obs| | H₀) |
| 有意水準 | α | Type I 誤り許容率 | 通常 0.05 |
| 検出力 | 1-β | 真の差を検出する確率 | 1 - Pr(Type II error) |
| 効果量 | d, r, R² | 差の大きさ | Cohen's d = (μ₁-μ₂)/σ |
| サンプルサイズ | n | 標本数 | power analysisで決定 |
分布の仮定なしで SE を推定する強力な方法。 任意の統計量(中央値、 四分位、 機械学習の予測など)に適用可能:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import numpy as np def bootstrap_se(data, statistic=np.mean, n_bootstrap=1000): n = len(data) boot_stats = [] for _ in range(n_bootstrap): sample = np.random.choice(data, size=n, replace=True) boot_stats.append(statistic(sample)) return np.std(boot_stats, ddof=1) se_mean = bootstrap_se(data, np.mean) se_median = bootstrap_se(data, np.median) # 中央値のSEも! se_q90 = bootstrap_se(data, lambda x: np.percentile(x, 90)) |
1 2 3 4 | from scipy.stats import bootstrap result = bootstrap((data,), np.mean, n_resamples=10000, confidence_level=0.95) print(f'SE: {result.standard_error:.4f}') print(f'95%CI: {result.confidence_interval}') |
独立性が崩れる場合、 通常の σ/√n では SE を過小評価。 例:
クラスター ロバスト標準誤差(CR-SE)や混合効果モデルで対処。
1 2 3 4 5 | import statsmodels.api as sm # クラスター ロバストSE model = sm.OLS(y, X).fit(cov_type='cluster', cov_kwds={'groups': cluster_id}) print(model.bse) # クラスター調整後のSE |
標準誤差 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
🌐 統計・データサイエンス › 推測統計 › 推定 › 標準誤差
中心の概念から放射状に、 前提・兄弟・発展形・応用先などの関係性を矢印で結びます。 横の繋がりを見るのに最適。 ノードをドラッグ、 ホイールでズーム、 クリックで遷移。
大きな円が小さな円を包含する Circle Packing 図。 「標準誤差」は緑色でハイライト。
長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「標準誤差」は緑色でハイライト。
| マップ | 分かること | こんな時に見る |
|---|---|---|
| 🔗 関係マップ | 手法間の横の関係(前提→発展→応用) | 「次に何を学べばよい?」 学習順序の判断 |
| ⭕ 包含マップ | 分類体系の入れ子構造(上位⊃下位) | 「この手法はどんなジャンルに属する?」 |
| 🌳 ツリーマップ | 分野の規模比較(面積=ボリューム) | 「データサイエンス全体の俯瞰像」 |
💡 ジャストインタイム学習のヒント:3つの視点を行き来することで、 概念を多角的に理解できます。 包含マップやツリーマップはズーム/ドリルダウンで大分類から細部まで探索できます。
標準誤差(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 |
SSDSE-B から「47都道府県の平均所得」を1つの標本とみなし、 母平均の標準誤差を計算します。
| 統計量 | 値 | 説明 |
|---|---|---|
| n | 47 | 標本サイズ |
| x̄ | 304 万円 | 標本平均 |
| SD | 59 万円 | 標本標準偏差 |
| SE = SD/√n | 59/√47 ≈ 8.6 万円 | 平均の標準誤差 |
自由度 df = n − 1 = 46、 t₀.₀₂₅,₄₆ ≈ 2.013
CI = x̄ ± t · SE = 304 ± 2.013 × 8.6 = (286.7, 321.3)
母平均は95%の確率で この区間に含まれると解釈。
| n | SE | 95% CI 幅 |
|---|---|---|
| 10 | 18.7 | ±37.4 |
| 47 | 8.6 | ±17.3 |
| 100 | 5.9 | ±11.8 |
| 1000 | 1.87 | ±3.74 |
💡 n を4倍にしないと SE は半分にならない(SE は √n に反比例)。 精度を上げるコストは 非線形に増大 する。
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-2024.csv', encoding='shift_jis', skiprows=1) x = df['平均所得'] 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-2024.csv', encoding='shift_jis', skiprows=1) x = df['平均所得'].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-2024.csv', encoding='shift_jis', skiprows=1) X = sm.add_constant(df[['教育支出']]) y = df['平均所得'] # 通常の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['地域']}) 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-2024.csv', encoding='shift_jis', skiprows=1) x = df['平均所得'].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='地域', y='平均所得', estimator='mean', errorbar=('ci', 95)) # 自動で SE→CI plt.show() |