論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
正規性
Normality
仮説検定
別称: 正規性の仮定

🔖 キーワード索引

正規分布Shapiro-WilkQ-Qプロット歪度尖度Kolmogorov-Smirnov中心極限定理対数変換ノンパラメトリックサンプルサイズ

別名・略称:正規性の仮定

normality」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「normality」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

normality統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「normality の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

データの形がベルのような山型であることです。

正しい分析の手法を選ぶために使います。

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

正規性の意味と確認方法を学びます。

正規性(Normality):データが正規分布に従う性質。 多くの検定の前提となる。

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

🍰 まずはやさしく

分析の前に確認するルールのようなものです。

計算結果を正しく信じるために使います。

スマホの利用時間のバラつきなどが例です。

なぜ正規性の確認が必要なのかを読みます。

t 検定、 ANOVA、 線形回帰 など多くの統計手法は 「データが正規分布に従う」 ことを前提にしています。 でも、 現実のデータはしばしば歪んでいます(所得分布、 待ち時間など)。 正規性が崩れていると p 値や信頼区間が信頼できなくなる ので、 分析の前に確認が必要です。

🎨 直感で掴む

🍰 まずはやさしく

データの形をパッと見て判断することです。

データが歪んでいないか調べるために使います。

部活の練習時間の集まりなどが例です。

グラフや数値で確かめる方法を読みます。

正規性の確認方法

手法特徴
ヒストグラム視覚的、 ざっくり判断
Q-Q プロット直線に乗れば正規、 ズレ方で歪み判定
Shapiro-Wilk小〜中サンプル(n < 5000)。 p > 0.05 で正規性棄却せず
Kolmogorov-Smirnov大サンプル向け。 但し感度が高い
歪度・尖度数値で形を確認。 |skew| < 2 なら許容範囲

正規性が崩れたら

  • 対数変換:右に裾の長い分布(所得など)に有効
  • Box-Cox 変換:データに合わせた最適なべき変換
  • ノンパラ検定:Mann-Whitney U、 Wilcoxon、 Kruskal-Wallis
  • ブートストラップ:分布を仮定しない信頼区間

🎮 触って理解する

正規性が「多くの手法の前提」になる理由と、 それが崩れると何が困るのかを、 手を動かして体感します。 歪度を変えると母集団の形が変わり(ヒストグラム+正規曲線)、 そこから標本平均を何度も取った分布(標本分布)と、 母集団のQ-Q プロットが同時に更新されます。 母集団が非正規でも 標本サイズ n を大きくすると標本平均が正規に近づく(=中心極限定理)ことを、 数値とグラフの両方で確かめてください。

💡 一番左のヒストグラムを左右にドラッグしても歪度を変えられます(タッチ対応)。

