論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
標準誤差
Standard Error (SE)
「標本平均がどれくらいブレるか」を測る量。標準偏差をサンプルサイズの平方根で割ったもの。
推測統計SESE標準誤差(SE)
📍 文脈💡 30秒結論📖 詳しく🎨 直感図📐 数式🔬 読み解き⚠️ 落とし穴🔗 関連用語

📍 あなたが今見ているもの

論文表で各係数の隣に出てくる「std err」「SE」の列。 p値や信頼区間の計算の出発点。

標準誤差 とは:「標本平均がどれくらいブレるか」を測る量。標準偏差をサンプルサイズの平方根で割ったもの。

💡 30秒で分かる結論

📖 もっと詳しく

標準誤差(Standard Error, SE)は「もし同じ調査を何度も繰り返したら、 推定値はどれくらいブレるか」を測る量です。 標準偏差(SD)と紛らわしいですが、 別物です。

SD vs SE

標本平均の SE は $\sigma/\sqrt{n}$ で計算され、 n が大きいほど小さくなります。 SD は n が変わっても変わりません(データの本質的な広がりだから)。

SE の用途:(i) 信頼区間 = 推定値 ± 1.96·SE、 (ii) t統計量 = 推定値 / SE、 (iii) Wald 検定の分母。 ほぼ全ての推測統計の中核です。

🎨 直感で掴む

標準誤差
標準誤差が大きいほど CI の「ひげ」が長くなる。 推定の不確実性が大きい状態。

📐 数式

【一般的な定義】
$$SE(\hat{\theta}) = \sqrt{\widehat{\mathrm{Var}}(\hat{\theta})}$$
推定量の分散の推定値の平方根。 平均なら $\sigma/\sqrt{n}$、 回帰係数なら別の式で計算

🔬 数式を「言葉」で読み解く

$\widehat{\mathrm{Var}}(\hat{\theta})$
推定量 $\hat{\theta}$ の分散の推定値
$\sigma$
母標準偏差(不明なので標本標準偏差 s で代用)
$n$
サンプルサイズ

⚠️ よくある落とし穴

❌ SE と SD(標準偏差)の混同
SD:個々のデータが平均からどれだけ散らばっているか
SE:平均値という統計量がどれだけブレるか
n が大きいと SE は 0 に近づくが、 SD はそうではない。 グラフで誤差棒を出すときも、 SD と SE のどちらかを明示すべき。
❌ ロバスト標準誤差を考慮しない
等分散性が破れている場合、 通常の SE は過小評価されることが多い。 Huber-White 型のロバスト標準誤差(statsmodels の 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}} $$

SSDSE 食料費の例

「47都道府県データから推定した母平均は、 ±0.852千円程度のばらつきで信頼できる」と読めます。

🎯 なぜ √n で割るのか?

中心極限定理(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))

🐍 Python での標準誤差

 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

🤖 機械学習での標準誤差

① 回帰係数のSE

線形回帰でも、 各係数 β_j の標準誤差が計算されます。 これを使って t統計量と p値が出ます:

$$ t_j = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} $$

② アンサンブルの予測SE

ランダムフォレストでは、 N本の木の予測の標準偏差が予測の不確実性(SE)として使えます。

③ ブートストラップによるSE

任意のモデルで、 ブートストラップサンプルから繰り返し学習・予測し、 その分散から SE を推定。

🚧 SE の落とし穴

1️⃣ SD と SE を混同しない

SD はデータの散らばり、 SE は推定値のばらつき。 グラフのエラーバーが SD か SE かは必ず明記。

2️⃣ サンプリングが独立か

σ/√n は独立同分布のサンプリングを前提。 時系列、 クラスター内データでは違う SE 公式が必要。

3️⃣ 小標本ではSEも不安定

n=5〜10 では、 s 自体がぶれるため SE もぶれます。 ブートストラップでより堅実な推定を。

📜 標準誤差の歴史

✅ 実務チェックリスト — 推測統計を使う前に

1. データの確認

2. 検定・推定の設計

3. 結果の報告

4. 解釈の注意

📚 推測統計を学ぶための重要文献

🆚 推測統計の主要用語 — 一目で分かる対比表

用語 記号 何を測る? 公式
標準偏差σ, 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 を計算

分布の仮定なしで 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))

scipy のブートストラップ機能

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}')

📐 クラスター・階層構造での SE

独立性が崩れる場合、 通常の σ/√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つの視点で体系を理解する

標準誤差 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。

📍 体系階層のパス

🌐 統計・データサイエンス推測統計推定標準誤差

① 🔗 関係マップ — 「他の手法とどう繋がっているか」

中心の概念から放射状に、 前提・兄弟・発展形・応用先などの関係性を矢印で結びます。 横の繋がりを見るのに最適。 ノードをドラッグ、 ホイールでズーム、 クリックで遷移

凡例:現在の用語上位カテゴリ兄弟(並列)前提発展形応用先2階層先

② ⭕ 包含マップ — 「どのカテゴリに含まれているか」

