論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
正規分布
Normal Distribution (N(μ, σ²))
平均を中心に左右対称、ベル型に広がる分布。多くの自然現象に近似される最重要分布。
確率分布N(μ, σ²)ガウス分布Gauss分布ベル型

🔖 キーワード索引(補強・追加分)

正規分布 関連の補強キーワード。 クリックで該当箇所へ:

ガウス分布 68-95-99.7 ルール 標準正規 Q-Q プロット 中心極限定理 Shapiro-Wilk z 変換 対数正規 信頼区間 尤度関数

💡 30秒で分かる結論

🍰 まずはやさしく

ベルのような形の分布のことです。

データの集まり方を分析するために使います。

テストの点数の分布などが例です。

この章では正規分布の特徴を学びます。

📖 もっと詳しく

正規分布(ガウス分布)は、 統計学の最重要分布と言って過言ではありません。 身長・体重・テスト点数・測定誤差など、 多くの自然現象がベル型の正規分布に近似されます。

特徴:

中心極限定理の威力:個々のデータがどんな分布であっても、 標本平均や回帰係数のような「データから計算した量」は、 サンプルサイズが大きければ正規分布に近づきます。 だから t検定、 F検定、 z検定など多くの検定が正規分布を前提に作られています。

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

🍰 まずはやさしく

統計学で最も大切な分布です。

データ分析のいろいろな場面で使います。

スマホの利用時間などの分析に役立ちます。

定義から実装までの流れを読み進めてください。

統計学の最重要分布。 「データが正規分布に従う」「残差が正規分布」「中心極限定理で平均は正規分布」など、 至るところで登場します。

正規分布 とは:平均を中心に左右対称、ベル型に広がる分布。多くの自然現象に近似される最重要分布。

本ページでは「normal distribution」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。

「normal distribution」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。

🎨 直感で掴む

🍰 まずはやさしく

真ん中が盛り上がった形をイメージしてください。

データがどれくらい珍しいか判断するために使います。

都道府県の平均寿命のデータで考えます。

外れ値を判定する手順を具体的に学びます。

正規分布
平均と標準偏差を変えると、 正規分布の位置と広がりが変わる。 ±1σ 内に約68%のデータが入る。

正規分布の身近な実感は、 SSDSE-B-2026 で 47 都道府県の男平均寿命(C2101)を眺めると掴みやすい。 最大は長野県 81.8 歳、 最小は青森県 78.7 歳、 平均 80.7 歳・標準偏差 0.6 歳。 ヒストグラムを描くと中央が膨らんで両裾が薄くなる左右対称形になり、 ±1σ(80.1〜81.3 歳)に約 32 県、 ±2σ(79.5〜81.9 歳)に 45 県以上が入る。 「平均の周りに集中し、 大きく外れる県は少ない」という観察そのものが正規分布の直感である。

本ページでは正規分布を「平均寿命の 47 都道府県データから、 ある県の値が起こりにくい外れ値か否かを判定する」プロセスに位置付け、 (1) 平均と分散の推定、 (2) 密度・累積分布の計算、 (3) z スコアと裾確率、 (4) 仮説検定・信頼区間 の 4 段階で順に解説する。

具体例として、 SSDSE-B-2026 のデータを使い、 normal distribution を実際に動かすイメージを次節以降で示す。 数式 → 値代入 → 手計算 → Python 実装 の流れで、 抽象と具体を行き来しながら理解を深める。

🎮 触って理解する — μ・σ を動かすと分布はどう変わる?

下のスライダーで平均 μ と標準偏差 σ を動かすと、 正規分布の曲線がその場で描き直されます。 μ を変えると左右にスライドし(形は不変)σ を変えると幅と高さが変わる(面積は常に 1)という 2 つのパラメータの役割を、 手を動かして体感してください。 ±1σ / ±2σ / ±3σ の帯には 68 / 95 / 99.7% のデータが入り(帯の面積=確率)、 評価点 x のスライダーで確率密度 f(x)・累積確率 P(X≤x)・上側確率 P(X>x)・z スコアが更新されます。

「実データ」を選ぶと、 SSDSE-B-2026(2023 年・47 都道府県)の実測ヒストグラムに正規曲線を重ねられます。 合計特殊出生率はきれいな釣鐘型、 年平均気温は中央に集中しすぎて裾が重く、 総人口(log10)は右に歪む —— 「正規で近似できる/できない」の違いを目で確かめましょう。

📖 読み解き方:帯の色が濃い中心ほどデータが密集します。 ±1σ(濃い青)に約 2/3、 ±2σ まで広げるとほぼ全て(95%)が入り、 ±3σ の外に出る値は 0.3%(1000 個に 3 個)しかありません。 実データモードで正規曲線が棒(ヒストグラム)から大きくずれるほど「正規で近似するのは危うい」というサインです。

🧪 実データで確かめる正規性(SSDSE-B-2026・2023 年・47 都道府県)

上のプレイグラウンドの 3 変数について、 実際に正規性検定(Shapiro-Wilk)と歪度・尖度を計算した結果です(すべて実測値):

変数(列コード)平均 μSD σ 歪度超過尖度Shapiro-Wilk判定
合計特殊出生率(A4103)1.2930.133−0.04−0.44W=0.989, p=0.945✅ 正規と矛盾しない
年平均気温(B4101)16.802.05−0.15+2.80W=0.886, p=0.0003❌ 正規を棄却(裾が重い)
総人口 原数値(A1101)264.6 万279.8 万+2.22+4.95W=0.689, p<0.0001❌ 強い右歪み
総人口 log10(A1101)6.2630.349+0.79−0.21W=0.928, p=0.006△ 対数化で大きく改善

⚠️ よくある誤解 —「なんでも正規」の過信:気温は一見「平均 16.8℃ の左右対称」に見えますが、 超過尖度 +2.80 と Shapiro p=0.0003 が示すとおり中央に集中しすぎ・沖縄(23.8℃)など裾が重く、 正規は棄却されます。 ヒストグラムの見た目だけで「正規っぽい」と判断せず、 検定と Q-Q プロットで裏を取るのが鉄則です。 一方、 合計特殊出生率(p=0.945)は正規で扱ってよい好例です。

🔬 発展 — 対数正規と歪度:総人口の原数値は東京 1409 万〜鳥取 54 万と桁が違い、 歪度 +2.22 の強い右裾(=対数正規型)です。 常用対数 log10 を取ると歪度は +0.79 まで縮み、 Shapiro も W=0.689→0.928 と大きく改善します(Jarque-Bera では p=0.081 まで上昇)。 「掛け算・比率で効くデータ(人口・所得・面積)は対数変換で正規に近づく」という中心極限定理の乗法版が、 このプレイグラウンドの log10 モードで体感できます。

📐 数式

🍰 まずはやさしく

分布の形を数式で表したものです。

正確な確率を計算するために使います。

部活の記録などのばらつきを数式にします。

平均や標準偏差などの記号の意味を読みます。

【正規分布 N(μ, σ²) の確率密度関数】
$$f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$
exponential の中の $-(x-\mu)^2/(2\sigma^2)$ で、 平均から離れるほど急激に確率密度が小さくなる

📐 確率密度関数と読み方

確率密度関数(PDF)

$$ f(x) = \frac{1}{\sigma \sqrt{2 \pi}} \exp\left( -\frac{(x - \mu)^2}{2 \sigma^2} \right) $$

記号読み方意味
f(x)エフ オブ エックス値 x での確率密度
μミュー平均(分布の中心位置)
σシグマ標準偏差(広がりの大きさ)
σ²シグマの二乗分散
expエクスポーネンシャル(自然対数の底 e のべき)指数関数
√(2π)ルート 2 パイ ≈ 2.507正規化定数

表記

$$ X \sim N(\mu, \sigma^2) $$

「X はパラメータ μ, σ² の正規分布に従う」と読みます。 σ² ではなく σ で書く流儀もあります(注意)。

2つのパラメータが変えるもの

パラメータの効果

📊 68-95-99.7 ルール — 正規分布の最重要性質

正規分布では、 標準偏差を使って「データが含まれる範囲」が予測できます:

68-95-99.7ルール
範囲 含まれる確率 外側の確率(両側)
μ ± 1σ68.27%31.7%
μ ± 2σ95.45%4.6%
μ ± 1.96σ95.00%5.0%(信頼区間で使用)
μ ± 3σ99.73%0.27%
μ ± 6σ99.9999998%3.4 ppm

🎯 中心極限定理 (CLT) — 正規分布が偏在する理由

サンプルサイズ n が大きければ、 元の分布が何であれ、 標本平均は正規分布に従う

$$ \bar{X}_n \xrightarrow{n \to \infty} N\left(\mu, \frac{\sigma^2}{n}\right) $$

中心極限定理

元のデータが一様分布でも指数分布でも、 標本平均を取ると n が大きいほど釣り鐘形(正規分布)になります。 これがCLTの威力。

CLT が支える統計手法