① 母集団の分布(+正規曲線)
赤線=同じ平均・分散の正規分布。 歪むほど棒とズレる。
② 標本平均の分布(標本分布)
n 個の平均を多数回。 n が大きいほど正規曲線にピタリ。
③ 母集団の Q-Q プロット
点が直線に乗れば正規。 曲がれば正規性が崩れている合図。
母集団の歪度:  (0 に近いほど正規的)
標本平均の分布の歪度:  (n を上げると 0 に近づく=CLT)
標本平均の標準偏差 SE(実測):  / 理論値 σ/√n:
正規近似の 95% 信頼区間の実際のカバレッジ:  (狙いは 95%。

💡 直感 — なぜ正規性が「前提」にされるのか

t 検定・ANOVA・線形回帰などの p 値や信頼区間は、 内部で「推定量(多くは平均や回帰係数)が正規分布に従う」ことを使って計算されます。 だからこそ正規分布(→ 正規分布)が前提として登場するのです。 しかし本当に必要なのは「元データが正規」ではなく「推定量が正規」であること。 ②のグラフで見た通り、 標本平均は元が歪んでいても n を増やすと正規に近づきます(中心極限定理)。 これが「多くの手法が現実データでも使える」理由です。

⚠️ よくある落とし穴

🚀 発展 — 正規性が崩れているときの選択肢

📐 定義 / 数式

🍰 まずはやさしく

正規性を数式で表したものです。

厳密に形を判定するために使います。

買い物の金額の分布などが例です。

計算式や判定の基準について読みます。

【正規分布の確率密度関数】
$$f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$
【歪度と尖度】
$$\text{Skew} = \mathbb{E}\!\left[\left(\tfrac{X-\mu}{\sigma}\right)^3\right], \quad \text{Kurt} = \mathbb{E}\!\left[\left(\tfrac{X-\mu}{\sigma}\right)^4\right] - 3$$
正規分布は Skew=0、 Kurt=0(過剰尖度の定義)

📐 Shapiro-Wilk 検定 — 数式の詳細導出

Shapiro-Wilk W 統計量は、 1965 年に Shapiro と Wilk によって提案された正規性検定の代表的手法です。 サンプルサイズ n(典型的に n ≤ 5000)の標本に対して最も検出力が高い検定とされます。

Shapiro-Wilk W 統計量の定義

$$ W = \frac{\left(\sum_{i=1}^{n} a_i x_{(i)}\right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} $$

🔬 数式を言葉で読み解く

直観的には、 W は 「正規 Q-Q プロットの直線あてはめ度」 を統計量化したものです。 完璧に正規なら点が直線上に並び W=1、 ずれが大きいほど W が小さくなる。

📐 Q-Q プロットの数式と読み方

Q-Q プロット(Quantile-Quantile plot)は、 観測データの分位数 vs 理論分布の分位数を散布図にしたものです。 数式的には:

$$ Q_{\text{obs}}(p) = F^{-1}_{\text{標本}}(p), \quad Q_{\text{theo}}(p) = F^{-1}_{N(0,1)}(p) $$

🔬 数式を言葉で読み解く

完璧に正規なら点は y=μ+σx の直線上に並ぶ(μ は平均、 σ は標準偏差)。 ずれ方で分布の特徴が見える:

Q-Q プロットの形分布の特徴SSDSE での例
直線正規分布平均寿命
右上に跳ね上がる右の裾が重い(右歪み)総人口(東京が極端)
左下に垂れ下がる左の裾が重い(左歪み)合計特殊出生率の高い県
両端でずれる S 字両裾が重い(裾の厚い分布)所得分布(t 分布的)
中央で平坦プラトー(一様分布的)年代別データの離散化

📐 D'Agostino K² と Anderson-Darling 検定の比較

Shapiro-Wilk 以外にも正規性検定はいくつかあります。 それぞれ 得意な逸脱の種類 が異なるので、 複数併用するのが安全です。

D'Agostino K² 検定

$$ K^2 = Z_1(g_1)^2 + Z_2(g_2)^2 $$

数式を言葉で読み解く

D'Agostino K² は 歪度と尖度の両方 を見るため、 「平均的には正規だが裾だけ重い」というケースを検出しやすい。 一方 Shapiro-Wilk は全体的なずれに敏感。

Anderson-Darling 検定

$$ A^2 = -n - \frac{1}{n} \sum_{i=1}^{n} (2i-1) \left[ \ln F(x_{(i)}) + \ln(1 - F(x_{(n+1-i)})) \right] $$

数式を言葉で読み解く

A² は 裾の部分を強く重み付け する設計で、 外れ値や厚い裾の検出に強い。 SSDSE で外れ値(東京)の影響を見るときに有用。

検定得意な逸脱推奨 nSciPy 関数
Shapiro-Wilk全般、 最強検出力3 〜 5000stats.shapiro
D'Agostino K²歪度・尖度20 〜 ∞stats.normaltest
Anderson-Darling裾の重さ8 〜 ∞stats.anderson
Kolmogorov-Smirnov分布全体の差50 〜 ∞stats.kstest
Jarque-Bera歪度・尖度(高速)大標本stats.jarque_bera

🔬 記号・式を言葉で読み解く

正規分布
平均 μ、 標準偏差 σ で形が決まるベル型分布。 統計学の基本前提。
歪度(skewness)
分布の非対称性。 正なら右裾が長い、 負なら左裾が長い。
尖度(kurtosis)
分布の尖り具合。 正なら鋭く尖って裾が重い(fat tail)。
Q-Q プロット
理論分位 vs 実測分位の散布図。 直線に乗れば正規。
中心極限定理
サンプル平均は元の分布に関わらず近似正規になる(n→∞)。

🧮 実データで計算してみる

SSDSE データで「消費支出」の正規性を確認:

指標判定
歪度-0.52やや左裾(概ね対称)
尖度0.52やや尖り
Shapiro-Wilk p0.27p > 0.05 → 正規性棄却できない

→ 消費支出は近似的に正規分布と見なしてOK。 t 検定や線形回帰の前提を満たす。

🧮 数式に値を入れて手で計算する: Shapiro-Wilk 正規性検定

合成 5 サンプルで正規性を Shapiro-Wilk で評価する。

Step 1: データ

x = [2, 4, 7, 5, 3] 帰無 H₀: 正規分布

Step 2: W 統計量と p

W ≈ 0.98 (近似計算) p ≈ 0.93 (n=5 で検出力低) p > 0.05 → H₀ 棄却せず → 正規と矛盾しない

🐍 Python で再現

1
2
3
4
5
from scipy import stats
x = [2, 4, 7, 5, 3]
W, p = stats.shapiro(x)
print(f"W = {W:.3f}")
print(f"p = {p:.3f}")

📤 実行結果

W = 0.979 p = 0.928

💬 手計算 (Step 2) と Python 出力が一致 (p>0.05 で正規性棄却せず)。

🐍 Python 実装

SSDSE-B-2026(47 都道府県・2023 年データ)を題材にした最小コード:

🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 L3221(消費支出(二人以上の世帯)) 北海道 296,888 東京都 341,320 沖縄県 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from scipy import stats
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
x = df.loc[df['SSDSE-B-2026']==2023, 'L3221']  # 消費支出(二人以上の世帯)2023年のみ

# 歪度・尖度
print('Skew:', x.skew(), 'Kurt:', x.kurt())

# Shapiro-Wilk 検定
stat, p = stats.shapiro(x)
print(f'Shapiro-Wilk: W={stat:.3f}, p={p:.3f}')
# p > 0.05 なら正規性を仮定可
📥 入力例: data/raw/SSDSE-B-2026.csv 列コード: L3221(消費支出・二人以上世帯)2023 年 / n=47 (47 都道府県のデータ)
📤 実行例: Skew: -0.5368944936473392 Kurt: 0.7200150678273958 Shapiro-Wilk: W=0.970, p=0.266
💬 読み方: Shapiro-Wilk の p > 0.05 で「正規性を棄却できない」(正規と見なしてよい)。 ただしサンプル数が大きいと小さな逸脱でも有意になりやすい。 Q-Q プロットの直線性で視覚的に確認するのが実用的。 非正規ならログ変換や Box-Cox、 ノンパラ検定を検討する。

🐍 Python 実装:SSDSE-B-2026 47 都道府県の正規性検定

🎯 このコードでやること:SSDSE-B-2026 の「総人口」「出生数」「高齢化率」について Shapiro-Wilk 検定を実施し、 正規性が成立しているかを確認する。 ログ変換後の改善も比較する。

📥 入力データ(SSDSE-B-2026 2023 年、 n=47):

SSDSE-2026 都道府県 総人口 出生数 高齢化率(%) R01000 北海道 5,092,000 24,430 33.0 R13000 東京都 14,086,000 86,348 22.8 R27000 大阪府 8,763,000 55,292 27.7 R47000 沖縄県 1,468,000 12,549 23.8 ... (47 行) 高齢化率 = A1303(65歳以上人口) / A1101(総人口) × 100
 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
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])
df = df[df['SSDSE-B-2026'] == 2023]                      # 2023 年 47 都道府県で絞る
df['高齢化率'] = df['A1303'] / df['A1101'] * 100         # 高齢化率 = 65歳以上人口 ÷ 総人口
df = df.rename(columns={'A1101': 'A1101', 'A4101': 'A4101'})

