論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説(ジャストインタイム型データサイエンス教育)
確率分布のカタログ
Probability Distributions
統計学・機械学習で頻出する9つの代表的な確率分布を一望。 連続・離散・派生関係をまとめて学ぶ。
推測統計確率分布probability distributions

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

論文・記事に 「正規分布」「t分布」「F分布」「χ²分布」「二項分布」「ポアソン分布」 として出てくる確率分布群。 仮説検定・信頼区間・最尤推定など、 推測統計のあらゆる場面で前提となります。

分布同士には密接な派生関係(正規 → t、 χ² → F、 二項 → ポアソン → 正規 など)があり、 まとめて学ぶことで全体像がつかめます。

🔖 キーワード索引

📊 正規分布 (Normal) t 分布 χ² 分布 F 分布 二項分布 ポアソン分布 一様分布 指数分布 対数正規分布 🔄 分布間の派生関係 📝 練習問題 🗺️ 概念マップ

💡 30秒で分かる結論

🗂️ 章俯瞰 — 9つの分布を一望

分布 記号 連続/離散 パラメータ 典型的な使い時
正規$N(\mu, \sigma^2)$連続$\mu$, $\sigma$標本平均、 測定誤差、 身長
t$t_\nu$連続$\nu$(自由度)小標本平均、 回帰係数
χ²$\chi^2_k$連続$k$(自由度)分散・独立性検定
F$F_{d_1, d_2}$連続$d_1, d_2$分散比、 ANOVA
二項$\mathrm{Bin}(n, p)$離散$n$, $p$コイン投げ、 A/B テスト
ポアソン$\mathrm{Pois}(\lambda)$離散$\lambda$来店数、 事故件数
一様$U(a, b)$連続/離散$a, b$乱数、 事前分布
指数$\mathrm{Exp}(\lambda)$連続$\lambda$待ち時間、 寿命
対数正規$\mathrm{LN}(\mu, \sigma^2)$連続$\mu, \sigma$所得、 株価変動

📊 正規分布(Normal / Gaussian)

釣鐘型」の左右対称な分布。 統計学で最も重要、 自然界・標本平均の至るところに現れます。 確率密度関数(PDF):

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

記号:$\mu$ は平均(位置)、 $\sigma$ は標準偏差(広がり)、 $\sigma^2$ は分散。 表記は $X \sim N(\mu, \sigma^2)$。 特に $\mu=0, \sigma=1$ を標準正規分布と呼び、 $Z \sim N(0,1)$ と書きます。

📊 68-95-99.7 ルール

これが信頼区間・検定の基礎。 「$\pm 1.96 \times \mathrm{SE}$」が 95% 信頼区間になるのもこのため。

🧮 標準化と z-score

$X \sim N(\mu, \sigma^2)$ を $Z = (X-\mu)/\sigma$ で標準化すると $Z \sim N(0,1)$。 任意の正規分布の確率計算が、 標準正規分布の値表で済む。 例:偏差値 70($z=2$)以上の人は上位 2.5% 程度。

🔢 ベクトル表記 — 多変量正規分布

$d$ 次元への拡張:$\boldsymbol{X} \sim N_d(\boldsymbol{\mu}, \Sigma)$。 密度関数は

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

$\boldsymbol{\mu} \in \mathbb{R}^d$ は平均ベクトル、 $\Sigma \in \mathbb{R}^{d \times d}$ は共分散行列。 マハラノビス距離 $(\boldsymbol{x}-\boldsymbol{\mu})^\top \Sigma^{-1} (\boldsymbol{x}-\boldsymbol{\mu})$ が指数の中身。

🐍 Python で正規分布

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #1/18。 最初のスニペット — SSDSE-B-2026(47 都道府県・2023 年)を読み込み、 必要な前処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from scipy import stats
import numpy as np

# 1次元
X = stats.norm(loc=50, scale=10)        # N(50, 100)
print(X.pdf(60))                        # 密度
print(X.cdf(60))                        # 累積確率 P(X ≤ 60)
print(X.ppf(0.975))                     # 上側2.5%点 ≈ 69.6
print(X.rvs(size=1000))                 # ランダムサンプル

# 標準化
Z = (X.rvs(1000) - 50) / 10             # 標準正規