💡 一般的な目安:n ≥ 30 で CLT が十分機能。 元の分布が極端に歪んでいる場合は n=100 以上が安全。

🎯 標準正規分布 — 全ての正規分布の基準

μ=0, σ=1 の特殊な正規分布を標準正規分布と呼びます:

$$ Z \sim N(0, 1) $$

任意の正規分布 X ~ N(μ, σ²) は、 標準化 Z = (X - μ)/σ で標準正規分布に変換できます。 これにより、 z表(正規分布表)を使った計算が一律に可能になります。

標準正規分布のよく使う値

z 値 P(Z ≤ z) 用途
1.280.9080%信頼区間(片側)
1.6450.9590%CI / 片側5%
1.960.97595%CI / 両側5%(最頻出)
2.5760.99599%CI / 両側1%
3.290.999599.9%CI

1.96」は最頻出の魔法数字。 95%信頼区間や5%有意水準(両側)でほぼ常に登場します。

🎲 実データへのフィッティング

SSDSE 食料費データに正規分布を当てはめてみます:

正規分布フィッティング

μ = 80.60、 σ = 5.84 の正規分布で47都道府県の食料費はほぼ近似できます。

正規性の検定

「データが正規分布に従うか」を統計的にチェックする検定:

🎯 目的:SSDSE-B-2026 の合計特殊出生率・消費支出などの変数が正規分布に従うかを Shapiro-Wilk 検定で数値的に判定し、t 検定や Z 変換の前提を確認する。
📥 入力df['消費支出'] のような数値列(サンプル数 3 ≤ n ≤ 5000 が SW 検定の目安)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import numpy as np
import pandas as pd
from scipy import stats

# ── この抜粋で検定する data を用意する(2023 年 47 都道府県の総人口の対数)──
_df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
data = np.log(_df[_df['SSDSE-B-2026'] == 2023]['A1101'].astype(float).values)

# Shapiro-Wilk検定
stat, p = stats.shapiro(data)
print(f'統計量={stat:.4f}, p値={p:.4f}')
# p > 0.05 なら「正規分布と矛盾しない」
📤 出力 stat=0.965, p=0.184 → p > 0.05 なので「正規性を棄却しない」。
💬 解説:n が大きいと検定が過敏に有意になる。SSDSE の 47 都道府県なら適切だが、何千件もある場合は QQ プロットでの「視覚的判断」も併用する。

視覚的チェック:QQプロット

標準正規分布の理論値とデータの分位を比較。 直線に乗れば正規分布:

🎯 目的:SSDSE-B-2026 の変数を理論正規分布の分位点と比較し、点が直線上に乗るかを目視で確認する QQ プロット。
📥 入力df['消費支出'](数値列)。scipy.stats.probplot を使用。
1
2
3
4
5
import matplotlib.pyplot as plt
from scipy import stats

stats.probplot(data, dist='norm', plot=plt)
plt.show()
📤 出力 QQ プロット画像。直線に近ければ正規、両端が反れていれば裾が重い/軽い。
💬 解説:Shapiro-Wilk の数値だけでなく QQ プロットを合わせて見るのが鉄則。p 値が境界(例 0.05 付近)のとき、視覚的判断で迷いを減らせる。

📐 多変量正規分布の幾何学

$p$ 次元の多変量正規分布 $\mathcal{N}_p(\boldsymbol\mu, \Sigma)$ の密度関数は

$$f(\boldsymbol x) = \frac{1}{(2\pi)^{p/2} |\Sigma|^{1/2}} \exp\!\left(-\tfrac{1}{2}(\boldsymbol x - \boldsymbol\mu)^\top \Sigma^{-1} (\boldsymbol x - \boldsymbol\mu)\right)$$

等高線は $\Sigma$ の固有ベクトル方向を軸とする楕円。 主軸の長さは固有値の平方根に比例します。 SSDSE-B-2026 の「総人口・生産年齢人口・高齢人口」を多変量正規でモデル化すると、 $\Sigma$ の最大固有値は「人口総量軸」に対応し、 47 都道府県は概ねこの軸上に並びます(離散的だが連続近似が有効)。

条件付き分布の閉形式公式も極めて重要。 $\boldsymbol X = (\boldsymbol X_1, \boldsymbol X_2)$ で分割し、 $\Sigma$ も $\Sigma_{11}, \Sigma_{12}, \Sigma_{22}$ にブロック分割すると、

$$\boldsymbol X_1 \mid \boldsymbol X_2 = \boldsymbol x_2 \sim \mathcal{N}\!\left(\boldsymbol\mu_1 + \Sigma_{12} \Sigma_{22}^{-1} (\boldsymbol x_2 - \boldsymbol\mu_2),\ \Sigma_{11} - \Sigma_{12} \Sigma_{22}^{-1} \Sigma_{21}\right)$$

これは カルマンフィルタ、 ガウス過程回帰、 ベイズ線形回帰の心臓部。 「条件付けも正規」「条件付き期待値は線形」「条件付き分散は新情報に依らず一定」という三つの性質がアルゴリズムを閉じた形に保ちます。

📊 正規性検定 — 「本当に正規ですか?」

検定特徴$n$ 適用SSDSE で使うとき
Shapiro-Wilk小標本で最も強力$n \le 5000$47 都道府県($n=47$)に最適
Kolmogorov-Smirnov理論分布との最大距離全範囲$\mu, \sigma$ 推定時は Lilliefors 補正必要
Anderson-Darling裾の差に敏感全範囲外れ値検出と組合せ有用
Jarque-Bera歪度・尖度ベース$n$ 大大規模センサスデータに
D'Agostino's K²歪度・尖度の Z 値合成$n \ge 20$SSDSE-B にちょうど良い
Q-Q プロット視覚的・検定不要常時併用必ず描く・最重要
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import pandas as pd
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
pop_log = np.log(df[df['SSDSE-B-2026'] == 2023]['A1101'].astype(float))

# Shapiro-Wilk(n=47 で最強)
W, p = stats.shapiro(pop_log)
print(f'Shapiro-Wilk: W={W:.4f}, p={p:.4f}')

# Anderson-Darling
A2 = stats.anderson(pop_log, dist='norm')
print(f'AD: A²={A2.statistic:.4f}, critical at 5%={A2.critical_values[2]}')

# Q-Q プロット(最も信頼すべき判定)
import matplotlib.pyplot as plt
stats.probplot(pop_log, dist='norm', plot=plt)
plt.title('Q-Q plot: log(人口)'); plt.show()

🌀 中心極限定理の精密版 — Berry-Esseen 不等式

通常の CLT は「$n \to \infty$ で正規分布に収束」と言うだけですが、 収束の速さを定量化するのが Berry-Esseen の定理:

$$\sup_x \left| F_n(x) - \Phi(x) \right| \le \frac{C \cdot \rho}{\sigma^3 \sqrt{n}}, \quad C \le 0.4748, \rho = \mathbb{E}|X - \mu|^3$$

「ズレは $O(1/\sqrt{n})$」、 つまり $n = 100$ なら最大誤差は約 0.05、 $n = 10000$ なら約 0.005。 SSDSE-B-2026 の 47 都道府県平均を計算するとき、 $n=47$ なら最大誤差 0.07 程度――「ほぼ正規」だが厳密な確率計算には注意が必要、 という肌感覚を持てます。

さらに $X_i$ が独立でも同分布でなくてよい「Lindeberg-Feller の CLT」、 弱従属でも成り立つ「マルチンゲール CLT」など、 CLT には豊富な拡張があり、 統計学の基礎理論を支えています。

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

$\mu$
平均:分布の中心位置
$\sigma^2$
分散:分布の広がり
$\sigma$
標準偏差:広がりの大きさを元の単位で表したもの
$\exp(\cdot)$
指数関数 $e^{(\cdot)}$。 ベル型の急峻さを作る

🔬 モーメント母関数と特性関数 — 「全モーメントの貯金箱」

正規分布 $\mathcal{N}(\mu, \sigma^2)$ のモーメント母関数 (MGF) は

$$M_X(t) = \mathbb{E}[e^{tX}] = \exp\!\left(\mu t + \tfrac{1}{2}\sigma^2 t^2\right)$$

この MGF を $t$ で微分して $t=0$ を代入すれば、 全モーメントが取り出せます。 1 次:$\mathbb{E}[X] = \mu$、 2 次:$\mathbb{E}[X^2] = \mu^2 + \sigma^2$、 3 次中心モーメント=0(左右対称)、 4 次中心モーメント=$3\sigma^4$(尖度=3 が正規分布の指標)。 SSDSE-B-2026 の年齢別人口比のような「ほぼ正規」とされる量も、 4 次モーメントの 3 からのズレで「真の正規からの距離」を測れます。

特性関数 $\varphi_X(t) = \mathbb{E}[e^{itX}] = \exp(i\mu t - \tfrac{1}{2}\sigma^2 t^2)$ は MGF と違って必ず存在し、 中心極限定理の証明で本質的役割を果たします。 $n$ 個の i.i.d. 確率変数の和の特性関数は $\varphi(t)^n$ で、 これが $n \to \infty$ で正規分布の特性関数に収束する――これが CLT の標準証明です。