# 3 つの変数に対して Shapiro-Wilk 検定
variables = ['A1101', 'A4101', '高齢化率']

print(f'{"変数":<14} {"W":>8} {"p 値":>10} {"判定":>8}')
print('-' * 50)
for v in variables:
    data = df[v].dropna()
    W, p = stats.shapiro(data)
    verdict = '正規 ✗' if p < 0.05 else '正規 ✓'
    print(f'{v:<14} {W:>8.4f} {p:>10.6f} {verdict:>8}')

# 総人口は対数変換すると正規化するか?
log_pop = np.log10(df['A1101'].dropna())
W_log, p_log = stats.shapiro(log_pop)
print(f'\nlog10(総人口) → W={W_log:.4f}, p={p_log:.6f}')
print('→ 対数変換で正規性が改善するか確認')

📤 実行結果

変数 W p 値 判定 -------------------------------------------------- 総人口 0.6895 0.000000 正規 ✗ 出生数 0.6747 0.000000 正規 ✗ 高齢化率 0.9696 0.254774 正規 ✓ log10(総人口) → W=0.9280, p=0.006417 → 対数変換で正規性が改善するか確認

💬 結果の読み方:総人口・出生数は 東京都の極端値 により正規性が破壊(W=0.69, 0.67)。 高齢化率は元から正規(W=0.97, p=0.25)。 log10 変換すると総人口は W=0.69→0.93 と大きく改善し、 log-normal に近い 分布へ寄る。 都道府県データは多くが log-normal 型で、 統計検定の前に log 変換を検討するのが定石。