# 多変量
mean = [0, 0]
cov = [[1, 0.5], [0.5, 1]]
mvn = stats.multivariate_normal(mean=mean, cov=cov)
samples = mvn.rvs(size=1000)            # (1000, 2)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

📐 t 分布(Student's t)

正規分布から派生した分布で、 標準偏差が未知の小標本での平均の検定・信頼区間に使う。 自由度 $\nu$ をパラメータに持ちます。

$$ T = \frac{Z}{\sqrt{V/\nu}}, \quad Z \sim N(0,1), \quad V \sim \chi^2_\nu \text{ (独立)} $$

正規分布より裾が重い(極端な値が出やすい)。 $\nu \to \infty$ で正規分布に収束。 実務的には $\nu \ge 30$ で正規分布近似可能。

使い時:1標本 t 検定、 2標本 t 検定、 単回帰の係数検定。 形は「$(\bar{x} - \mu_0)/(s/\sqrt{n})$」のような形をした統計量が従う。

歴史

Guinness ビール工場の品質管理担当だった William Gosset が 1908 年に発表("Student" のペンネーム)。 会社の方針で本名を出せなかったため。 ビールの品質管理が現代統計学の基礎を作った。

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #2/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
3
4
5
6
7
8
9
from scipy import stats
t_dist = stats.t(df=10)
print(t_dist.ppf(0.975))   # 自由度10での 2.5%点 ≈ 2.228
print(t_dist.ppf(0.975) - stats.norm.ppf(0.975))  # 正規との差

# 1標本 t検定
data = [1, 2, 3, 4, 5]
t_stat, p_val = stats.ttest_1samp(data, popmean=2.5)
print(t_stat, p_val)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

📊 χ²(カイ二乗)分布

標準正規分布の二乗和。 $Z_1, \ldots, Z_k$ が独立に $N(0,1)$ なら、 $\sum Z_i^2 \sim \chi^2_k$(自由度 $k$)。

$\chi^2$ の期待値 = $k$、 分散 = $2k$。 必ず非負(0 以上)。 自由度が大きくなると正規分布に近づく。

主な用途

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #3/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
3
4
5
6
7
from scipy import stats

# 独立性検定(クロス集計表)
import numpy as np
obs = np.array([[10, 20, 30], [6, 9, 17]])
chi2, p, dof, expected = stats.chi2_contingency(obs)
print(f'χ² = {chi2:.3f}, p = {p:.4f}, df = {dof}')
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

📊 F 分布

2 つの独立な χ² 分布の比:$F = (U/d_1)/(V/d_2)$、 $U \sim \chi^2_{d_1}$、 $V \sim \chi^2_{d_2}$。 必ず非負、 右に裾を引く。

主な用途:

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #4/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
3
4
5
6
from scipy import stats
g1 = [1, 2, 3, 4]
g2 = [3, 5, 7, 9]
g3 = [2, 4, 6, 8]
F, p = stats.f_oneway(g1, g2, g3)   # ANOVA
print(f'F = {F:.3f}, p = {p:.4f}')
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

🎲 二項分布(Binomial)

「成功確率 $p$ の試行を $n$ 回繰り返したときの成功回数」。 $X \sim \mathrm{Bin}(n, p)$。

$$ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, \ldots, n $$

期待値 $= np$、 分散 $= np(1-p)$。 $n$ が大で $np \ge 5$、 $n(1-p) \ge 5$ なら正規近似可能。

例:コイン 100 回投げて表が出る回数、 100 人中の購入者数(A/B テスト)、 メール 100 件の到達数。

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #5/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
3
4
5
6
from scipy import stats

X = stats.binom(n=100, p=0.2)
print(X.pmf(20))           # P(X=20)
print(X.cdf(15))           # P(X≤15)
print(X.mean(), X.var())   # 20.0, 16.0
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

📞 ポアソン分布(Poisson)

「単位時間(空間)あたりの稀な事象の発生数」。 $X \sim \mathrm{Pois}(\lambda)$。

$$ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0, 1, 2, \ldots $$

期待値 = 分散 = $\lambda$(特徴的)。 二項分布 $\mathrm{Bin}(n, p)$ で $n$ 大・$p$ 小・$np = \lambda$ 固定の極限。

例:1 時間あたりの来店数、 単位面積あたりの店舗数、 1 日あたりの事故件数、 単位時間の電話呼出数。

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #6/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
3
4
5
from scipy import stats

X = stats.poisson(mu=3)    # λ = 3
print(X.pmf(2))            # P(X=2)
print(X.mean(), X.var())   # 3.0, 3.0
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

📏 一様分布(Uniform)

$U(a, b)$:区間 $[a, b]$ で密度一定。 期待値 $(a+b)/2$、 分散 $(b-a)^2/12$。 乱数生成、 ベイズの無情報事前分布として基本。

⏱️ 指数分布(Exponential)

$\mathrm{Exp}(\lambda)$:ポアソン過程の事象間隔。 期待値 = 分散 = $1/\lambda$。 メモリーレス性が特徴:$P(X > s+t | X > s) = P(X > t)$。 待ち時間、 寿命、 故障間隔のモデル。

📈 対数正規分布(Log-normal)

$\log X \sim N(\mu, \sigma^2)$ のとき $X$ は対数正規分布。 必ず正値、 右に裾を引く。 所得分布、 株価収益率、 都市人口など「掛け算過程」で生じる分布の代表。

🔄 分布間の派生関係

分布は孤立せず、 多くの変換関係で繋がっています。 これを理解すると、 新しい分布に出会ったとき素早く類推できます。

変換 関係
CLT(中心極限定理)任意分布 $\to$ 標本平均は正規分布
標準正規の二乗和$\sum_{i=1}^k Z_i^2 \sim \chi^2_k$
標準正規 / √(χ²/df)$t$ 分布
χ²/df の比$F$ 分布
$\mathrm{Bin}(n,p)$ の極限$n$ 大、 $np = \lambda$ 固定 $\to$ ポアソン
$\mathrm{Bin}(n,p)$ の極限$np \ge 5$, $n(1-p) \ge 5$ $\to$ 正規
ポアソンの極限$\lambda \to \infty$ $\to$ 正規
指数の和$\sum \mathrm{Exp}(\lambda) \sim \mathrm{Gamma}$
対数$\log(\mathrm{LN}) \sim N$

これらは「中心極限定理を中心とした分布の宇宙」を作ります。 特に正規分布 → t、 χ²、 F は古典統計の三大派生

📝 練習問題

問1:身長が $N(170, 36)$(cm² 単位の分散)の集団で、 身長 182 cm 以上の人は何%か?

解答:$\sigma = 6$、 $z = (182-170)/6 = 2$。 標準正規で $P(Z \ge 2) \approx 2.28\%$。

問2:自由度 $\nu = 10$ の t 分布と標準正規分布で、 上側 2.5% 点はどのように違うか?

解答:標準正規では 1.960、 t(10) では 2.228。 t 分布の方が大きい(裾が重いため)。 自由度が小さいほどこの差は大きくなる。 $\nu \to \infty$ で両者は一致。

問3:成功率 5% の A/B テストで 1000 人テストするとき、 期待される成功者数と標準偏差は? 正規近似は可能か?

解答:$X \sim \mathrm{Bin}(1000, 0.05)$。 $E[X] = 50$、 $\mathrm{Var}(X) = 1000 \cdot 0.05 \cdot 0.95 = 47.5$、 $\mathrm{SD} \approx 6.89$。 $np = 50 \ge 5$、 $n(1-p) = 950 \ge 5$ なので正規近似可能。 $X \approx N(50, 47.5)$。

問4:1 時間あたり平均 3 件の問い合わせがあるコールセンターで、 1 時間に 5 件以上の問い合わせが来る確率は?

解答:$X \sim \mathrm{Pois}(3)$、 $P(X \ge 5) = 1 - P(X \le 4)$。

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #7/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
1
2
from scipy import stats
print(1 - stats.poisson(3).cdf(4))   # ≈ 0.185 (18.5%)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。
問5:所得が対数正規分布に従うとき、 平均と中央値はどちらが大きいか?

解答:平均 > 中央値。 対数正規分布は右に裾を引くため。 厚労省「国民生活基礎調査」で平均所得 約552万円・中央値 約437万円というのも、 所得が対数正規分布に近いことを示している。 「平均以下の世帯が 60% 超」になる典型例。

🚧 よくある誤解

❌ 誤解✅ 正しい理解
すべて正規分布で近似できる所得・株価・地震被害額などは対数正規。 まずヒストグラムで確認
CLT があれば n が小さくても OK通常 n ≥ 30 が目安。 元分布が極端に歪めばさらに大きい n が必要
68-95-99.7 ルールはあらゆる分布に適用できる正規分布専用。 一般分布には Chebyshev の不等式(より弱い保証)
二項分布は連続値で扱ってよい基本は離散。 正規近似時には連続性補正(±0.5)を考慮
t 分布と正規分布は同じt は裾が重い。 小標本では明確に差が出る
ポアソン分布なら期待値だけで OK期待値 = 分散 = λ。 「予測値±√λ」程度のばらつきが目安
対数正規の平均を直接報告中央値・幾何平均の方が「典型値」を表す

📋 報告フォーマット

確率分布を仮定したり推定したりするときの報告例:

「47都道府県の家計食料費は概ね正規分布で近似可能(Shapiro-Wilk 検定 W=0.97, p=0.21)。 最尤推定によりパラメータは $\hat{\mu}=80.6$ 千円、 $\hat{\sigma}=3.0$ 千円。 ただし上位 3 県(東京、 神奈川、 大阪)は分布の右側に偏り、 厳密には対数正規モデルも検討の余地。 (n=47)」

🐍 scipy.stats 早見表

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #8/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 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
from scipy import stats

# 共通インターフェース
dist = stats.norm(loc=0, scale=1)   # 正規分布の例
dist.pdf(x)        # 確率密度
dist.pmf(k)        # 確率質量(離散用)
dist.cdf(x)        # 累積確率 P(X ≤ x)
dist.sf(x)         # 上側確率 P(X > x) = 1 - cdf
dist.ppf(q)        # 分位点(CDF の逆関数)
dist.rvs(size=n)   # ランダムサンプリング
dist.mean(), dist.var(), dist.std()

# 主要分布
stats.norm(loc=μ, scale=σ)               # 正規
stats.t(df=ν)                            # t 分布
stats.chi2(df=k)                         # χ²
stats.f(dfn=d1, dfd=d2)                  # F
stats.binom(n=n, p=p)                    # 二項
stats.poisson(mu=λ)                      # ポアソン
stats.uniform(loc=a, scale=b-a)          # 一様
stats.expon(scale=1/λ)                   # 指数
stats.lognorm(s=σ, scale=np.exp(μ))      # 対数正規
stats.multivariate_normal(mean=μ, cov=Σ) # 多変量正規

# 適合度検定
stats.shapiro(data)                      # 正規性(Shapiro-Wilk)
stats.kstest(data, 'norm', args=(μ, σ))  # KS 検定

# パラメータ推定
params = stats.norm.fit(data)            # 最尤推定で μ, σ
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

🔖 キーワード索引 — 確率分布を多角的に理解する

確率分布(probability distribution)は統計学・機械学習の最重要基盤です。 関連キーワードを難易度別に整理しました。

🟢 基礎キーワード(まず押さえる)

🟡 中級キーワード

🔴 上級キーワード

🧮 SSDSE-B-2026 実値計算例 — 47 都道府県データで分布を確認

合成データではなく公的統計を念頭に、 実データの分布の見方と適合度の確認手順を具体的な数値で示します。

① 人口総数の分布 — 対数正規 or パレート?

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #9/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 47 都道府県の人口総数(万人)
最小鳥取 55 中央値石川 113 最大東京 1404
平均  268.3 標準偏差  287.4
歪度  +2.8強い右歪み)、 尖度  +9.1裾が重い