大きな円が小さな円を包含する Circle Packing 図。 「標準誤差」は緑色でハイライト

📍現在地:統計・データサイエンス

③ 🌳 ツリーマップ — 「面積で見るボリューム比較」

長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「標準誤差」は緑色でハイライト

🎯 3つのマップの使い分け

マップ 分かること こんな時に見る
🔗 関係マップ手法間の横の関係(前提→発展→応用)「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ分類体系の入れ子構造(上位⊃下位)「この手法はどんなジャンルに属する?」
🌳 ツリーマップ分野の規模比較(面積=ボリューム)「データサイエンス全体の俯瞰像」

💡 ジャストインタイム学習のヒント:3つの視点を行き来することで、 概念を多角的に理解できます。 包含マップやツリーマップはズーム/ドリルダウンで大分類から細部まで探索できます。

🔖 キーワード索引 — 拡張版

標準誤差(standard error, SE)に関する用語を、 標本統計量別・推定法・関連概念 別に索引化します。

カテゴリキーワード(日本語)キーワード(英語)
基本概念標準誤差、 標準偏差、 標本分布、 推定量の精度standard error, sampling distribution, precision
標本統計量別 SE平均のSE、 比率のSE、 回帰係数のSE、 差のSESE 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、 bootstrapscipy.stats.sem, statsmodels, pingouin, bootstrap

🧮 SSDSE-B での標準誤差 — 実値計算例

SSDSE-B から「47都道府県の平均所得」を1つの標本とみなし、 母平均の標準誤差を計算します。

① 基本統計量

統計量説明
n47標本サイズ
304 万円標本平均
SD59 万円標本標準偏差
SE = SD/√n59/√47 ≈ 8.6 万円平均の標準誤差

② 95%信頼区間

自由度 df = n − 1 = 46、 t₀.₀₂₅,₄₆ ≈ 2.013
CI = x̄ ± t · SE = 304 ± 2.013 × 8.6 = (286.7, 321.3)
母平均は95%の確率で この区間に含まれると解釈。

③ サンプルサイズと SE の関係

nSE95% CI 幅
1018.7±37.4
478.6±17.3
1005.9±11.8
10001.87±3.74

💡 n を4倍にしないと SE は半分にならない(SE は √n に反比例)。 精度を上げるコストは 非線形に増大 する。

⚠️ 標準誤差の落とし穴 — 拡張版(実務で本当に困る5+件)

  1. 標準偏差(SD)と標準誤差(SE)の混同:SD はデータのばらつきを表し、 標本サイズに依存しない。 SE は推定量(多くは標本平均)のばらつきを表し、 標本サイズが大きくなるほど小さくなる。 論文の表で「Mean ± SD」と「Mean ± SE」を混同すると、 ばらつきの見え方が10倍以上違うことも。 グラフのエラーバーがどちらかを必ず明記する。
  2. 独立性を満たさないデータでの誤計算:クラスター化されたデータ(同一学校の生徒、 同一地域の都市、 同一被験者からの繰り返し測定)に通常の SE 公式を使うと、 SE が 過小評価 される。 クラスター頑健標準誤差や階層モデルが必要。 ICC(クラス内相関)が0でない場合は標準のSEは信用できない。
  3. 不均一分散下での誤った推定:回帰係数の SE は誤差分散が一定(等分散)を仮定。 不均一分散(heteroscedasticity)があると SE が偏って計算される。 ロバスト標準誤差(HC0、 HC1、 HC2、 HC3)に切り替えるか、 加重最小二乗法(WLS)を使う。 statsmodels では cov_type='HC3' で指定。
  4. 時系列データでの自己相関無視:時系列で SE を計算する際、 残差の自己相関を無視すると過小評価される。 Newey-West 標準誤差や HAC(Heteroskedasticity and Autocorrelation Consistent)標準誤差を使う。 株価リターンや GDP データではほぼ必須の補正。
  5. 小標本での t 分布の自由度誤り:n が小さいとき正規近似ではなく t 分布を使うべき。 信頼区間の幅は自由度に依存。 自由度を計算ミスすると SE 自体は正しくても CI が不正確になる。 Welch の t 検定では Satterthwaite の自由度近似が必要。
  6. ブートストラップの誤用:時系列や階層データに通常のブートストラップを適用すると、 構造を壊して SE が誤って小さく出る。 ブロックブートストラップ、 階層ブートストラップなど構造に応じた方法を使う。
  7. SE を「真の値からの距離」と勘違い:SE は 推定値が標本ごとにどれだけ変動するか を表すもので、 「真の値から x ± SE の範囲にある」とは厳密には言えない。 95% CI を計算してこそ意味がある。 「推定値±SE」だけでは34%(≈ ±1σ)程度の信頼度しかない。

🐍 Python 実装バリエーション — scipy / statsmodels / pingouin / bootstrap

① scipy.stats.sem(最も簡単)

 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})')

② numpy で手動計算(教育目的)

 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}')

③ statsmodels(回帰係数のSE)

 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}')

⑤ pingouin(効果量・CI付き)

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()