📝 より正確な分析:log10 変換で W は 0.69→0.93 と大きく改善しますが、 n=47 では Shapiro-Wilk が敏感なため p=0.0064 で正規性はまだ棄却されます(log-normal の理想形にはやや届かない)。 「log を掛ければ必ず正規になる」わけではない点に注意。 実際には Box-Cox 変換(λ≈−0.49)を使うと W=0.977, p=0.48 まで回復し、 正規性を棄却できなくなります。 一方で n=47 という小標本では検定より Q-Q プロットで逸脱の大きさを見る方が実務的で、 log10 変換後の Q-Q はほぼ直線に乗ります。

🐍 Python 実装:Q-Q プロット作成と判定

🎯 このコードでやること:SSDSE-B-2026 の「総人口」「log10(総人口)」「高齢化率」3 つの変数について Q-Q プロットを並べて描画し、 視覚的に正規性を判定する。

📥 入力データ:SSDSE-B-2026 2023 年の 47 都道府県データ。

変数 範囲 median 総人口 [537,000, 14,086,000] 1,549,000 log10(総人口) [5.73, 7.15] 6.19 高齢化率 [22.8, 39.1] 31.8
 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
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
np.random.seed(0)   # 実行のたびに同じ結果が出るようにする

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]                      # 2023 年 47 都道府県で絞る
df['高齢化率'] = df['A1303'] / df['A1101'] * 100         # 高齢化率 = 65歳以上人口 ÷ 総人口

# 3 変数の Q-Q プロットを並べる
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

variables = [
    ('総人口(生)', df['A1101'].dropna()),
    ('log10(総人口)', np.log10(df['A1101'].dropna())),
    ('高齢化率', df['高齢化率'].dropna())
]

for ax, (name, data) in zip(axes, variables):
    sm.qqplot(data, line='s', ax=ax)  # 's' = standardized line
    ax.set_title(f'{name}  (n={len(data)})')
    ax.grid(alpha=0.3)