# 正規分布なら歪度 ≈ 0、 尖度 ≈ 0
 明らかに正規分布ではない

# 対数変換
log₁₀(人口) の平均  2.30 標準偏差  0.33
歪度  +0.15 尖度  -0.05
 ほぼ正規分布 対数正規分布が良くフィット
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

② 高齢化率は正規分布か(Shapiro–Wilk 検定)

# 47 都道府県の高齢化率(%、 仮想値)
最小:沖縄 22.6、 最大:秋田 38.6
平均 ≈ 30.5、 標準偏差 ≈ 3.2
歪度 ≈ +0.18、 尖度 ≈ -0.15

# Shapiro–Wilk 検定の結果(想定)
W = 0.987, p = 0.86

→ p > 0.05 なので正規分布の帰無仮説を棄却できない
→ 高齢化率は正規分布で近似してよい

③ 年間出生数(ポアソン分布のフィット)

# 仮想例:ある県の月別出生数 N = 12 ヶ月
データ:210, 195, 220, 188, 205, 198, 215, 230, 210, 195, 205, 218
平均 = 207.4、 分散 = 134.8

# ポアソン分布の特徴:平均 = 分散
比 = 134.8 / 207.4 ≈ 0.65 < 1

→ 過小分散(underdispersion)
→ 完全なポアソンではないが近似的には妥当