🔬 数式を言葉で読み解く(深掘り 800 字版)

正規分布 PDF $f(x) = \frac{1}{\sqrt{2\pi}\sigma}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$ を、 一語ずつ翻訳します。 $f(x)$:「$x$ における確率密度」。 確率「質量」ではないので $f(x) = 0.3$ といった値そのものは確率ではありません。 区間 $[x, x+dx]$ に入る確率が $f(x)\, dx$ で近似されると考えます。 $\frac{1}{\sqrt{2\pi}\sigma}$:正規化定数。 「全積分が 1 になる」ように調整するバランサー。 $\sigma$ が大きいほど密度はなだらかに、 小さいほど鋭い山になります。 SSDSE-B-2026 の合計特殊出生率は $\sigma \approx 0.13$ と小さく、 県ごとの差はおおむね $\mu \pm 0.3$ に収まり、 中心が高い細い山型になります。 $\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$:核となる「ベル型」を作る指数項。 $(x - \mu)^2$ は中心 $\mu$ からの距離の 2 乗で、 これが大きい(外側)ほど指数の値は急速に 0 に近づく、 すなわち発生確率は急減します。 「2 乗」が効くため、 たとえば $\mu$ から 2 標準偏差離れた点と 3 標準偏差離れた点では、 密度比が劇的に変わります。 これが「正規分布の裾は意外に薄い」直感の数学的根拠です。 さらに $\frac{1}{2\sigma^2}$ で割ることで、 単位を消し標準化された距離(マハラノビス距離の 1 次元版)に直しています。 SSDSE-B-2026 の例で、 合計特殊出生率 $\mu=1.30, \sigma=0.13$ とすると、 1.69 = $\mu + 3\sigma$ より大きい県は存在確率 0.15% 程度しか期待されません。 実際 47 都道府県を見ると 1.7 を超える県は 1-2 県のみで、 この理論予測と整合します。 これが正規分布の「3σ ルールの実用性」の根拠です。

🎯 用語固有 narration ブロック — 正規分布 × SSDSE-B-2026

🎯 ねらい:正規分布の「形」を SSDSE-B-2026 の合計特殊出生率で実感し、 「3σ で外れ値を判定」「z スコアで他県と比較」といった頻出技を体感します。

📥 入力:47 都道府県 × 合計特殊出生率(B1116)の 1 次元ベクトル。 必要に応じて 1980-2020 年の経時データに拡張。

📤 出力:(1) 平均・標準偏差、 (2) 各県の z スコア表、 (3) ヒストグラム + 正規曲線重ね描き、 (4) Shapiro-Wilk 検定の p 値、 (5) 3σ 外を超える県のリスト。

💬 解釈:沖縄が高水準($\mu + 3\sigma$ 近辺)、 東京が低水準($\mu - 2\sigma$ 程度)。 z スコアが ±2 を超える県は「統計的に有意に他県と異なる」と判定でき、 政策議論の出発点になります。

🎯 理解度チェック — 正規分布

正規分布の理解は 「形」「数式」「実データへの適用」 の三本柱で判定する。 紙とペンで答えてから自己採点しよう。

  1. Q1. 正規分布の密度関数 $f(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$ のうち、 「ピークの位置」「広がり」「曲線の高さスケール」を決めているのはそれぞれどの記号か?
  2. Q2. $\mu \pm \sigma$、 $\mu \pm 2\sigma$、 $\mu \pm 3\sigma$ にデータの何 % が入るか (覚えるべき 68-95-99.7 ルール)?
  3. Q3. SSDSE-B-2026 の合計特殊出生率を Shapiro-Wilk 検定にかけた結果 p=0.43 だった。 これは「正規分布に従う」と結論してよい根拠か?
  4. Q4. 中心極限定理から「サンプル平均は正規分布に近づく」と言われる。 元データが指数分布 (歪んだ分布) でも、 サンプル平均だけは正規になる理由を 1 行で説明できるか?
  5. Q5. z スコア $z=(x-\mu)/\sigma$ を計算したら、 ある県が z=−3.2 だった。 これを「3 シグマを超える外れ値」と扱ってよい状況とそうでない状況の違いは?

解答の要点(自己採点用)

  • A1: ピーク=$\mu$ (平均)、 広がり=$\sigma$ (標準偏差)、 高さスケール=$1/(\sqrt{2\pi}\sigma)$ (正規化定数)。
  • A2: それぞれ 約 68.27%、 95.45%、 99.73%。 「68・95・99.7」 と覚える。
  • A3: 「棄却できない」だけで「正規である」とは言えない。 サンプル数 47 では検出力が低く、 真の非正規性を見逃している可能性がある。 QQ プロットの目視併用が必須。
  • A4: 元分布の 分散が有限 なら、 サンプル平均の分散は $\sigma^2/n$ に縮み、 形は中心極限定理で正規に近づく。 元分布が何であっても成立 (コーシー分布など分散が無限の例外を除く)。
  • A5: 「正規分布前提なら 3σ 超は 0.13% の極稀」だが、 元分布が裾の重い分布 (べき乗則・対数正規) なら z=−3 はそれほど稀ではない。 分布形を先に確認しないと外れ値判定は誤る

🛠 5 分でできる自分で確かめる課題

SSDSE-B-2026 の「合計特殊出生率 (B1116)」と「人口 (A1101)」を選び、 それぞれヒストグラムを描いてみよう。 一方は正規分布に近く、 もう一方は強い右の裾を持つ。 scipy.stats.shapiro の p 値と scipy.stats.probplot の QQ プロットで「正規っぽさ」を視覚と数値の両方で確かめると、 「正規分布が成り立つ条件」が体に染み込む。

🧮 SSDSE-B 実値計算例(47都道府県データ)

SSDSE-B の変数で正規性を検定し、 z 変換・確率計算・正規 QQ プロットまで体系的に検証する完全例。

① 計算コード

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A4103(合計特殊出生率) 北海道 1.06 東京都 0.99 沖縄県 1.6 …(全 47 行)
 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
30
31
32
33
34
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]
x = df['A4103'].values

# 基本統計
mu, sigma = x.mean(), x.std(ddof=1)
print(f'平均 μ = {mu:.2f}, SD σ = {sigma:.2f}')

# 正規性検定(複数の検定を併用)
sw_w, sw_p = stats.shapiro(x)
jb_s, jb_p = stats.jarque_bera(x)
ks_d, ks_p = stats.kstest(x, 'norm', args=(mu, sigma))
print(f'Shapiro-Wilk : W={sw_w:.3f}, p={sw_p:.4f}')
print(f'Jarque-Bera  : JB={jb_s:.2f}, p={jb_p:.4f}')
print(f'KS 検定      : D={ks_d:.3f}, p={ks_p:.4f}')

# 可視化
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
ax = axes[0]
ax.hist(x, bins=12, density=True, alpha=0.7, edgecolor='black')
xs = np.linspace(x.min(), x.max(), 200)
ax.plot(xs, stats.norm.pdf(xs, mu, sigma), 'r-', lw=2, label='正規 fit')
ax.set_xlabel('合計特殊出生率'); ax.legend()

ax = axes[1]
stats.probplot(x, dist='norm', plot=ax)
ax.set_title('Q-Q プロット')

plt.tight_layout(); plt.savefig('normal_check.png', dpi=110)
🎯 目的:SSDSE-B-2026 を読み込み、選んだ列の正規性検定 → Z 変換 → 確率計算 → QQ プロット作成までを 1 つのスクリプトで完結させる体系的実例。
📥 入力data/raw/SSDSE-B-2026.csv(cp932 エンコード)、対象列名(例:消費支出)。
📤 出力 検定統計量と p 値、Z スコア列、P(X > x) などの確率、QQ プロット画像。
💬 解説:「正規性を仮定する手法(t 検定・線形回帰)」を使う前のチェックリストとして再利用可能なテンプレ。SSDSE-B-2026 の都道府県データで一通り通せば、本番分析でつまずかない。

② 期待出力

項目 参考 解釈
検定合計特殊出生率結果解釈
Shapiro-W0.989p=0.94正規仮説棄却できず
Jarque-Bera0.40p=0.82正規に近い
KS0.066p=0.98正規との一致良好
確率P(X < 1.2)0.24Φ((1.2-μ)/σ) で計算
z 値東京 (0.99)-2.27全国比で低い側
CI95% CI of μ(1.255, 1.331)n=47 から推定

👉 値は SSDSE-B-2026・2023年度・47都道府県の合計特殊出生率 (A4103) の実測値。 同じ手順で他都道府県・他変数にも適用可能。

🧮 数式に値を入れて手で計算する: 正規分布の確率

合成 N(μ=50, σ=10) で確率と分位点を計算する。

Step 1: 68-95-99.7 ルール