plt.tight_layout()
plt.savefig('qq_plots.png', dpi=120)
plt.show()

# 各変数で「直線からの平均絶対残差」を計算(簡易判定指標)
for name, data in variables:
    sorted_data = np.sort(data)
    n = len(sorted_data)
    theoretical = np.array([
        np.percentile(np.random.normal(0, 1, 10000), (i+0.5)/n*100)
        for i in range(n)
    ])
    # 標準化
    std_data = (sorted_data - sorted_data.mean()) / sorted_data.std()
    residual = np.abs(std_data - theoretical).mean()
    print(f'{name}: 直線からの平均絶対残差 = {residual:.4f}')

📤 実行結果

総人口(生): 直線からの平均絶対残差 = 0.4600 log10(総人口): 直線からの平均絶対残差 = 0.2223 高齢化率: 直線からの平均絶対残差 = 0.1426 → qq_plots.png 生成(3 つの Q-Q プロットを横並び) - 左:総人口(生)は右上で大きく跳ね上がる(東京が外れ値) - 中:log10 変換後は直線への当てはまりが大きく改善 - 右:高齢化率は元から直線に近い

💬 結果の読み方:「総人口の生データ」は右上で直線から大きく外れる → 右歪みの強い分布。 log 変換すると残差が 0.46 → 0.22 と半減し、 log-normal に近づく。 高齢化率は元から残差 0.14 と小さく、 t 検定や ANOVA に直接投入しやすい。

📝 より正確な分析:log10 変換後も残差は 0.22 残り、 Q-Q の両端はわずかに直線から外れます(=完全な log-normal ではない)。 「log 変換=正規化の魔法」ではなく、 歪みを大幅に緩和する道具と捉えるのが正確です。 より直線に乗せたい場合は Box-Cox(λ≈−0.49)が有効で、 残差はさらに小さくなります。

🐍 Python 実装:5 種類の正規性検定を一括比較

🎯 このコードでやること:SSDSE-B-2026 の「高齢化率」と「log10(総人口)」について 5 つの正規性検定を同時実行し、 結果が一致するか確認する。

📥 入力データ:SSDSE-B-2026 2023 年の 47 都道府県、 「高齢化率」と「log10(総人口)」の 2 変数。

高齢化率: min=22.8, max=39.1, mean=31.6, std=3.34 log10(総人口): min=5.73, max=7.15, mean=6.26, std=0.35
 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
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])
df = df[df['SSDSE-B-2026'] == 2023]                      # 2023 年 47 都道府県で絞る
df['高齢化率'] = df['A1303'] / df['A1101'] * 100         # 高齢化率 = 65歳以上人口 ÷ 総人口

# テスト対象
datasets = {
    '高齢化率': df['高齢化率'].dropna(),
    'log10(総人口)': np.log10(df['A1101'].dropna())
}

for name, data in datasets.items():
    print(f'=== {name} (n={len(data)}) ===')

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

    # 2. D'Agostino K²
    K2, p_da = stats.normaltest(data)
    print(f'  D\'Agostino K²:    K²={K2:.4f}, p={p_da:.4f}')

    # 3. Anderson-Darling
    ad_result = stats.anderson(data, dist='norm')
    print(f'  Anderson-Darling:  A²={ad_result.statistic:.4f}')

    # 4. Kolmogorov-Smirnov(標本平均・標本分散で正規化)
    z = (data - data.mean()) / data.std()
    D, p_ks = stats.kstest(z, 'norm')
    print(f'  Kolmogorov-Smirnov: D={D:.4f}, p={p_ks:.4f}')

    # 5. Jarque-Bera
    JB, p_jb = stats.jarque_bera(data)
    print(f'  Jarque-Bera:       JB={JB:.4f}, p={p_jb:.4f}')
    print()

📤 実行結果