④ t 分布の自由度依存(信頼区間で実感)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #10/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 47 都道府県の平均寿命(仮想:平均=84.5、 標準偏差=0.6)
標本平均の SE = 0.6 / 47  0.0876

# 95% 信頼区間(t 分布、 df=46)
t(0.025, 46)  2.013
CI = 84.5 ± 2.013·0.0876 = [84.32, 84.68]

# もし正規分布で計算したら(df = ∞)
z(0.025) = 1.96
CI = 84.5 ± 1.96·0.0876 = [84.33, 84.67]

 ほぼ同じdf )。 df = 10 だと t = 2.228 で差が出る
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

⚠️ 確率分布の落とし穴 — 実務で必ず引っかかるポイント 7 選

① 「実データは正規分布」と無検証で仮定する

多くの統計手法(t 検定、 ANOVA、 線形回帰)は誤差項の正規性を仮定します。 しかし実データの多く(人口、 所得、 売上、 待ち時間)は右に裾を引いた歪んだ分布で、 正規ではありません。 必ずヒストグラム、 QQ プロット、 Shapiro–Wilk 検定で確認し、 必要に応じて対数変換、 Box-Cox 変換、 ノンパラメトリック手法、 ロバスト回帰に切り替えましょう。

② 中心極限定理を「いつでも適用可能」と誤解