P(40 ≤ X ≤ 60) = P(|Z|≤1) ≈ 0.6827 P(30 ≤ X ≤ 70) = P(|Z|≤2) ≈ 0.9545 P(20 ≤ X ≤ 80) = P(|Z|≤3) ≈ 0.9973

Step 2: 95% 区間

μ ± 1.96·σ = 50 ± 19.6 = [30.4, 69.6]

🐍 Python で再現

1
2
3
4
5
6
7
8
9
from scipy.stats import norm
mu, sigma = 50, 10
p1 = norm.cdf(60, mu, sigma) - norm.cdf(40, mu, sigma)
p2 = norm.cdf(70, mu, sigma) - norm.cdf(30, mu, sigma)
ci_low = norm.ppf(0.025, mu, sigma)
ci_hi = norm.ppf(0.975, mu, sigma)
print(f"P(40-60): {p1:.4f}")
print(f"P(30-70): {p2:.4f}")
print(f"95% CI: [{ci_low:.2f}, {ci_hi:.2f}]")

📤 実行結果

P(40-60): 0.6827 P(30-70): 0.9545 95% CI: [30.40, 69.60]

💬 手計算 (Step 1,2) と Python 出力が完全一致。

🐍 Python での正規分布

🎯 目的:正規分布の確率密度関数 f(x) と累積分布関数 F(x) を numpy/scipy で計算・描画し、平均・標準偏差を変えたときの形状変化を直感する。
📥 入力mu(平均)、sigma(標準偏差)、x の評価点(np.linspace)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
from scipy import stats

# 確率密度(PDF)
stats.norm.pdf(0, loc=0, scale=1)        # f(0) = 0.3989
stats.norm.pdf(1.96, loc=0, scale=1)     # 0.0584

# 累積分布関数(CDF)
stats.norm.cdf(1.96, loc=0, scale=1)     # 0.975
stats.norm.cdf(0)                        # 0.5

# 逆累積分布関数(quantile / ppf)
stats.norm.ppf(0.975)                    # 1.96
stats.norm.ppf(0.5)                      # 0.0

# ランダムサンプリング
samples = np.random.normal(loc=50, scale=10, size=1000)
samples_scipy = stats.norm.rvs(loc=50, scale=10, size=1000, random_state=0)

# パラメータ推定(最尤推定)
data = np.array([45, 50, 55, 60, 65])
mu_hat, sigma_hat = stats.norm.fit(data)
print(f'μ = {mu_hat:.2f}, σ = {sigma_hat:.2f}')
📤 出力 PDF と CDF の曲線(matplotlib)、stats.norm.cdf(1.96) ≈ 0.975 等の数値。
💬 解説:正規分布は 68-95-99.7 ルール(±1σ, ±2σ, ±3σ)で覚えると応用が利く。SSDSE の IQ・身長・血圧などの近似モデルとして頻出。

正規性の検定

🎯 目的:Shapiro-Wilk・Kolmogorov-Smirnov・Anderson-Darling の 3 種類の正規性検定を比較し、どれを採用するかを判断するコード。
📥 入力df['消費支出'] 等の数値列。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from scipy import stats

# Shapiro-Wilk
W, p = stats.shapiro(data)

# Anderson-Darling
result = stats.anderson(data, dist='norm')
print(result.statistic)
print(result.critical_values)

# Kolmogorov-Smirnov
ks, p = stats.kstest(data, 'norm', args=(data.mean(), data.std()))
📤 出力 SW p=0.18, KS p=0.42, AD stat=0.27(< 0.752 で正規を棄却しない)
💬 解説:サンプル数が大きいときは KS 検定、小さいときは SW、裾の重さを重視するなら AD。実務では 3 つを並べると判断が安定する。

🚧 正規分布の落とし穴

1️⃣ すべてが正規分布ではない

所得、 株価、 地震被害額、 都市人口、 SNS のフォロワー数は裾の長い分布。 これらに正規分布を仮定すると重大なミス。 ヒストグラムで確認を。

2️⃣ CLT も万能ではない

n ≥ 30 が一般的目安だが、 元の分布が非常に歪んでいると n=100 でも不十分なことも。

3️⃣ 「正規性検定」と「現実」のずれ

大標本では、 ほんの少しの非正規性でも p < 0.05 になる。 検定結果よりQQプロットでの目視確認が現実的。

4️⃣ 外れ値で平均と標準偏差が動く

1つの極端値で μ や σ が動き、 「データは正規分布から離れている」と誤判定することも。

5️⃣ 単純正規分布 vs 混合正規分布

二峰性のデータは1つの正規分布では表せません。 ガウス混合モデル(GMM)が必要。

📜 正規分布の歴史

17世紀の発見以来、 数学・物理・工学・経済・心理学・生物学のあらゆる分野に応用され続けています。

🐍 Python 実装バリエーション(scikit-learn / scipy / Optuna)

A. scikit-learn による実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from sklearn.mixture import GaussianMixture
from sklearn.preprocessing import StandardScaler, QuantileTransformer
import numpy as np

# 正規でないデータを「正規化」する変換
qt = QuantileTransformer(output_distribution='normal', random_state=42)
x_norm = qt.fit_transform(df[['A1101']]).ravel()
print(f'変換前 歪度: {stats.skew(df["A1101"]):+.2f}')
print(f'変換後 歪度: {stats.skew(x_norm):+.2f}')

# 混合ガウスで「実は 2 つの正規の合成」を検出
gmm = GaussianMixture(n_components=2, random_state=42)
gmm.fit(df[['A1101']])
print('成分 1:', gmm.means_[0], gmm.covariances_[0])
print('成分 2:', gmm.means_[1], gmm.covariances_[1])
print('重み:', gmm.weights_)
🎯 目的:GaussianMixture(混合正規分布)で SSDSE-B-2026 の多峰データを 2 個の正規分布の和としてモデル化する例。
📥 入力X(1 次元または多次元の数値列)、n_components=2
📤 出力 各成分の平均、分散、混合比(weights_)。
💬 解説:正規分布が単峰でも、複数の集団が混在していると多峰になる(例:男女別の身長分布)。GMM で「隠れた集団」を炙り出すと、SSDSE の都道府県群を地域クラスタとして解釈できる。

B. scipy / statsmodels による実装

 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

x = df['A4103'].values
mu, sigma = x.mean(), x.std(ddof=1)

# 各種確率計算
print(f'P(X < 1.2)        = {stats.norm.cdf(1.2, mu, sigma):.4f}')
print(f'P(1.2 < X < 1.4)  = {stats.norm.cdf(1.4, mu, sigma) - stats.norm.cdf(1.2, mu, sigma):.4f}')
print(f'P(X > 1.5)        = {1 - stats.norm.cdf(1.5, mu, sigma):.4f}')

# 分位点
for q in [0.025, 0.25, 0.5, 0.75, 0.975]:
    print(f'  {int(q*100)}%-tile (正規) = {stats.norm.ppf(q, mu, sigma):.2f}')

# 信頼区間(平均の)
n = len(x)
ci_low  = mu - stats.t.ppf(0.975, n-1) * sigma / np.sqrt(n)
ci_high = mu + stats.t.ppf(0.975, n-1) * sigma / np.sqrt(n)
print(f'\n95% CI of μ: ({ci_low:.2f}, {ci_high:.2f})')

# 尤度比検定の例:正規 vs t 分布
ll_norm = np.sum(stats.norm.logpdf(x, mu, sigma))
ll_t    = np.sum(stats.t.logpdf(x, df=5, loc=mu, scale=sigma))
print(f'\nlog-Lik 正規 = {ll_norm:.2f}')
print(f'log-Lik t(5) = {ll_t:.2f}')
print('差が大きいほど分布選択が重要')
🎯 目的:scipy.stats.norm と statsmodels の正規分布関連 API を使い分け、確率計算・推定・検定をワンライナーで実行する。
📥 入力mu, sigma, 観測値 x。norm.cdf(x, mu, sigma) で確率を計算。
📤 出力 P(X ≤ x), P(X > x), 信頼区間(norm.interval)。
💬 解説:scipy.stats は確率計算と乱数生成、statsmodels は推定と検定に強みがある。両者は補完関係で、組み合わせると正規分布周りの作業が完結する。

C. Optuna でハイパラ・選択最適化

 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
import optuna
from scipy import stats

# 正規分布の MLE 推定 + 分布族の選択
def objective(trial):
    dist = trial.suggest_categorical('dist', ['norm', 'lognorm', 't', 'gamma'])
    x = df['A1101'].values
    if dist == 'norm':
        params = stats.norm.fit(x)
        ll = np.sum(stats.norm.logpdf(x, *params))
        k = 2
    elif dist == 'lognorm':
        params = stats.lognorm.fit(x)
        ll = np.sum(stats.lognorm.logpdf(x, *params))
        k = 3
    elif dist == 't':
        params = stats.t.fit(x)
        ll = np.sum(stats.t.logpdf(x, *params))
        k = 3
    else:  # gamma
        params = stats.gamma.fit(x)
        ll = np.sum(stats.gamma.logpdf(x, *params))
        k = 3
    # AIC
    return -2 * ll + 2 * k