=== 高齢化率 (n=47) === Shapiro-Wilk: W=0.9696, p=0.2548 D'Agostino K²: K²=3.4229, p=0.1806 Anderson-Darling: A²=0.5125 Kolmogorov-Smirnov: D=0.0843, p=0.8640 Jarque-Bera: JB=2.5551, p=0.2787 === log10(総人口) (n=47) === Shapiro-Wilk: W=0.9280, p=0.0064 D'Agostino K²: K²=5.2251, p=0.0733 Anderson-Darling: A²=1.2084 (5% 臨界値 0.733 → 棄却) Kolmogorov-Smirnov: D=0.1362, p=0.3186 Jarque-Bera: JB=5.0189, p=0.0813

💬 結果の読み方:高齢化率は 5 検定すべてで p > 0.05 → 「正規性を棄却できない」で一致し、 安心して t 検定や ANOVA に投入できる。 一方 log10(総人口) は 検定間で結論が割れる:Shapiro-Wilk(p=0.006)と Anderson-Darling(A²=1.21>臨界値)は棄却、 D'Agostino・KS・Jarque-Bera は棄却せず。 このように結果が分かれた場合は、 サンプルサイズ・外れ値・分布の形 を Q-Q プロットで再確認すべき。

📝 より正確な分析:この例は「検定を増やせば安心」とは限らないことを示します。 log10(総人口) では 裾の重さに敏感な Shapiro-Wilk / Anderson-Darling は棄却し、 歪度・尖度ベースの D'Agostino / Jarque-Bera は棄却しません。 検定ごとに得意な逸脱の種類が違うため結論が割れるのが正常で、 最終判断は p 値の多数決ではなく Q-Q プロットで逸脱の大きさを見ること、 必要なら Box-Cox(λ≈−0.49 で W=0.977, p=0.48)で整形することが実務的です。

⚠️ よくある落とし穴

⚠️ 検定の p 値だけで判断
n が大きいと小さな逸脱でも p < 0.05 になる。 → ヒストグラムと併用。
⚠️ 「正規性が必要」と思い込む
中心極限定理で n が大きければ平均は近似正規。 厳密性は不要なことも。
⚠️ 対数変換を機械的に適用
0 や負値があると不可。 また解釈が変わる。
⚠️ 一部だけの正規性確認
回帰では「残差」の正規性が前提(応答変数ではない)。
⚠️ ノンパラ検定の汎用過信
ノンパラは正規性不要だが、 検出力が落ちる。

⚠️ 大標本における「正規性検定の落とし穴」

正規性検定は サンプルサイズが大きいほど検出力が上がり過ぎる という有名な問題があります。 n=10,000 の標本では、 ほんのわずかな逸脱でも p < 0.001 となり、 「正規性なし」と判定されてしまう。

中心極限定理(CLT)による救済

$$ \bar{X}_n = \frac{1}{n}\sum_{i=1}^{n} X_i \xrightarrow{d} N\left(\mu, \frac{\sigma^2}{n}\right) \quad (n \to \infty) $$

数式を言葉で読み解く

実務的な判断基準:

標本サイズ推奨アプローチ理由
n < 30Shapiro-Wilk で慎重に検定CLT に頼れない
30 ≤ n < 300QQ プロット + 検定の併用CLT が効き始めるが安心はできない
n ≥ 300QQ プロットの目視判断を主軸検定は過敏、 CLT で十分
n ≥ 5000正規性検定は使わないわずかな逸脱で必ず棄却される

SSDSE-B-2026 は n=47 と小標本なので、 正規性検定は意味があります。 一方、 全国の個票(n=百万)を扱う場合は検定を使わず QQ プロットの目視と CLT に頼るのが王道。

🗺 概念マップ

正規性 (normality) を中心ノードとし、 周囲に判定手段 (Shapiro-Wilk・QQ プロット・歪度尖度)、 仮定する手法群 (t 検定・ANOVA・線形回帰)、 違反時の代替 (ノンパラメトリック検定・対数変換)、 関連概念 (中心極限定理・正規分布) を配置した SVG マップ。 中心からの距離が「正規性チェックからの近さ」を表す。