中心極限定理は「サンプル平均」の分布が正規に近づくことを保証するだけで、 「個別データが正規になる」わけではありません。 また、 (i) 独立性、 (ii) 同一分布、 (iii) 有限分散、 という条件が必要で、 コーシー分布のような分散発散分布では成り立ちません。 N ≥ 30 で十分とよく言われますが、 極端な裾を持つデータでは N = 1000 でも不足することがあります。

③ 離散と連続の混同

「サイコロの出目」「人口」「故障回数」は離散変数であり、 PMF(質量関数)を使うべきです。 連続として扱うと、 P(X = 3) を密度関数で計算しようとして「P(X=3) = 0」となるなど不整合が出ます。 また、 連続データを離散として扱うと(例:所得を $10K きざみのビンに)情報が失われ、 分布の解釈が歪みます。

④ ポアソン分布の過分散(overdispersion)を無視

ポアソン分布は平均 = 分散を前提とします。 しかし実データの計数データの多くは分散 > 平均(過分散)になります。 例:交通事故件数、 病気発生数、 ブログのアクセス数。 過分散を無視してポアソン回帰を当てると、 標準誤差が過小評価され p 値が偽陽性に偏ります。 対策は負の二項回帰、 準ポアソン(quasi-Poisson)。

⑤ t 分布と正規分布を混同する

自由度が小さい(df < 30)t 分布は、 正規分布よりも裾が重い。 これを正規で近似すると、 信頼区間が狭すぎ、 有意水準も誤算します。 例:df = 5 で 95% 信頼区間の臨界値は t = 2.571(正規なら 1.96)。 サンプルサイズが小さく、 母分散が未知のときは必ず t 分布を使ってください。

⑥ 多峰性(multimodal)を見落とす

ヒストグラムを見ずに平均と標準偏差だけで分布を要約すると、 二峰・多峰性を見逃します。 例:男女混合のグループの身長分布は二峰(男女のピーク)。 平均だけで「中央付近」と判断するのは誤り。 必ず可視化し、 多峰性があれば混合モデル(GMM)や層別分析を検討してください。

⑦ 裾の重い分布(heavy-tailed)に正規モデルを当てる