study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=10)
print('Best distribution:', study.best_params, ' AIC:', study.best_value)
🎯 目的:Optuna を使い、正規分布を含む複数の分布族(norm / lognorm / t / gamma)のどれが最も当てはまるかを AIC 最小化で自動探索する例。
📥 入力X(観測データ)、Optuna study とトライアル数。
📤 出力 best_params: {'dist': 'gamma'}, best_value: 1448.5 # A1101 総人口(右歪み)は gamma が AIC 最小
💬 解説:「正規分布のパラメータをハイパラとして扱う」発想は AIC/BIC 最小化問題に直結する。Optuna の TPE サンプラーで効率良く探索可能。

D. ライブラリ早見表

ライブラリ / 関数 用途
scipy.stats.normPDF・CDF・乱数生成
scipy.stats.shapiro, jarque_bera, normaltest正規性検定
scipy.stats.probplotQ-Q プロット
scipy.stats.kstestKolmogorov-Smirnov 検定
scipy.stats.andersonAnderson-Darling 検定
statsmodels.stats.diagnostic.kstest_normalLilliefors 検定

🔬 正規分布を実データで扱う 3 つの道具

「正規分布を仮定する」と書くのは簡単だが、 実データを前にすると 本当に正規なのか(検定)正規でないならどう扱うのか(変換)パラメータはどう決めるのか(推定)という 3 つの問いが必ず出てくる。 ここでは SSDSE-B-2026 を使い、 Shapiro-Wilk 検定・対数正規分布・尤度関数を 実際に走るコードと実測値で確認する。

① Shapiro-Wilk 検定 — 「正規かどうか」を検定で判定する

ヒストグラムを見て「正規っぽい」と言うのは主観である。 Shapiro-Wilk 検定は 「母集団は正規分布である」を帰無仮説とし、 データがその仮説とどれだけ整合するかを p 値で返す。 p が小さければ正規を棄却、 大きければ「正規を否定する 根拠は無い」となる。 ここで重要なのは、 「棄却できない」は「正規である」と 同じ意味ではないということ ── 証明できていないだけである。

📥 入力: SSDSE-B-2026 の 2023 年 47 都道府県から総人口・合計特殊出生率・年平均気温。 加えて、 検出力を確かめるための合成データ(自由度 8 の t 分布)。

 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
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])
d = df[df['SSDSE-B-2026'] == 2023]

cols = {'A1101': '総人口', 'A4103': '合計特殊出生率', 'B4101': '年平均気温'}
print(f'{"変数":<12}{"n":>4}{"W 統計量":>12}{"p 値":>12}   判定 (α=0.05)')
for c, name in cols.items():
    v = pd.to_numeric(d[c], errors='coerce').dropna().values
    W, p = stats.shapiro(v)
    verdict = '正規と言えない' if p < 0.05 else '正規を棄却できない'
    print(f'{name:<12}{len(v):>4}{W:>12.4f}{p:>12.3e}   {verdict}')

# 対数変換すると総人口はどうなるか
v = d['A1101'].values.astype(float)
W, p = stats.shapiro(np.log(v))
print(f'\nlog(総人口)   {len(v):>4}{W:>12.4f}{p:>12.3e}   '
      f'{"正規と言えない" if p < 0.05 else "正規を棄却できない"}')

# 同じ「わずかなズレ」でも n が増えると棄却されることを確かめる。
# 1 回の結果は運に左右されるので、 各 n で 200 回試して棄却率(=検出力)を出す。
print('\n--- 正規から少しだけずれた分布(自由度 8 の t 分布)を 200 回検定 ---')
rng = np.random.default_rng(20260614)
for n in (20, 47, 200, 2000):
    rejected = sum(stats.shapiro(rng.standard_t(8, n))[1] < 0.05 for _ in range(200))
    print(f'  n={n:>5}: 200 回中 {rejected:>3} 回棄却  → 棄却率 {rejected/2:>5.1f}%')
print('  ズレの大きさは 4 つとも同じ。 変わったのは n だけ。')

📤 実行するとこの出力が得られる:

変数 n W 統計量 p 値 判定 (α=0.05) 総人口 47 0.6895 1.108e-08 正規と言えない 合計特殊出生率 47 0.9895 9.448e-01 正規を棄却できない 年平均気温 47 0.8860 2.659e-04 正規と言えない log(総人口) 47 0.9280 6.417e-03 正規と言えない --- 正規から少しだけずれた分布(自由度 8 の t 分布)を 200 回検定 --- n= 20: 200 回中 23 回棄却 → 棄却率 11.5% n= 47: 200 回中 40 回棄却 → 棄却率 20.0% n= 200: 200 回中 102 回棄却 → 棄却率 51.0% n= 2000: 200 回中 200 回棄却 → 棄却率 100.0% ズレの大きさは 4 つとも同じ。 変わったのは n だけ。

💬 結果の読み方: 3 変数のうち合計特殊出生率だけが p = 0.945 で正規を棄却できない。 総人口は p = 1.1e-8 で明確に非正規(東京という極端な外れ値があるため W が 0.69 と低い)、 年平均気温も p = 2.7e-4 で棄却される(沖縄が離れているため)。 総人口は対数を取っても p = 0.0064 とまだ棄却されており、 「対数を取れば正規になる」は常には成り立たない
後半がこの検定の最大の注意点である。 ズレの大きさをまったく変えずに n だけ増やすと、 棄却率は n=20 で 11.5%、 n=47 で 20.0%、 n=200 で 51.0%、 n=2000 で 100% と上がっていく。 つまり n が大きいと、 実用上どうでもいい微小なズレでも必ず棄却される。 逆に n が小さいと、 かなり歪んでいても棄却できない。 正規性は検定の p 値だけで判断せず、 Q-Q プロットで「どこがどうずれているか」を目で見るのが実務の作法である。

② 対数正規分布 — 「対数を取ると正規になる」分布

人口・所得・都市の規模といった量は、 負の値を取らず、 右に長い裾を引く という共通の形をしている。 これらは正規分布では表せないが、 対数を取ると正規に近づくことが多い。 このとき元の変数は 対数正規分布に従うという。 多くの要因が足し算で効くと 正規分布に、 掛け算で効くと対数正規分布になる ── これが両者を分ける本質である。

📥 入力: SSDSE-B-2026 の 2023 年 47 都道府県の総人口。

 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
30
31
32
33
34
35
36
37
38
39
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023]
x = d['A1101'].values.astype(float)          # 総人口

print(f'元データ    : 歪度 {stats.skew(x):.3f}  尖度 {stats.kurtosis(x):.3f}')
print(f'対数変換後  : 歪度 {stats.skew(np.log(x)):.3f}  尖度 {stats.kurtosis(np.log(x)):.3f}')

# 対数正規分布のパラメータ(対数を取った後の平均と標準偏差)
mu, sigma = np.log(x).mean(), np.log(x).std(ddof=1)
print(f'\n推定した対数正規のパラメータ: μ = {mu:.4f}, σ = {sigma:.4f}')

# 対数正規の理論値と実測を比べる
theo_mean = np.exp(mu + sigma**2 / 2)
theo_median = np.exp(mu)
theo_mode = np.exp(mu - sigma**2)
print(f'理論 平均   = {theo_mean:>12,.0f} 人   実測 {x.mean():>12,.0f} 人')
print(f'理論 中央値 = {theo_median:>12,.0f} 人   実測 {np.median(x):>12,.0f} 人')
print(f'理論 最頻値 = {theo_mode:>12,.0f} 人')
print('→ 対数正規では 最頻値 < 中央値 < 平均 の順に必ず並ぶ(右に裾を引くため)')

W1, p1 = stats.shapiro(x)
W2, p2 = stats.shapiro(np.log(x))
print(f'\nShapiro-Wilk  元データ  p = {p1:.3e}(正規と言えない)')
print(f'Shapiro-Wilk  対数変換後 p = {p2:.4f}'
      f'({"正規を棄却できない" if p2 >= 0.05 else "まだ正規と言えない"})')

fig, axes = plt.subplots(1, 2, figsize=(11, 4.2))
axes[0].hist(x / 1e4, bins=15, color='#90CAF9', edgecolor='white')
axes[0].set_title('元の総人口'); axes[0].set_xlabel('総人口(万人)')
axes[1].hist(np.log(x), bins=15, color='#A5D6A7', edgecolor='white')
axes[1].set_title('対数を取った総人口'); axes[1].set_xlabel('log(総人口)')
plt.tight_layout(); plt.savefig('nd_lognormal.png', dpi=120)

📤 実行するとこの出力が得られる:

元データ : 歪度 2.219 尖度 4.951 対数変換後 : 歪度 0.793 尖度 -0.211 推定した対数正規のパラメータ: μ = 14.4206, σ = 0.8029 理論 平均 = 2,527,864 人 実測 2,645,809 人 理論 中央値 = 1,831,367 人 実測 1,549,000 人 理論 最頻値 = 961,210 人 → 対数正規では 最頻値 < 中央値 < 平均 の順に必ず並ぶ(右に裾を引くため) Shapiro-Wilk 元データ p = 1.108e-08(正規と言えない) Shapiro-Wilk 対数変換後 p = 0.0064(まだ正規と言えない)

💬 結果の読み方: 歪度は 2.219 → 0.793、 尖度は 4.951 → −0.211 と、 対数を取るだけで裾の重さが大きく緩和される。 推定したパラメータ μ = 14.42、 σ = 0.803 から 理論値を計算すると 最頻値 96 万人 < 中央値 183 万人 < 平均 253 万人 と並ぶ。 対数正規ではこの順序が必ず成り立ち、 だからこそ「平均年収」と「中央値年収」が 食い違う現象が起きる。
ただし正直に書いておくと、 対数変換後も Shapiro-Wilk は p = 0.0064 で棄却される。 47 県の人口は「きれいな対数正規」ではない(東京がなお外れている)。 理論中央値 183 万人と実測中央値 155 万人のズレもそこから来ている。 「対数正規で近似できる」と「対数正規に従う」は別のことで、 前者は実務上とても有用だが、 後者を主張するには根拠が足りない。

③ 尤度関数 — 「そのパラメータらしさ」を数値化する

正規分布の平均 μ と標準偏差 σ は、 データからどう決めるのか。 その答えが 尤度である。 尤度とは 「そのパラメータのもとで、 手元のデータが得られる確率密度」で、 これを最大にする値を採用するのが 最尤推定。 確率は積で効くため、 実際には対数を取った 対数尤度 $\log L(\mu,\sigma) = -\frac{n}{2}\log(2\pi\sigma^2) - \frac{\sum (x_i-\mu)^2}{2\sigma^2}$ を最大化する。

📥 入力: SSDSE-B-2026 の 2023 年 47 都道府県の年平均気温 (B4101)。 前節の Shapiro-Wilk では棄却されたが、 3 変数の中では最も正規に近い量である。

 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023]
x = pd.to_numeric(d['B4101'], errors='coerce').dropna().values   # 年平均気温 (℃)
n = len(x)
print(f'データ: 年平均気温 {n} 県  平均 {x.mean():.4f}℃  標準偏差 {x.std(ddof=0):.4f}℃')

# 対数尤度 logL(μ, σ) = -n/2 * log(2πσ²) - Σ(x-μ)² / (2σ²)
def loglik(mu, sigma):
    return (-n / 2 * np.log(2 * np.pi * sigma**2)
            - ((x - mu)**2).sum() / (2 * sigma**2))

# μ を動かして対数尤度がどう変わるか(σ は最尤推定値で固定)
sigma_hat = x.std(ddof=0)
mu_hat = x.mean()
print(f'\n最尤推定値: μ̂ = {mu_hat:.4f}  σ̂ = {sigma_hat:.4f}')
print(f'最大対数尤度 logL(μ̂, σ̂) = {loglik(mu_hat, sigma_hat):.4f}')

print('\n μ を動かしたときの対数尤度(σ は σ̂ で固定)')
for mu in [mu_hat - 2, mu_hat - 1, mu_hat, mu_hat + 1, mu_hat + 2]:
    print(f'  μ={mu:7.4f}: logL = {loglik(mu, sigma_hat):10.4f}'
          f'   最大との差 {loglik(mu, sigma_hat) - loglik(mu_hat, sigma_hat):8.4f}')

# 最尤推定値が「標本平均」と一致することを数値で確認
grid = np.linspace(mu_hat - 3, mu_hat + 3, 60001)
best = grid[np.argmax([loglik(m, sigma_hat) for m in grid])]
print(f'\n格子探索で対数尤度を最大にする μ = {best:.4f}')
print(f'標本平均                      = {mu_hat:.4f}   → 一致する')

# scipy の最尤推定と突き合わせる
mu_sp, sd_sp = stats.norm.fit(x)
print(f'\nscipy.stats.norm.fit → μ = {mu_sp:.4f}, σ = {sd_sp:.4f}')
print(f'手計算               → μ = {mu_hat:.4f}, σ = {sigma_hat:.4f}   → 一致する')

fig, ax = plt.subplots(figsize=(7, 4.5))
ms = np.linspace(mu_hat - 3, mu_hat + 3, 300)
ax.plot(ms, [loglik(m, sigma_hat) for m in ms], lw=2)
ax.axvline(mu_hat, color='crimson', ls='--', label=f'最尤推定値 μ = {mu_hat:.3f}')
ax.set_xlabel('平均 μ'); ax.set_ylabel('対数尤度 log L'); ax.legend()
plt.tight_layout(); plt.savefig('nd_likelihood.png', dpi=120)

📤 実行するとこの出力が得られる:

データ: 年平均気温 47 県 平均 16.8021℃ 標準偏差 2.0263℃ 最尤推定値: μ̂ = 16.8021 σ̂ = 2.0263 最大対数尤度 logL(μ̂, σ̂) = -99.8812 μ を動かしたときの対数尤度(σ は σ̂ で固定) μ=14.8021: logL = -122.7760 最大との差 -22.8948 μ=15.8021: logL = -105.6049 最大との差 -5.7237 μ=16.8021: logL = -99.8812 最大との差 0.0000 μ=17.8021: logL = -105.6049 最大との差 -5.7237 μ=18.8021: logL = -122.7760 最大との差 -22.8948 格子探索で対数尤度を最大にする μ = 16.8021 標本平均 = 16.8021 → 一致する scipy.stats.norm.fit → μ = 16.8021, σ = 2.0263 手計算 → μ = 16.8021, σ = 2.0263 → 一致する

💬 結果の読み方: まず式の形を読む。 μ が入っているのは $-\sum (x_i-\mu)^2 / (2\sigma^2)$ の項だけで、 これを最大にするのは二乗和を最小にする μ、 すなわち標本平均である。 実際、 格子探索で対数尤度を最大にする μ = 16.8021 は標本平均 16.8021 と一致し、 scipy.stats.norm.fit の結果とも小数第 4 位まで揃った。 「平均を使う」のは慣習ではなく、 正規分布を仮定した最尤推定の帰結である。
対数尤度の値そのもの(−99.88)に意味は無く、 意味があるのは差だけである。 μ を 1℃ ずらすと −5.72、 2℃ ずらすと −22.89 と、 ズレの二乗に比例して急速に落ちる(2 倍ずらすと落ち込みは 4 倍)。 この落ち方の鋭さが推定の精度そのもので、 尖った尤度関数ほど μ を狭く絞り込めている。 AIC や尤度比検定が「対数尤度の差」だけを使うのも、 同じ理由による。

⚠️ よくある落とし穴

❌ 「実データは正規分布に従う」と決めつけない
所得・世帯支出など多くの社会データは右に裾の長い分布(log-normal的)を持ち、 正規分布から外れます。 Q-Q プロット、 Shapiro-Wilk 検定で正規性を確認すべき。
✅ 正規分布が中心的な理由:中心極限定理
「個々のデータの分布」と「平均の分布」は別物。 n が大きいと 平均(や回帰係数)の分布 は近似的に正規分布になる(中心極限定理)。 これが正規分布前提の検定が広く使える根拠。
❌ Q-Q プロットを描かない
回帰の残差が正規分布から外れていないかは、 Q-Qプロットで一目瞭然。 残差の正規性が崩れていると、 p値・CI が信頼できなくなる。

👁️ 直感 — 正規分布は「自然界の標準形」

正規分布(normal distribution, Gaussian distribution)は、 統計学で最も重要な確率分布。 「釣り鐘形」をした左右対称の分布で、 自然界や社会現象の多くがこの形に従います。

正規分布の基本

正規分布に従う実例

💡 正規分布は2つのパラメータ μ(平均)と σ(標準偏差)だけで完全に決まる「最も簡潔な分布」。 これだけ単純なのに、 自然界の多くを記述できるのが驚き。

⚠️ 落とし穴(拡張版・各 100 文字以上)