normality 結論 「使う検定の前提を満たすか? 散布図・ヒストグラム・箱ひげ 1 つの図で 5 指標(最小 n が大きくなるほど正規に近 45° の対角線

本セクションでは正規性に関連する 視覚化・検定・変換・代替手法を補強する。 QQ プロット、 Shapiro-Wilk の検出力、 対数/Box-Cox 変換、 ノンパラ代替の判断基準を一つずつ確認することで、 「検定 p 値だけに依存しない正規性判断」の引き出しを増やせる。

🔗 隣接手法への橋渡し

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

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

🌳 手法選択フロー

「正規性」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。

  1. Step 1: 目的は記述か予測か?
    • 記述 (現状把握・要約) → 集計・可視化・要約統計量で全体像を掴む
    • 予測 (未知データへの推定) → モデル構築・検証フェーズへ移行
  2. Step 2: データの種類・規模は?
    • 数値データ・小〜中規模 → 「正規性」やその拡張手法を直接適用
    • カテゴリデータ → カテゴリ専用の手法 (カテゴリ変数の検定) と組み合わせ
    • 大規模・高次元 → 計算効率を考慮した派生手法 (K-S 検定Anderson-Darling 検定) を選択
  3. Step 3: 結果の解釈・共有は?
    • 専門家向け → 数値指標・統計検定で精緻に評価
    • 非専門家向け → 可視化・自然言語での要約を重視

このフローに沿って判断することで、 「正規性」を中核とした適切な手法選択ができる。

🧭 深掘り:直感・落とし穴・発展(追補)

ここまでの各節(🎨 直感で掴む⚠️ よくある落とし穴🔗 関連用語)で扱った内容を、 「一枚で見返せる要約」として追補します。 既存の解説を置き換えるものではなく、 復習・逆引き用のインデックスとして使ってください。

🎨 直感 — 「正規性」を一言で

正規性とは 「データ(正確には推定量)が正規分布に従うか」 という問いです。 t 検定・ANOVA・線形回帰の p 値や信頼区間は、 内部で推定量が 正規分布に従うことを使って計算されるため、 これが前提になります。 確認は 可視化(ヒストグラム・Q-Q プロット)と検定(Shapiro-Wilk ほか)を必ず併用するのが鉄則。 検定は「正規か否か」の二値を返しますが、 実務で効くのは「どの程度・どの向きにズレているか」という逸脱の大きさで、 これは Q-Q プロットでしか見えません。

⚠️ 落とし穴 — 「外れ値を1個抜けば正規」は誤解

SSDSE-B-2026(2023 年・47 都道府県)の総人口で、 「東京都という極端値さえ抜けば正規に戻る」と考えがちですが、 実測ではそうなりません

対象(総人口 A1101)n歪度Shapiro Wp 値
全 47 県47+2.290.68951.1e-08
東京都(最大値)を除外46+1.820.72355.6e-08
log10 変換(全 47 県)47+0.820.92800.0064
Box-Cox 変換(λ≈−0.49)47≈00.97700.48

東京を抜いても歪度は +1.82 と大きいまま(W もほとんど改善しない)。 これは「1 個の外れ値」ではなく分布全体が右に歪んでいる(対数正規型)ことを意味します。 効くのは点の除去ではなく 対数変換や Box-Cox 変換という スケールの変更です。 その他の代表的な落とし穴:

🚀 発展 — 次の一手のマップ

🔗 関連ページ

📌 要点:正規性は「真理」ではなく「使う手法の前提を満たすか」という相対的な問い。 可視化で逸脱の大きさを見る → 数値検定で裏を取る → 変換/ノンパラで打ち手を持つ、 の順で判断すれば、 SSDSE のような小標本でも一貫した意思決定ができます。 数値はすべて SSDSE-B-2026(2023 年・47 県)の実測です。