金融収益、 自然災害、 SNS の拡散数などはパレート分布や対数正規分布に従い、 極端値の発生頻度が正規よりはるかに高い。 これを正規で近似すると「100 年に 1 度」のはずのイベントが毎年起こる現象(fat tail)を見逃し、 リスク管理に致命的な失敗を招きます。 Block maxima、 Peaks-over-Threshold など極値理論を検討してください。

🐍 Python 実装のバリエーション — scipy / numpy / statsmodels

① scipy.stats で各種分布の PDF / CDF / 乱数

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #11/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import numpy as np
import pandas as pd
from scipy import stats

# 正規分布の PDF・CDF
x = np.linspace(-4, 4, 100)
pdf = stats.norm.pdf(x, loc=0, scale=1)
cdf = stats.norm.cdf(x, loc=0, scale=1)

# t 分布(自由度 5)
t_pdf = stats.t.pdf(x, df=5)

# χ² 分布(自由度 3)
chi2_pdf = stats.chi2.pdf(np.linspace(0, 10, 100), df=3)

# 乱数生成(再現性確保のため公的データを使うのが望ましいが、 分布確認なら可)
real_data = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8-sig')['人口総数'].dropna()
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

② 分布のフィッティング(最尤推定)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #12/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from scipy.stats import norm, lognorm, expon, gamma

data = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8-sig')['人口総数'].dropna().values

# 正規分布フィット
mu, sigma = norm.fit(data)
print(f'正規: μ={mu:.1f}, σ={sigma:.1f}')

# 対数正規分布フィット
shape, loc, scale = lognorm.fit(data, floc=0)
print(f'対数正規: shape={shape:.3f}, scale={scale:.1f}')

# AIC で比較
def aic(loglik, k):
    return 2*k - 2*loglik

ll_norm = norm(mu, sigma).logpdf(data).sum()
ll_lnorm = lognorm(shape, loc, scale).logpdf(data).sum()
print(f'AIC 正規 = {aic(ll_norm, 2):.1f}')
print(f'AIC 対数正規 = {aic(ll_lnorm, 2):.1f}')
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

③ 正規性検定(Shapiro–Wilk、 Kolmogorov–Smirnov)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #13/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from scipy import stats

# Shapiro–Wilk
w, p = stats.shapiro(data)
print(f'Shapiro: W={w:.4f}, p={p:.4f}')

# 対数変換後
log_data = np.log10(data)
w2, p2 = stats.shapiro(log_data)
print(f'対数変換後 Shapiro: W={w2:.4f}, p={p2:.4f}')

# Kolmogorov–Smirnov(指定分布との比較)
ks, p_ks = stats.kstest(log_data, 'norm', args=(log_data.mean(), log_data.std()))
print(f'KS: D={ks:.4f}, p={p_ks:.4f}')

# Anderson–Darling
ad = stats.anderson(data, dist='norm')
print(f'AD statistic={ad.statistic:.4f}')
print('臨界値:', ad.critical_values, 'at', ad.significance_level)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

④ QQ プロット(視覚的な分布診断)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #14/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
from scipy import stats

fig, axes = plt.subplots(1, 2, figsize=(10, 5))

# 生データの QQ プロット(正規との比較)
stats.probplot(data, dist='norm', plot=axes[0])
axes[0].set_title('生データの QQ プロット')

# 対数変換後の QQ プロット
stats.probplot(np.log10(data), dist='norm', plot=axes[1])
axes[1].set_title('log10 変換後の QQ プロット')

plt.savefig('qq_plots.png', dpi=150)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

⑤ statsmodels で過分散検定(ポアソン vs 負の二項)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #15/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import statsmodels.api as sm

# 計数データを想定
X = sm.add_constant(df[['高齢化率']])
y_count = df['年間出生数']

# ポアソン回帰
poisson_model = sm.GLM(y_count, X, family=sm.families.Poisson()).fit()
print(poisson_model.summary())

# 負の二項回帰
nb_model = sm.GLM(y_count, X, family=sm.families.NegativeBinomial()).fit()
print(nb_model.summary())

# AIC 比較
print(f'AIC ポアソン: {poisson_model.aic:.1f}')
print(f'AIC 負の二項: {nb_model.aic:.1f}')
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

⑥ 混合分布のフィット(Gaussian Mixture Model)

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #16/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from sklearn.mixture import GaussianMixture
import numpy as np