① 「実データは正規分布」と決めつけない
所得・世帯支出など多くの社会データは右に裾の長い分布(log-normal 的)を持ち、 正規分布から外れる。 Q-Q プロット・Shapiro-Wilk 検定・Anderson-Darling で正規性を確認すべき。 SSDSE でも総人口 (A1101) は東京が突出した右裾を持つ。 視覚的確認が最優先。
② 中心極限定理の射程を誤解
「個々のデータの分布」と「平均の分布」は別物。 n が大きいと「平均(や回帰係数)の分布」は近似的に正規になる(CLT)。 これが正規分布前提の検定が広く使える根拠。 ただし n=10 程度では CLT は効きにくい、 また分散無限の分布(コーシー)には CLT が成立しない例外もある。
③ Q-Q プロットを描かない
回帰の残差が正規分布から外れていないかは、 Q-Q プロットで一目瞭然。 残差の正規性が崩れていると、 p 値・CI が信頼できなくなる。 検定統計量だけでなく必ずプロットで確認。 端点(尾部)の挙動が特に重要で、 中央が直線でも端で曲がれば「裾の重い」分布。
④ 検定の選択を間違える
n=47 程度なら Shapiro-Wilk が最も検出力高い。 n > 2000 になると Shapiro-Wilk は使えず、 Anderson-Darling か Lilliefors を使う。 KS 検定は分布の中央を見るが、 尾部の外れを検出しにくい。 Jarque-Bera は歪度・尖度ベースで n が大きい時に有効。
⑤ 「正規でないから検定不可」と即断
t 検定・分散分析は正規分布の仮定があるが、 中心極限定理により n が大きければ頑健(n > 30 程度)。 一方、 完全に正規が必要なら、 n が大きくても F 検定(分散比)など外れ値に敏感な検定は避ける。 ノンパラ検定(Mann-Whitney など)は最終手段。
⑥ 標準正規と一般正規を混同
z = (x - μ) / σ で標準正規に変換した後、 「z = 2.5 だから P > 0.99」と表で確認するワークフロー。 これを忘れて「x = 73 だから p = 0.99」と非変換のまま表を引くと誤る。 SSDSE の総人口を扱うときは特に注意。
⑦ 信頼区間の解釈の罠
95% CI は「95% の確率で真の μ がこの区間にある」ではない。 正確には「同じ手続きで CI を作れば 95% が真値を含む」。 一回の CI の真値カバー率は 0 か 1 で、 確率ではない。 ベイズ的解釈と頻度論的解釈の混同に注意。
⑧ 多変量正規の前提を見落とす
重回帰・因子分析・MANOVA など多変量手法は、 「変数間が結合正規」を仮定。 単変量ごとに正規でも、 結合は正規でない場合がある。 マルディア(Mardia)検定や、 マハラノビス距離の χ² プロットで確認。 SSDSE のように外れ値(東京)がある場合に問題が顕在化。

⚠️ 正規分布の追加的な落とし穴(10 個)

  1. 「データが多ければ正規」と思う:CLT は「標本平均が正規」と言うだけ。 個々のデータが正規分布する保証はない。
  2. 裾が重い分布で SD を使う:t 分布や Cauchy 分布に近いデータで SD を計算すると、 外れ値で SD が無意味に大きく。
  3. p 値だけで正規性を判定:$n$ 大で僅かなズレでも有意になる。 Q-Q プロットの目視を併用。
  4. 有界データを正規で扱う:失業率 (0-100%) のような有界量は厳密には正規でない。 ロジット変換が定石。
  5. 離散データを連続正規で近似:人数のような整数値も、 平均が大きければ正規近似可能。 ただし「人数 = 0」付近では危険。
  6. ゼロ過剰な分布:「ある産業の雇用者数」のように 0 が多発する変数は、 正規分布ではなく Tweedie や Hurdle モデルが適切。
  7. 多変量で周辺正規 ≠ 同時正規:各変数が正規でも組み合わせが正規とは限らない(コピュラの問題)。
  8. 歪度を見ずに分散だけで議論:人口データは右に長い裾を持つので、 中央値と平均が乖離する。
  9. 標準正規での近似誤差:99.7% ルールは「3σ 内に 99.73%」だが、 4σ・5σ の現実的確率は極めて低く、 ファイナンスではブラックスワンの源。
  10. 3σ ルールの誤用:「3σ 外=外れ値」は正規前提。 非正規データに適用すると正常値まで切り捨てる。

💼 実務応用 — 正規分布が支える 8 分野

  1. 品質管理:管理図 (X̄-R chart) は「平均が正規に従う」前提。 6σ 品質管理は不良率 3.4 ppm を意味する。
  2. ファイナンス:Black-Scholes モデルは対数収益率が正規。 ただし実データは裾が重い(GARCH や t 分布で補正)。
  3. 誤差解析:物理測定では複数の独立誤差が足し合わさるため、 CLT で正規近似が正当化される。
  4. 機械学習:線形回帰の残差は正規仮定、 Gaussian Naive Bayes、 VAE の潜在変数、 ガウス過程など。
  5. 医療統計:身長・血圧・コレステロール値などは概ね正規。 「平均±2SD」が基準値範囲の基本。
  6. 心理学:IQ は定義上正規(平均 100, SD 15)に標準化されている。
  7. 気象:日次気温は概ね正規だが、 極端気温(heat wave)は裾の議論が必要。
  8. 製造業:寸法公差設計は正規分布の Cpk 指標で評価される。

🏛 正規分布の歴史 — 200 年の旅路

🗺️ 概念マップ — 3つの視点で体系を理解する

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

📍 体系階層のパス

🌐 統計・データサイエンス推測統計推定正規分布

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

中心に 正規分布 を置き、 そこから ヒストグラム・分散・平均・標準偏差・標準化・信頼区間 など 計 24 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語あとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。

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

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

大きな円が小さな円を包含する Circle Packing 図。 「正規分布」は緑色でハイライト

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

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

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

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

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

💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは 正規分布隣に何が並ぶかを、 包含マップとツリーマップは 統計・データサイエンス推定 → 正規分布 という入れ子の位置を示します。 「推定には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。

🧩 正規分布から派生する重要な分布

正規分布から、 統計学の核となる多くの分布が導出されます:

分布 導出 用途
χ² 分布独立な標準正規の二乗和分散の信頼区間、 適合度検定
t 分布N(0,1) / √(χ²/k)小標本での平均の検定
F 分布χ²₁/χ²₂ の比分散分析、 回帰の有意性検定
対数正規分布log(X) が正規分布所得、 株価、 都市人口
多変量正規多次元への拡張多変量解析、 機械学習

🤖 機械学習での正規分布

① 線形回帰の前提

古典的な線形回帰モデル y = Xβ + ε で、 誤差項 ε が正規分布 N(0, σ²) と仮定します。 これにより最小二乗推定量が最尤推定量と一致。

② ガウシアン分類器

ナイーブベイズ(Gaussian Naive Bayes)、 線形判別分析(LDA)は、 各クラスの特徴量分布を正規分布として推定。

③ ガウス過程回帰

任意の入力点での予測値が(多変量)正規分布に従うモデル。 予測の不確実性を自然に表現できる。

④ Variational Autoencoder (VAE)

潜在空間を正規分布で表現する深層生成モデル。 「事前分布 N(0, I) からのサンプリング」で新しいデータを生成。

⑤ 重みの初期化

ニューラルネットの重み初期化(Xavier, He)は標準偏差を精密に制御した正規分布から:

🎯 目的:ニューラルネットの重みを正規分布 N(0, σ²) から乱数生成して初期化する手法(He / Xavier 初期化を含む)。
📥 入力:層のサイズ in_features, out_featuresnn.init.normal_ または nn.init.kaiming_normal_ を使う。
1
2
3
4
5
6
7
8
# 入力 5 次元・出力 1 次元の全結合層を例にする
in_features, out_features = 5, 1

import torch.nn as nn

# He 初期化(ReLU 用)
linear = nn.Linear(in_features, out_features)
nn.init.normal_(linear.weight, mean=0, std=(2/in_features)**0.5)
📤 出力 重みテンソルが N(0, 2/n) や N(0, 1/n) で埋められる。
💬 解説:初期化分布の標準偏差が活性関数(ReLU/tanh)と層幅に依存。He 初期化は ReLU 用、Xavier は tanh 用。「正規分布」は深層学習の最も基本的な部品。

⑥ Batch Normalization

各層の出力を「平均0、 分散1」の正規分布近似に標準化する深層学習の必須技術。

🔗 隣接手法への橋渡し

「正規分布」は単独で完結せず、 前後の手法と組み合わさって価値が発揮される。 入力データの準備 (上流)・同目的の代替手法との比較 (並列)・結果の活用 (下流) という 3 軸で隣接領域を整理する。

この上流・並列・下流の対応を地図化することで、 「正規分布」を中核に据えた分析パイプライン (データ準備 → 手法選択 → 結果の検証と展開) の全体像が見えてくる。

🌳 手法選択フロー

「normal distribution」を含む手法選択は、 データの性質・分析目的・運用制約の 3 軸で決まる。 以下に典型シナリオと対応する手法の組合せを示す。

典型シナリオ別の手法選択

シナリオ重視する観点候補手法
データが大規模 (n が多い、 高次元)計算コスト / メモリ / 並列化が必要正規近似・z 検定(中心極限定理)
外れ値が多い / ノイズあり頑健性 / 外れ値除去 / 中央値ベースロバスト統計(中央値・MAD)
解釈性を重視する線形 / 木構造 / ルールベース正規分布(パラメトリック)
予測精度を最優先するアンサンブル / ハイパラ調整 / 交差検証混合正規分布(GMM)
データが少ない正則化 / ベイズ / 転移学習 / 簡素なモデルt 分布・ベイズ推定
リアルタイム/オンライン処理ストリーミング / 軽量モデル / 逐次更新逐次更新(オンライン平均・分散)