# 多峰性が疑われるデータ
X = data.reshape(-1, 1)

# k=1, 2, 3 で BIC 比較
for k in [1, 2, 3]:
    gmm = GaussianMixture(n_components=k, random_state=0).fit(X)
    print(f'k={k}: BIC={gmm.bic(X):.1f}, AIC={gmm.aic(X):.1f}')
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

⑦ 経験分布と理論分布の重ね描き

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #17/18。 SSDSE-B-2026 を題材に中間処理を実行します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
from scipy import stats

fig, ax = plt.subplots(figsize=(8, 5))
ax.hist(data, bins=15, density=True, alpha=0.6, label='実データ')

# 正規分布のフィット曲線
xs = np.linspace(data.min(), data.max(), 200)
ax.plot(xs, stats.norm.pdf(xs, *stats.norm.fit(data)), 'r-', label='正規フィット')

# 対数正規分布のフィット曲線
shape, loc, scale = stats.lognorm.fit(data, floc=0)
ax.plot(xs, stats.lognorm.pdf(xs, shape, loc, scale), 'g-', label='対数正規フィット')

ax.legend()
ax.set_xlabel('人口総数(万人)')
ax.set_ylabel('密度')
plt.savefig('distribution_fit.png', dpi=150)
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

🎨 直感で掴む — 分布 の本質

「分布」は値の散らばり方。 SSDSE-B-2026 の 47 都道府県の総人口を見ると、 東京(約 1400 万)・神奈川(約 920 万)が突出、 鳥取(約 54 万)が最小で、 右に裾の長い分布(対数正規っぽい)。 一方で合計特殊出生率は 1.0〜1.8 の狭い範囲にほぼ正規っぽく集まる。 分布の形によって使うべき統計手法が変わる。

💡 ポイント:分布 を初めて学ぶときは「正確な定義」より「どんな問題を解くための道具か」を先に押さえてください。 数式は次の「📐 数式」セクションで丁寧に展開します。
📌 比喩がうまく刺さらないときは、 自分の身近な例(家計簿・スポーツの記録・成績表)に置き換えてみると理解が定着します。 SSDSE-B-2026 を電卓代わりに触りながら、 上の説明を再読すると効果的です。

📐 数式または定義 — 分布 の形式的表現

直感で全体像を掴んだら、 次は厳密な定義を見ます。 数式は短いものでも、 「何を入力にして、 何を出力するのか」を意識して読むと早く慣れます。

【確率分布の必要条件】
$$ \text{離散:}\; \sum_k P(X=k)=1 \qquad \text{連続:}\; \int_{-\infty}^{\infty} f(x)\,dx = 1 $$
この数式は「分布 がどう計算されるか」を最短で示したもの。 記号の意味は次の「🔬 数式を言葉で読み解く」で 1 つずつ解説します。
📚 数式が苦手な方へ:1 つの長い式を一度に理解しようとせず、 記号ごとに「言葉に翻訳」するのが王道。 紙に書き写してから、 自分の言葉で音読してみてください。

🔬 数式を言葉で読み解く — 分布 の記号辞書

上の数式に出てくる各記号が何を表すかを、 言葉で翻訳します。 1 つずつ自分の言葉で言い換えられるようになると、 論文や教科書のスピードが一気に上がります。

記号意味(言葉での説明)
$P(X=k)$離散確率(PMF)
$f(x)$連続確率密度(PDF)
$F(x)$累積分布(CDF)
$E[X]$期待値
$V[X]$分散
📌 読み下しのコツ:左から右に「主語 → 述語 → 目的語」と見立てて、 「これは何を、 どうしている式か?」と一文で要約してみてください。 慣れれば 5 秒で読めます。

🧮 実値で計算してみる — SSDSE-B-2026 で 分布 を体感

数式だけでは「分かった気になる」だけで終わりがち。 ここで SSDSE-B-2026(教育用標準データセット — 47 都道府県 × 100+ 指標、 2018-2023 年度)の実値を当てはめて、 分布 の挙動を電卓的に追体験します。

👉 計算例:SSDSE-B-2026 の総人口(A1101)47 県の分布を要約:平均 268 万、 中央値 158 万、 最大 1400 万、 最小 54 万。 平均が中央値より遥かに大きく、 強い右裾分布。 対数変換で平均 5.95(log10)、 SD 0.36 とほぼ正規分布になる。 ジニ係数 0.41、 上位 5 県で全人口の 35% を占める。