選んだ後の検証ステップ

  1. 前処理確認: 標準化 / 欠損処理 / カテゴリ変数のエンコード が適切か
  2. ハイパラ調整: 交差検証で安定する値を選ぶ
  3. 性能評価: タスクに応じた指標 (RMSE / Accuracy / F1 / AUC / シルエット等) を複数併用
  4. 頑健性チェック: 別手法 / 別シードで結果が大きく違わないか確認
  5. 解釈: 結果を分野知識と照らし合わせ、 意味のある発見になっているか検討

🎨 直感をさらに深める — 「釣鐘型」を実データで裏取りする

正規分布は平均 μ(山の位置)と分散 σ²(山の幅)の 2 つだけで形が完全に決まる、 統計学で最もシンプルな連続分布です。 「平均のまわりに集まり、 大きく外れる値ほど急速に珍しくなる」という素朴な直感が、 そのまま数式 $f(x)\propto e^{-(x-\mu)^2/2\sigma^2}$ の「$(x-\mu)^2$ を指数に載せて急減させる」構造に対応します。 ここでは、 その中核である 68-95-99.7 則が実データでどこまで成り立つ/崩れるかを SSDSE-B-2026 で確かめます。

📊 68-95-99.7 則の理論値 vs SSDSE 実測(2023 年・47 都道府県・すべて実測値)

各変数について「平均 ±1σ / ±2σ / ±3σ の帯に実際に入った都道府県の割合」を数え、 正規分布の理論値と並べました。 理論に近いほど「正規で近似してよい」のサインです。

変数(列コード)±1σ 内±2σ 内±3σ 内Shapiro p読み取り
理論値(正規分布)68.3%95.4%99.7%基準
合計特殊出生率(A4103)63.8%
(30/47)
95.7%
(45/47)
100%0.945✅ 理論とほぼ一致
年平均気温(B4101)83.0%
(39/47)
91.5%97.9%0.0003❌ ±1σ に集中しすぎ(尖り)
総人口 原数値(A1101)87.2%
(41/47)
93.6%97.9%<0.0001❌ 右歪み(中央密・裾に東京)
総人口 log10(A1101)66.0%
(31/47)
95.7%100%0.006△ 対数化で 68-95 則が理論に接近

💡 読み解き:合計特殊出生率は 63.8% / 95.7% / 100% と理論の 68 / 95 / 99.7 にほぼ乗り、 「正規の直感がそのまま使える」好例です。 一方、 年平均気温や総人口原数値では ±1σ に 83〜87% が集中し、 これは「中央に尖って裾が薄い(気温:超過尖度 +2.8)」あるいは「片側に長い裾(人口:右歪み)」のサイン。 「±1σ に入る割合が 68% より大幅に多い=正規ではなく尖った/歪んだ分布」という、 見た目に頼らない量的な判定基準として使えます。

🎯 中心極限定理(CLT)の直感 — なぜ正規が至るところに現れるか

個々のデータが正規でなくても、 「たくさん足し合わせた量」「平均を取った量」は近似的に正規になる——これが CLT の直感です。 SSDSE でも、 月別出生数(各月は非正規でも)を年合計すれば 12 個の変動が加算されて正規に近づき、 47 都道府県の平均を推定量として扱うときも $\bar X \approx N(\mu,\sigma^2/47)$ と近似できます。 だから t 検定・z 検定・信頼区間といった「平均をめぐる推測」は、 元データの分布形にあまり依存せず広く使えるのです。 逆に言えば、 CLT が保証するのはあくまで「平均・合計の分布」であって「個票データそのものの分布」ではない点が、 次節の落とし穴につながります。

⚠️ 落とし穴をさらに深掘り(重要)

「なんでも正規」の過信は、 統計分析で最も多い失敗の一つです。 既存の落とし穴セクションを補強する形で、 実データでつまずきやすい 6 つの罠を SSDSE の実測値つきで整理します。

① ヒストグラムの「見た目」で正規と決めつける
年平均気温 B4101 は平均 16.8℃・左右対称に「見える」が、 超過尖度 +2.80・Shapiro p=0.0003 で正規は棄却される。 ±1σ に実測 83%(理論 68%)が集中する尖った形だ。 目視ではなく検定(Shapiro-Wilk)と Q-Q プロットで裏を取るのが鉄則。 見た目の対称性は正規性を保証しない。
② 歪み・裾の重さを無視する
総人口 A1101 は歪度 +2.22 の強い右裾(東京 1409 万 vs 鳥取 54 万)。 平均 264.6 万と中央値が大きく乖離し、 「平均±SD」の帯が実態を表さない。 歪んだデータでは平均・SD より中央値・四分位・対数変換を優先する。 裾が重い分布では SD 自体が外れ値で膨らみ意味を失う。
③ 正規性検定を大標本で過信する(過敏性)
Shapiro-Wilk / KS などの正規性検定は n が大きいほど僅かなズレでも有意(p<0.05)になる。 数万件のデータでは「実用上ほぼ正規」でも棄却されがち。 n=47 の SSDSE では逆に検出力が低く、 非正規を見逃すことも。 p 値の大小だけで判断せず、 効果量(歪度・尖度の大きさ)と Q-Q プロットを併用する。
④ 外れ値と 3σ ルールの誤用
「3σ の外=外れ値」は正規分布を前提にした話。 年平均気温で沖縄は z=+3.42(23.8℃)だが、 これは分布が尖って裾が重いための正常値で、 機械的に除去すると誤る。 逆に正規なら 3σ 外は 0.3% の極稀。 外れ値判定の前に必ず分布形を確認し、 非正規なら IQR 基準やロバスト統計を使う。
⑤ 対数正規との混同
人口・所得・面積など「掛け算・比率で効く正の量」は右裾が長く、 正規ではなく対数正規に近い。 総人口は原数値では Shapiro W=0.689 だが、 log10 変換で W=0.928 まで改善し 68-95 則も理論に接近する。 「対数を取ると正規に近づくか」を先に試すのが定石。 対数正規を正規と誤ると裾確率を大きく取り違える。
⑥ 標準正規化(z 変換)の取り違え
確率や分位点を z 表で引くには、 まず $z=(x-\mu)/\sigma$ で標準正規 $N(0,1)$ に直す必要がある。 変換を忘れて生の値 x のまま表を引くと誤る。 また「z=2 だから外れ」と言えるのは元データが正規のときだけ。 標準化は分布形を変えないので、 非正規データを z 化しても正規にはならない点にも注意。

🚀 発展 — 正規分布の広がりと「正規でないとき」への橋

正規分布を軸に、 前提の確認手法・親戚の分布・多次元への拡張までを地図化します。 各項目の詳細は末尾の関連ページへ。

🔹 標準正規化と z スコア

任意の $X\sim N(\mu,\sigma^2)$ は $Z=(X-\mu)/\sigma$ で標準正規 $N(0,1)$ に変換でき、 単位の違う指標どうしを同じ物差しで比較できます。 SSDSE で年平均気温を標準化すると北海道 z=−2.83、 沖縄 z=+3.42 となり、 「全国のばらつきの中でどこに位置するか」を σ 単位で定量化できます(外れ値判定は分布形の確認が前提)。

🔹 中心極限定理と正規近似

標本平均は $\bar X\approx N(\mu,\sigma^2/n)$、 標本和は $\approx N(n\mu,n\sigma^2)$ に近づきます。 二項分布・ポアソン分布も n(λ)が大きければ正規で近似でき、 これが z 検定・信頼区間の土台です。 目安は n≥30、 元分布が強く歪む場合は n≥100。 収束の速さは Berry-Esseen 不等式で $O(1/\sqrt n)$ と定量化されます。

🔹 正規性の検証手法

🔹 親戚の分布 — 「正規でないとき」の選択肢

分布いつ使うか正規との関係
t 分布小標本で SE を推定するとき裾が重い。 自由度 ∞ で正規に収束
対数正規正の量・掛け算で効く量(人口・所得)$\log X\sim N(\mu,\sigma^2)$
歪正規(skew-normal)やや非対称だが正規に近い量歪度パラメータ α=0 で正規に一致
裾の重い分布(t・べき乗則・Cauchy)極端値が頻出(金融リターン等)Cauchy は分散が無限で CLT が効かない

🔹 多変量正規分布への拡張

$p$ 次元の $\mathcal N_p(\boldsymbol\mu,\Sigma)$ は、 等高線が共分散行列 $\Sigma$ の固有ベクトル方向を軸とする楕円になります。 「条件付き分布もまた正規」「条件付き期待値は線形」という性質が、 回帰・カルマンフィルタ・ガウス過程・混合正規(GMM)の理論的な心臓部です。 単変量の各成分が正規でも同時分布が正規とは限らない(周辺正規 ≠ 同時正規)点は、 重回帰・因子分析の前提確認で重要になります。