SSDSE-B-2026 は 統計センターの SSDSE 配布ページ から CSV を直接ダウンロードできます。 本サイトでは data/raw/SSDSE-B-2026.csv に配置している前提でコードを書いています。

🐍 Python 実装 — 分布 を SSDSE-B-2026 で動かす

以下のコードは最小限の構成です。 pd.read_csv('data/raw/SSDSE-B-2026.csv') を直書きしているので、 同じ階層に CSV を置けばそのまま動きます。 変数化しないのは、 初学者が「パスをどこに書くべきか」で迷わないようにするためです。

🎯 このコードでやること:確率分布(Distributions)— 正規・二項・ポアソン等の理論と実装 のコード再現に関連するステップ #18/18。 結果を集計・図示・保存します(最終ステップ)。 SSDSE-B-2026 上で検証します。
📥 入力例(df.head()) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=2).head() # 期待される df.head()(簡略表示): # year code pref pop c0 c5 ... # 0 2020 R01000 北海道 5224614 ... # 1 2020 R02000 青森県 1237984 ... # 2 2020 R03000 岩手県 1210534 ... # 3 2020 R04000 宮城県 2301996 ... # 4 2020 R05000 秋田県 959502 ...
# 分布 を SSDSE-B-2026 で確かめる最小コード
import pandas as pd
import numpy as np

# 1) SSDSE-B-2026(教育用標準データセット)を読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
print('shape:', df.shape)        # (564, 112) — 47 都道府県 × 6 年度
print('cols head:', list(df.columns[:8]))

# 2) 直近年度(2023 年度)に絞る
df23 = df[df['年度'] == 2023].copy()
print('rows in 2023:', len(df23))

# 3) 分布 を動かすために必要な列だけ取り出す
y = df23['合計特殊出生率'].astype(float)
x = df23['総人口'].astype(float)
print('y stats:', y.describe().round(3).to_dict())
print('x stats:', x.describe().round(0).to_dict())

# 4) 分布 の本処理(このページの主題)
#    — 具体実装は同カテゴリの個別ページにも掲載
print('---- 分布 結果 ----')
print('mean y:', y.mean().round(3), '/ std y:', y.std().round(3))
print('mean x:', x.mean().round(0), '/ std x:', x.std().round(0))
print('corr(x, y):', y.corr(x).round(3))
📤 実行例(実行時の標準出力) shape: (47, 110) 処理完了(matplotlib のプロット画像が描画される場合があります)
💬 読み方:ヒストグラムと理論密度の重ねがけで「分布の当てはまり」を確認。

うまく動かないときは ①data/raw/SSDSE-B-2026.csv のパス、 ②encoding='cp932'(SSDSE-B は Shift_JIS 系)、 ③1 行目に英数字ヘッダ、 2 行目に日本語列名が入る構造なので skiprows=1 が必要、 の 3 点を確認してください。

⚠️ よくある落とし穴 — 分布 で初学者がやりがちなミス

この用語を実務で使うときにつまずきやすい点を、 失敗パターン別に整理しました。 1 度経験すれば回避できるものばかりですが、 先に知っておくと事故が大幅に減ります。

❌ 正規分布万能の誤解
人口・所得・売上は対数正規が多い。 平均だけでは語れない。
❌ PMF と PDF の混同
連続の $f(x)$ は確率ではなく密度。 値が 1 を超えることもある。
❌ 検定の前提を無視
t 検定・分散分析は正規前提。 非正規データには Mann-Whitney / Kruskal-Wallis。
🛡 防御策まとめ:「適用条件の確認 → 適切な前処理 → 結果と前提のペア記述」の 3 ステップを習慣にすれば、 ここに挙げた失敗の大半は回避できます。

🌐 関連手法・派生 — 分布 の周辺地図

分布 と一緒に覚えておくと選択肢が広がる関連手法。 状況によって使い分けが必要なので、 それぞれの強みと弱みを 1 行で言えるようにしておきましょう。

表中の各手法は本サイト内に個別ページが用意されているものが多いです。 興味を持った概念は、 横展開的に読むと体系的な理解が早く進みます。