🔖 キーワード索引
正規分布 Shapiro-Wilk Q-Qプロット 歪度 尖度 Kolmogorov-Smirnov 中心極限定理 対数変換 ノンパラメトリック サンプルサイズ
別名・略称 :正規性の仮定
「normality 」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「normality」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
normality 統計分析 SSDSE-B-2026 前提条件 適用範囲 落とし穴 関連手法 Python 実装 検証方法
これらのキーワードは「normality の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。
💡 30秒で分かる結論
🍰 まずはやさしく
データの形がベルのような山型であることです。
正しい分析の手法を選ぶために使います。
テストの点数の分布などが例です。
正規性の意味と確認方法を学びます。
正規性(Normality) :データが正規分布に従う性質。 多くの検定の前提となる。
正規性 =データが 正規分布(ベル型) に従うという仮定。 多くの検定の前提。確認方法:ヒストグラム 、 Q-Q プロット 、 Shapiro-Wilk 検定 (n < 5000)。 歪度(skew)≈ 0 、 尖度(kurtosis)≈ 0 (または 3)が正規分布の指標。正規性が満たされない → 対数変換 、 Box-Cox 変換 、 ノンパラメトリック検定 に切替。 中心極限定理 のおかげで、 n が大きければ平均は近似正規。 厳密な正規性は不要なことも多い。
📍 あなたが今見ているもの
🍰 まずはやさしく
分析の前に確認するルールのようなものです。
計算結果を正しく信じるために使います。
スマホの利用時間のバラつきなどが例です。
なぜ正規性の確認が必要なのかを読みます。
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 を増やすと正規に近づきます(中心極限定理)。 これが「多くの手法が現実データでも使える」理由です。
⚠️ よくある落とし穴
大標本では正規性検定が敏感すぎる :n が大きいと Shapiro-Wilk はごく僅かな逸脱でも「非正規」と棄却します。 一方でその大標本ではCLTにより平均は十分正規 — つまり「検定は非正規と言うが実害は小さい」状況が起きます。 検定の p 値だけでなくヒストグラムや Q-Q で逸脱の大きさ を見ましょう。
小標本+強い歪みは危険 :上のウィジェットで n=5、 歪度を最大にすると、 標本分布はまだ歪み、 95%CI のカバレッジが 95% を割り込みます。 「n が小さいのにデータが歪む」ときは正規近似を過信しないこと。
外れ値の影響 :たった 1 個の極端値(例:SSDSE の東京)が歪度・尖度を大きく動かし、 平均・分散・正規性の判定を狂わせます。 ヒストグラム で必ず生データの形を確認しましょう。
🚀 発展 — 正規性が崩れているときの選択肢
変換 :右に裾が長い分布は 対数変換 や Box-Cox 変換で正規に近づけられることがあります。
ノンパラメトリック手法 :分布を仮定しない ノンパラメトリック検定 (Mann-Whitney U、 Wilcoxon など)に切り替える。
リサンプリング :ブートストラップ で正規性を仮定せずに信頼区間を作る。
ロバスト統計 :外れ値に強い ロバスト統計 (中央値・トリム平均・M推定)を使う。
🔬 記号・式を言葉で読み解く
正規分布 平均 μ、 標準偏差 σ で形が決まるベル型分布。 統計学の基本前提。 歪度(skewness) 分布の非対称性。 正なら右裾が長い、 負なら左裾が長い。 尖度(kurtosis) 分布の尖り具合。 正なら鋭く尖って裾が重い(fat tail)。 Q-Q プロット 理論分位 vs 実測分位の散布図。 直線に乗れば正規。 中心極限定理 サンプル平均は元の分布に関わらず近似正規になる(n→∞)。
🧮 実データで計算してみる
SSDSE データで「消費支出」の正規性を確認:
指標 値 判定
歪度 -0.52 やや左裾(概ね対称)
尖度 0.52 やや尖り
Shapiro-Wilk p 0.27 p > 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 で再現
📋 コピー 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
💬 読み方: 2023 年度の二人以上世帯の消費支出は W = 0.970、p = 0.266 で、正規性を棄却できない。pandas の skew −0.54・kurt 0.72 は小標本の補正つきなので、上の表の scipy の値(−0.52、0.52)より少し大きく出る。負の歪度は左の裾が長いことを表し、最も低い愛媛県 223,423 円や沖縄県 251,222 円がその裾を作っている。
🐍 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' : '総人口' , 'A4101' : '出生数' })
# 3 つの変数に対して Shapiro-Wilk 検定
variables = [ '総人口' , '出生数' , '高齢化率' ]
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 [ '総人口' ] . dropna ())
W_log , p_log = stats . shapiro ( log_pop )
print ( f ' \n log10(総人口) → 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.4581
log10(総人口): 直線からの平均絶対残差 = 0.2218
高齢化率: 直線からの平均絶対残差 = 0.1422
→ 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) $$
数式を言葉で読み解く
標本平均 X̄_n は、 元の分布が何であっても n が大きければ正規分布に従う
これは「データ自体が正規である必要はない」という強力な結果
n ≥ 30 程度から CLT がよく効く(経験則)
→ 大標本の t 検定や ANOVA では 個々のデータの正規性は必須ではない
実務的な判断基準:
標本サイズ 推奨アプローチ 理由
n < 30 Shapiro-Wilk で慎重に検定 CLT に頼れない
30 ≤ n < 300 QQ プロット + 検定の併用 CLT が効き始めるが安心はできない
n ≥ 300 QQ プロットの目視判断を主軸 検定は過敏、 CLT で十分
n ≥ 5000 正規性検定は使わない わずかな逸脱で必ず棄却される
SSDSE-B-2026 は n=47 と小標本なので、 正規性検定は意味があります。 一方、 全国の個票(n=百万)を扱う場合は検定を使わず QQ プロットの目視と CLT に頼るのが王道。
🔗 関連用語(前提・並列・発展)
🔗 関連用語ネットワーク(深掘り)
▼ 前提となる概念
▼ 並列・関連する技術
▼ 発展・派生
結論 :正規性は「絶対的な真理」ではなく、 「使う検定の前提を満たすか?」 という相対的な問い。 SSDSE のような小標本では検定 + QQ プロット + 変換の組合せが王道。 検定でダメなら Mann-Whitney や bootstrap などノンパラへ。
🖼 視覚で理解する正規性(拡張ビジュアル)
正規性の判定は数値だけでなく 散布図・ヒストグラム・箱ひげ図 の 3 点セットで眼の感覚を養うのが効率的。 ここでは SSDSE-B-2026 を題材にして、 同じデータを 3 通りの図で確認し、 さらに相関ヒートマップで「複数変数の同時正規性」を概観する。
① 散布図で偏りと外れ値を確かめる
図 1: SSDSE-B-2026(2023 年度 47 都道府県)の総人口と出生数の散布図。 左の生の値では r = 0.995 とほぼ直線に並ぶが、 点の大半が左下に固まり、 東京都(1,409 万人・8.6 万人)だけが右上に大きく飛び出す。 各軸の Shapiro-Wilk は総人口 W = 0.689、 出生数 W = 0.675(どちらも p < 0.001)で、 「相関が強い」ことと「各変数が正規」であることは別の話だとわかる。 右の両対数では点が全体に散らばり W = 0.928 / 0.925(p = 0.006 / 0.005)まで改善するが、 まだ棄却される。
散布図は「片側だけ伸びていないか」「点群が直線から系統的にズレていないか」を直感で見るための最初の窓。 二変量正規分布なら中心ほど点が密な楕円形の雲になるが、 図 1 左のような右に歪んだ変数どうしでは、 点が原点近くに密集し、 値の大きい県ほど間隔が開いて一部の県だけが遠くへ飛び出す。 ここで違和感を持てるかどうかが、 検定統計量を読む前段の重要なリテラシーである。
② ヒストグラムで山形の対称性を確かめる
図 2: 総人口(2023 年度 47 都道府県)のヒストグラム。 ビンは Freedman-Diaconis 規則で決め(生 16 本、 log10 7 本)、 同じ平均・SD の正規曲線を重ねた。 生の値は歪度 2.22 で、 平均 265 万人が中央値 155 万人より大きく右にずれ、 最大の東京都 1,409 万人が離れた右端に 1 本だけ立つ。 log10 変換すると歪度 0.79 まで下がり山形に近づくが、 右裾はまだ残る(W = 0.928、 p = 0.006)。 正規分布なら左右対称のベル型・一峰で、 平均と中央値がほぼ重なる。
ヒストグラムは「ビン幅で見え方が変わる」点が落とし穴。 Scott の公式や Freedman-Diaconis 規則を使うと、 標本サイズに応じてビン幅を自動調整できる。 二峰性が見えた場合は混合正規分布の可能性も視野に入れる。
③ 箱ひげ図で外れ値と歪度を把握する
図 3: 5 変数(2023 年度 47 都道府県)を z 得点にそろえて並べた箱ひげ図(◆ = 平均 0)。 総人口・出生数は中央線が z = −0.39・−0.35 と平均より下にあり、 上側だけに 1.5 IQR 外の県がそれぞれ 9 つ・8 つ並ぶ(歪度 2.22・2.29)。 log10 総人口は歪度 0.79 まで縮むが上に 1 県残る。 高齢化率(W = 0.970、 p = 0.255)と消費支出(W = 0.970、 p = 0.266)は中央線が平均に近く、 下側に少数の外れがある程度で、 正規性を棄却できない。
箱ひげ図は 1 つの図で 5 指標(最小・第 1 四分位・中央・第 3 四分位・最大) を見比べられる強力ツール。 中央線が箱の中央に位置せず、 上方/下方の片側にひげが伸びると、 歪度の符号と大きさをほぼそのまま読み取れる。
④ 4 変数同時の相関ヒートマップ
図 4: SSDSE-B-2026 の家計 4 変数(消費支出・食料費・住居費・教育費、 いずれも二人以上の世帯、 2023 年度 47 都道府県)の相関ヒートマップ。 消費支出と食料費は r = 0.679、 食料費と教育費は r = 0.728、 消費支出と教育費は r = 0.575(いずれも p < 0.001)と正に相関する一方、 住居費は他の 3 変数とほぼ無相関(r = −0.026〜0.081、 n.s.)。 多変量正規性ではすべての 2 変量周辺分布も正規となるため、 相関行列だけで済ませず、 住居費のように他と連動しない列の分布を個別に確かめ、 相関が極端に 1 に近い組(共線性)がないかも点検する。
⑤ 補足 A:シャピロ・ウィルク検定の目安表
標本サイズ n 推奨される検定 補足
n < 30 Shapiro-Wilk 最も検出力が高い、 同時に QQ プロット必須
30 ≤ n < 100 Shapiro-Wilk + 視覚評価 SSDSE 47 都道府県はここに該当
100 ≤ n < 2000 Anderson-Darling, Lilliefors 裾の感度が良い検定が有用
n ≥ 2000 視覚評価優先 検定はわずかな乖離でも棄却するため過検出
⑥ 補足 B:歪度・尖度から見る判定の早見
指標 正規の理論値 許容範囲 (経験則) 逸脱の意味
歪度 (Skewness) 0 |γ₁| ≤ 1 正なら右に裾、 負なら左に裾
尖度 (Kurtosis) 0 (excess) |γ₂| ≤ 2 正なら裾重・尖り強、 負なら平坦
Jarque-Bera 統計 0 JB < 6 程度 χ²(2) で評価、 大きいほど非正規
D'Agostino K² 0 K² < 5 歪度・尖度同時の総合検定
⑦ 補足 C:変換の選択フローチャート
データの形状 推奨変換 注意点
右に長い裾 (所得・人口) log(x), √x 0 を含むなら log(x+1)
左に長い裾 x², exp(x) 大きい値で発散しやすい
割合 0 ≤ p ≤ 1 logit, arcsin√p 0, 1 端点で発散
分散と平均が比例 Box-Cox 正値前提、 Yeo-Johnson なら負値可
外れ値が支配的 winsorize / trimming 情報損失と引き換え
⑧ 補足 D:正規性違反でも頑健な手法
パラメトリック ノンパラメトリック代替 使い分けの目安
対応のない t 検定 Mann-Whitney U 順位ベース、 中央値の比較
対応のある t 検定 Wilcoxon 符号順位 差の対称性は仮定
一元配置 ANOVA Kruskal-Wallis 多群中央値比較
Pearson 相関 Spearman 順位相関 単調関係を捉える
線形回帰 分位回帰 (quantile reg.) 中央値や任意分位の影響を推定
⑨ 補足 E:中心極限定理が効くしきい値
標本平均の分布は、 元データが正規でなくても n が大きくなるほど正規に近づく (中心極限定理)。 ただし元分布の歪度が大きいほど、 必要な n は増える。 一般的な目安:
元分布がほぼ対称:n ≥ 30 で平均は正規近似可
中程度の歪み(指数分布など):n ≥ 50
強い歪み(対数正規):n ≥ 100 〜 200
極端な裾(コーシー分布):CLT 不成立、 平均自体が不安定
⑩ 補足 F:QQ プロットの読み方
QQ プロットは「標本の分位点」と「理論分布(正規)の分位点」を散布する。 完全に正規ならすべての点が 45° の対角線 に乗る。 系統的な乖離パターンと、 そこから読み取れる分布の特徴を整理する。
QQ プロットの形 分布の特徴 対処の方向
右端が直線より上方に反る 右に重い裾 対数変換、 外れ値の確認
両端が直線より外側に反る 尖度が大 (裾重) t 分布近似、 ロバスト手法
両端が直線より内側に丸まる 尖度が小 (平坦) 混合分布や一様分布の疑い
S 字または逆 S 字 歪度 対数 / 平方根 / Box-Cox
階段状 離散値や量子化 連続化処理または離散モデル採用
⑪ 補足 G:練習問題 3 問(理解度チェック)
問 1 :SSDSE-B-2026 で全 47 都道府県の着工新設住宅戸数(H1800、 2023 年度)のヒストグラムと QQ プロットを描き、 シャピロ・ウィルク検定で正規性を判定せよ。 必要なら log 変換を施し、 変換前後で p 値がどう変わるか比較せよ。
問 2 :歪度と尖度を計算し、 上記補足 B の許容範囲と照合せよ。 もし許容範囲を逸脱していたら、 補足 C の表に従って変換候補を選び、 再検定せよ。
問 3 :元データの正規性が成立しない場合、 Mann-Whitney 検定で東日本と西日本の中央値差を検定せよ。 結果を t 検定 (誤って実施した場合) と比較し、 結論にどのような差が生じるかを 200 字でまとめよ。
⑫ 補足 H:実務でやりがちな誤用と回避策
大標本でシャピロ・ウィルクを使う :n が 5000 を超えると小さな乖離も棄却される。 視覚評価へ切り替える。
p 値だけで判断する :QQ プロット・ヒストグラム・歪度尖度を必ず併用。
非正規 → t 検定不可と即断する :CLT により n が大きければ t 検定は頑健。 まず標本サイズを確認。
変換結果を元単位で解釈する :log 変換後の平均は幾何平均に対応する。 結果説明時は単位を明示する。
多変量正規性を周辺分布だけで判断 :周辺が正規でも結合分布は正規とは限らない。 マハラノビス距離やマーディア検定を併用。
⑬ 補足 I:時系列データでの正規性
図 5: 時系列データの例として、 SSDSE-B-2026 の 47 都道府県の死亡数と総人口を年度ごとに合計した全国の死亡率(人口千人あたり、 2012 年度 9.84 → 2023 年度 12.67)。 生の系列に Shapiro-Wilk をかけると W = 0.860、 p = 0.049 で「正規でない」と出るが、 これは値がトレンドで順に並んでいるだけで、 1 次の自己相関は 0.95。 直線トレンド(+0.247/年)を引いた残差では W = 0.950、 p = 0.630 と正規性は棄却されない一方、 1 次の自己相関は 0.57 残り、 残差は 2020 年度 −0.57 から 2022 年度 +0.61 へ跳ねる。 自己相関がある場合は単純な正規性検定は適用できず、 残差(モデル適合後)に対して正規性と独立性の両方を評価するのが正しい手順(12 点しかないので検定の力も弱い)。
時系列の生データには トレンド・季節性・自己相関 が含まれ、 そのまま正規性検定を適用しても誤った結論となる。 ARIMA や状態空間モデルで残差を取り出し、 残差が白色雑音(独立同分布の正規)かを Ljung-Box 検定や残差 QQ プロットで確認する。
⑭ 補足 J:ベイズ的視点と分布のロバスト化
頻度主義の正規性検定は「サンプルが帰無仮説に合うか」を二択で判定するが、 ベイズ的には 事後分布の予測チェック で評価する。 観測データと事後予測サンプルの分布をヒストグラム重ねで比較すれば、 検定よりも豊かな情報が得られる。 また、 正規分布の代わりに t 分布や歪正規分布 をモデル化すれば、 裾の重さを自然に許容できる。
⑮ 補足 K:よくある質問 (FAQ)
Q1 :「正規性検定の p > 0.05 なら正規」と言っていい? → 厳密にはノー。 「正規でないとは言えない」だけ。 検出力不足の可能性を併記すべき。
Q2 :QQ プロットだけでなぜ判定しない? → 主観が入る。 数値検定と組み合わせれば客観性が増す。
Q3 :複数群を個別に検定すべき? → 群ごとに検定し、 違反群があれば全体でノンパラ手法を選ぶのが安全。
Q4 :標準化すれば正規になる? → ならない。 標準化は平均 0・分散 1 にするだけで、 形は変わらない。
Q5 :機械学習でも正規性は必要? → 多くの ML は不要。 ただし線形判別分析や PCA の解釈、 線形回帰の信頼区間では仮定として効く。
⑯ 補足 L:チェックリスト
□ 標本サイズ n を確認した
□ ヒストグラムを適切なビン幅で描画した
□ QQ プロットで対角線からの乖離を確認した
□ 歪度・尖度を数値で確認した
□ 検定統計量と p 値を記録した
□ 変換 (log, Box-Cox, etc.) を試した
□ 必要ならノンパラ手法へ切り替えた
□ 結論に「正規性の評価方法」と「限界」を明記した
⑰ 補足 M:検定の理論的背景の深掘り
シャピロ・ウィルク検定の統計量 W は、 並び替えた標本値と 順序統計量の理論的期待値 の相関に基づく。 形式的には次のように定義される。
$$W = \frac{(\sum_{i=1}^{n} a_i x_{(i)})^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2}$$
ここで $x_{(i)}$ は昇順に並べた標本、 $a_i$ は標本サイズ n に依存する係数で、 標準正規分布の順序統計量の期待値ベクトルから導かれる。 W は 0 から 1 の値を取り、 1 に近いほど正規分布に近い 。 帰無仮説 (データが正規) のもとで W の理論分布から p 値を算出する。
アンダーソン・ダーリング検定 A² は、 経験分布関数 $F_n(x)$ と仮定分布 $F(x)$ の差を裾を重視して評価する。
$$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]$$
分母に $F(x)(1-F(x))$ の逆数に相当する重みが入るため、 分布の 端 (裾) での乖離を強調できる。 SSDSE のような裾の重い変数 (人口、 出生数) では Shapiro-Wilk より A² の方が違反を検出しやすい場合がある。
⑱ 補足 N:多変量正規性の評価手法
単変量の正規性が成立しても、 結合分布が正規であるとは限らない。 多変量正規性を評価する代表的な方法を整理する。
手法 原理 適用場面
マハラノビス距離 + χ² プロット 平方距離が自由度 p の χ² に従う性質を利用 変数間スケールが異なるデータ全般
マーディア検定 (Mardia) 多変量歪度・尖度を χ² で評価 変数数 p ≤ 50 程度
ヘンツェ・ザイクラー検定 特性関数の重み付き積分 中標本〜大標本
ロイストン検定 (Royston) 各変数の Shapiro 統計量を組合せ 小標本でも頑健
エナジー検定 (Energy test) 特性関数距離の経験版 分布フリー、 順列検定で p 値推定
SSDSE-B-2026 の 4 変数(たとえば総人口・出生数・死亡数・消費支出)で多変量正規性を確認する場合、 まず各変数を対数変換してから Royston 検定を適用するのが堅実。 もし違反が出れば、 主成分分析後の主成分軸の正規性を確認することで、 次元削減のロバスト性を見積もれる。
⑲ 補足 O:実務ケーススタディ
ケース 1:SSDSE-B-2026 の総人口 。 47 都道府県の総人口分布は右に長い裾を持ち、 東京・大阪・神奈川などが極端な外れ値となる。 Shapiro-Wilk W=0.69, p<0.001 で正規性は強く棄却される。 log10 変換すると W=0.93 まで大きく改善するが、 n=47 では検定が敏感なため p=0.006 でなお棄却される(Q-Q はほぼ直線)。 完全に正規化したい場合は Box-Cox(λ≈−0.49 で W=0.98, p=0.48)が有効。 ただし「人口の log は意味が薄い」ため、 解釈は元単位で行い、 検定だけ変換空間で行うのが実務的。
ケース 2:医療データの血圧 。 健常者の収縮期血圧は対数正規ではなく、 ほぼ正規に近い。 一方、 高血圧患者のサンプルが混じると二峰性が現れ、 単純な検定では「正規ではない」と判定されるが、 実は 混合正規分布 。 この場合は層別解析や混合モデルが本質的な解。
ケース 3:金融リターン 。 日次株価リターンは裾が極端に重く、 正規分布よりも t 分布が適合する典型例。 リスク管理 (VaR 計算) では正規仮定だと過小評価につながり、 2008 年のリーマン危機を予測できなかった原因の一つとされる。 GARCH や EVT (極値理論) など、 裾を真剣に扱うモデルへの切り替えが必須。
⑳ 補足 P:プログラミング実装の選び方
ライブラリ 関数 特徴
scipy.stats shapiro, anderson, normaltest, jarque_bera, kstest 最も汎用、 多くの検定をカバー
statsmodels lilliefors, jarque_bera, qqplot 回帰残差用、 QQ プロットの描画に便利
pingouin normality, homoscedasticity 複数群対応、 群別 p 値を一括返却
R: nortest ad.test, lillie.test, cvm.test 統計の本場、 検定の種類が豊富
R: MVN mvn (Royston/Mardia/HZ) 多変量正規性の総合パッケージ
㉑ 補足 Q:教育現場での説明テンプレート
学生に正規性を説明する際は、 「富士山型の山 」というメタファーが効きやすい。 ベルの真ん中が最も高く、 左右が同じ高さで滑らかに低くなる山。 これを「ピサの斜塔型 (歪度大)」「平らな墓地型 (尖度小)」「双子山型 (二峰)」と比較すれば、 形状の違いを直感的に理解できる。 検定の p 値はあくまで「山の形が富士山と統計的に区別できるか」を測る指標であり、 山の高さや位置とは無関係である点も強調する。
㉒ 補足 R:歴史的経緯と用語法の整理
「正規分布 (normal distribution)」という名称は、 19 世紀に Gauss が誤差論で導入したことから「ガウス分布」とも呼ばれる。 一方、 ラプラスが中心極限定理の原型を示し、 ピアソンが「normal」という呼び名を統計学に定着させた。 日本では 「正規」 という訳語が定着しているが、 「正常な」「標準的な」という意味ではなく、 単に「ガウス曲線に従う」という意味であることに注意。 多くの自然現象が正規分布に従う一方、 経済データや社会データはむしろ べき乗則 や 対数正規 に従うことが多い、 という認識が現代統計学では主流である。
用語の対比を整理しておく。
用語 意味 混同しやすい用語
正規分布 確率密度関数が指数二次関数 「標準的」「典型的」とは別概念
標準正規分布 平均 0・分散 1 の正規分布 標準化 (z 変換) の対象分布
正規性 標本が正規分布に従う性質 「標準性」「正確性」とは異なる
準正規性 中程度に正規に近い状態 (経験的) 正式な統計用語ではない
漸近正規性 n→∞ で正規分布に収束する性質 CLT に直結、 推定量の理論で使用
㉓ 補足 S:機械学習との接続
機械学習の多くは分布フリーで動作するが、 線形判別分析 (LDA)・PCA・線形回帰の信頼区間・ガウス混合モデル などは正規性が前提となる。 また、 深層学習の Batch Normalization・Weight Initialization・VAE の潜在空間 も正規分布を仮定している。 これらの手法を使う際は、 入力分布の正規性を確認する価値がある。
手法 正規性への依存度 違反時の対処
LDA 強い (クラス内多変量正規) QDA, ロジスティック回帰へ
PCA 中 (分散最大化のみなら不要) カーネル PCA, ICA
線形回帰 (推定) 弱 (係数推定は不要) 通常そのまま使用可
線形回帰 (信頼区間) 強 (残差正規性) ブートストラップ信頼区間
SVM, ランダムフォレスト, XGBoost なし (分布フリー) そのまま使用可
ガウス過程回帰 強 (事後正規性) スチューデント t プロセス
深層学習 (BatchNorm) 中 (中間表現の正規化) LayerNorm, GroupNorm
変分オートエンコーダ (VAE) 強 (潜在分布が正規) VAE-flows などで柔軟化
㉔ 補足 T:実装パターン集 (Python)
実務で使う典型的な「正規性チェック → 変換 → 再評価」のワークフローを整理する。 まずは 視覚 + 数値 + 変換 を一気通貫で行うパイプラインを念頭に置くと、 抜け漏れが減る。
パターン 1 :単変量、 小標本 (n≤50) → Shapiro-Wilk + QQ プロット + log 変換候補
パターン 2 :単変量、 中標本 (50<n<500) → Anderson-Darling + ヒストグラム + Box-Cox 探索
パターン 3 :単変量、 大標本 (n≥500) → 視覚評価優先 + 歪度/尖度の数値のみ参照
パターン 4 :多変量 → Royston/Mardia 検定 + マハラノビス χ² プロット + 主成分の正規性確認
パターン 5 :回帰残差 → 残差プロット + Jarque-Bera + 残差ヒストグラム
パターン 6 :時系列 → 自己相関除去 (ARIMA) + 残差正規性 + Ljung-Box
パターン 7 :ベイズ → 事後予測チェック + 観測 vs 予測 KDE 重ね描き
㉕ 補足 U:ドメイン別の典型分布
ドメイン 典型的な分布 正規仮定の妥当性
身体測定 (身長, 体重) 正規 (近似) ○ 多くの場合 OK
所得・売上 対数正規, パレート × log 変換が必要
人口 (都道府県・都市) べき乗則 (ジップ則) × log 変換でも完全には改善されない
テスト得点 正規 (設計上) ○ 平均化により正規化
反応時間 (心理実験) 対数正規, ex-Gaussian × log または逆数変換
株価リターン t 分布, 安定分布 × 裾が極端に重い
放射性崩壊 指数分布 × 指数族モデルへ
事故件数 ポアソン × カウントモデル使用
遺伝子発現量 負の二項分布 × DESeq2 等で扱う
機械の誤差 正規 (古典誤差論) ○ Gauss が確立した古典例
㉖ 補足 V:チートシート(最速判定フロー)
現場で迷ったときの最速判定フローを箇条書きで整理する。
標本サイズ n を確認 → n≥30 なら CLT で平均は正規近似 OK
ヒストグラム + QQ プロットを 30 秒で確認 → 明らかに非正規なら検定不要
歪度と尖度を数値で確認 → |γ₁|≤1 かつ |γ₂|≤2 なら概ね OK
境界例は Shapiro-Wilk または Anderson-Darling を実行
違反なら log / Box-Cox を試す
変換しても改善しなければノンパラ手法に切り替え
結論に「検定方法」「p 値」「視覚評価結果」「代替手法の有無」を明記
㉗ 補足 W:正規性とサンプリング設計
正規性は サンプリング設計 によっても変わる。 同じ母集団でも、 単純無作為抽出と層化抽出、 クラスター抽出ではサンプル分布の性質が異なる。 例えば SSDSE-B-2026 の都道府県データは 悉皆データ (全 47 都道府県) であり、 そもそも標本ではなく母集団そのものである。 この場合、 「正規性検定の p 値」は本質的な意味を失う (母集団全体が「正規ではない」ことは数学的に確定しているため)。 代わりに 形状の記述 (歪度・尖度・QQ プロット) を行うのが正しい姿勢である。
一方、 標本データ (例:47 都道府県から無作為に 10 県を選んだ場合) では、 抽出方法に応じて理論分布が変わる。 層化抽出では各層の正規性を別々に評価し、 クラスター抽出では設計効果を考慮した補正が必要となる。 「データ = 標本」「データ = 母集団」の区別は、 正規性の解釈に直結する重要な視点である。
㉘ 補足 X:報告書テンプレート
論文・レポートで正規性評価を記述する際の標準テンプレートを示す。
記述項目 記載例
標本サイズと変数 「SSDSE-B-2026 の総人口 (n=47)」
使用した検定 「Shapiro-Wilk 検定 (scipy.stats.shapiro)」
統計量と p 値 「W=0.69, p<0.001」
視覚評価の結果 「QQ プロットで右端が直線より上方に大きく反る (図 X)」
変換の有無 「log10 変換で W=0.93 まで改善するが p=0.006 でなお棄却、 Box-Cox (λ≈−0.49) で W=0.98, p=0.48」
採用した手法 「log 変換後に Pearson 相関を計算」または「Spearman 相関を採用」
限界と注意 「小標本のため検出力は中程度。 結論は中央値ベースで解釈」
このテンプレートに沿って報告すれば、 査読者・読者が 「何を確認したか」「どのように判断したか」「結論の限界はどこか」 を一目で把握でき、 統計的透明性が確保される。 SSDSE-B-2026 を題材にした学習レポートでも、 同じ枠組みで記述する習慣をつけることが、 統計リテラシーの定着に直結する。
㉙ 補足 Y:正規性をめぐる近年の議論
近年の統計学界では、 「正規性検定の使用を控えよ」 という主張が強まっている。 主な論点は次の通りである。
大標本で過検出 :n が大きくなると、 ほぼ無視できる乖離も「有意」とされ、 実用上の意味が薄れる。
小標本で過小検出 :n が小さいと、 明らかに非正規な分布でも「検出されない」場合がある。 検定の検出力不足の典型。
頑健な代替手法の発達 :ノンパラ手法・ブートストラップ・ベイズ的アプローチが容易に使えるようになり、 「正規性が必要」な場面自体が減少。
視覚評価の優位性 :QQ プロット・ヒストグラムの方が、 検定統計量より遥かに豊富な情報を与える。
事前検定問題 :「t 検定の前に正規性検定」という流れは、 多重検定の問題を生み、 全体の第一種過誤率を高める。
現代の標準的なアドバイスは「視覚評価を主とし、 数値検定は補助。 判断に迷う境界例でのみ検定を参考に 」というもの。 SSDSE-B-2026 のような小〜中標本データでは、 QQ プロットと歪度・尖度を最初に確認し、 検定は補助的に使うのが穏当な姿勢である。
㉚ 補足 Z:分布フリー手法の選び方
正規性が成立しない場合の代替として、 分布フリー (distribution-free) 手法 は強力。 主要な選択肢を整理する。
目的 分布フリー手法 補足
中央値の比較 Mann-Whitney, Wilcoxon 順位ベース、 2 群
3 群以上の比較 Kruskal-Wallis 分散分析の代替
相関の評価 Spearman, Kendall τ 単調関係を測定
中央値の信頼区間 ブートストラップ 1000 回以上のリサンプリング
分布全体の比較 Kolmogorov-Smirnov, Cramér-von Mises 経験分布関数の比較
単一群の中央値検定 符号検定, Wilcoxon 符号順位 1 群の中央値を理論値と比較
変動性の比較 Brown-Forsythe, Levene (中央値版) 分散の代わりに中央値からの絶対偏差
回帰 分位回帰, ロバスト回帰 (Huber, RANSAC) 外れ値・非正規残差に強い
㉛ 補足 AA:正規性とビッグデータ時代
ビッグデータ時代には、 n が数百万〜数十億に達する。 この規模では すべての変数が「正規性検定で棄却される」 。 微小な乖離も統計的有意となるためである。 こうした状況では、 正規性の数値検定は 事実上意味を失う 。 代わりに次のアプローチが推奨される。
サンプリングして視覚評価 :全データから無作為に 1000〜10000 件を抽出し、 QQ プロットで形状を評価
歪度・尖度の数値を主指標に :|γ₁|, |γ₂| の絶対値を見て、 実用上問題ない範囲かを判定
頑健な手法をデフォルトに :中央値ベース、 分位回帰、 ロバスト推定を積極採用
分布フィッティング :t 分布、 対数正規、 安定分布などをフィットし、 AIC/BIC で選択
ブートストラップで信頼区間 :分布仮定を完全に回避できる強力ツール
㉜ 補足 BB:日本の公的統計と正規性
SSDSE-B-2026 を含む日本の公的統計データは、 多くが 都道府県別の集計値 として提供される。 これらは個人レベルの観測ではなく 集計後の値 であるため、 中心極限定理により正規分布に近づきやすい。 しかし「人口」「総生産」のように 規模が桁違いの値 を含む場合は、 集計後も裾が重く非正規となる。 日本の地理的・経済的構造 (東京一極集中、 中山間地域の過疎化など) が分布形状に強く反映される点も特徴的。
㉝ 補足 CC:よくある誤訳・誤用語の整理
英語文献を翻訳する際の典型的な誤訳と、 正しい日本語訳を整理する。
英語 誤訳 正しい訳
normal distribution 正常分布 正規分布
normality test 正常性検定 正規性検定
heavy-tailed 重い尾 裾が重い (裾厚)
skewness 傾き 歪度
kurtosis 曲率 尖度
log-normal ログ正常 対数正規
tail probability 尻尾確率 裾確率
distribution-free 分布自由 分布フリー (分布によらない)
特に 「normal」を「正常」 と訳すと、 統計的な「ガウス分布に従う」という意味から大きく外れる。 一方で日本語の「正規」も「正しい規範に従う」という意味合いを連想させるため、 「単にガウス曲線」という中立的なイメージを学習者に伝える工夫が必要である。
㉞ 補足 DD:参考文献と次の学習ステップ
正規性をさらに深く学ぶには、 次の文献・教材が推奨される。
古典 :Snedecor & Cochran 『Statistical Methods』 — 検定の理論と実用の両面
分布論 :Johnson & Kotz 『Continuous Univariate Distributions』 — 各分布の数学的性質
ノンパラ手法 :Hollander & Wolfe 『Nonparametric Statistical Methods』
ブートストラップ :Efron & Tibshirani 『An Introduction to the Bootstrap』
多変量 :Mardia, Kent, Bibby 『Multivariate Analysis』
日本語入門 :東京大学教養学部統計学教室編 『統計学入門』
実践 :SciPy/StatsModels の公式ドキュメント (各検定の API リファレンス)
㉟ 補足 EE:正規性とコンペティション
統計・データ解析コンペティション (Kaggle, SIGNATE, 統計データ解析コンペなど) では、 特徴量の正規性が モデル選択とスコア改善 に直結することがある。 とりわけ 線形モデル系 (Ridge, Lasso, ElasticNet) は入力分布に敏感で、 ターゲット変数の対数変換 (log1p) はベースラインを大きく押し上げる定番テクニックである。 一方、 木構造系 (Random Forest, XGBoost, LightGBM) は変換にほぼ無関心。
コンペでの実用テクニックを整理する。
EDA フェーズ :全特徴量に対し歪度を計算、 |γ₁| > 1 のものを log1p または Box-Cox 候補としてリスト化
特徴量エンジニアリング :log, sqrt, Box-Cox, Yeo-Johnson, rank-gauss などを試し、 交差検証で効果を測る
ターゲット変換 :価格・需要量など右に裾のあるターゲットは log1p が定番。 予測時は expm1 で戻す
残差診断 :モデル予測の残差が正規かを確認し、 残差が歪んでいれば異常検知や追加特徴の手がかりに
アンサンブル :線形系 (正規仮定が効く) と木構造系 (仮定不要) を混ぜることで、 双方の良さを取り込む
📚 関連グループ教材
この用語の全体像を学ぶには、 まず横断的な教材で文脈を掴むのが効率的です:
🔎 正規性 ── 深掘り解説
本ページでは 正規性(Normality) を、 SSDSE-B-2026 の都道府県データ(n=47)を題材に、 視覚診断+形式検定+数値的指標の3層で評価します。
🔖 キーワード索引(拡張)
正規性 Shapiro-Wilk Kolmogorov-Smirnov Q-Qプロット ヒストグラム 歪度 尖度 正規分布 検定 p値 α=0.05 中心極限定理 scipy.stats matplotlib SSDSE-B 都道府県データ
💡 もう少し詳しく
正規性とは :データが平均 $\mu$、 分散 $\sigma^2$ の正規分布 $N(\mu, \sigma^2)$ に従う性質
なぜ重要か :t 検定・分散分析・線形回帰の前提に正規性がある(標本数が大きければ中心極限定理が効くため緩む)
n=47 の場合 :SSDSE 都道府県データは小サンプルなので正規性を仮定する前に必ず確認
視覚診断 :ヒストグラム+Q-Q プロット(理論値と標本値の直線性)
形式検定 :Shapiro-Wilk(小サンプル向き)/Kolmogorov-Smirnov/Anderson-Darling
📐 数式
$$ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) $$
$$ W = \frac{\left(\sum_{i=1}^{n} a_i x_{(i)}\right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2} \quad \text{(Shapiro-Wilk 統計量)} $$
🧮 SSDSE-B-2026 で実値を計算
都道府県の 総人口(A1101) は、 東京・大阪のような大都市が右に長く伸びる典型的な右に歪んだ分布 です。
対象列 Shapiro W p値 歪度 結論
総人口 0.69 < 0.001 +2.2 非正規(右歪)
log(総人口) 0.93 0.006 +0.79 非正規(歪みは緩和)
高齢化率 0.97 0.25 −0.56 概ね正規
🐍 Python : Shapiro-Wilk 検定
🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口)
北海道 5,092,000
東京都 14,086,000
沖縄県 1,468,000
…(全 47 行)
📋 コピー import pandas as pd
from scipy import stats
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
x = df.loc[df['SSDSE-B-2026']==2023, 'A1101'] # 総人口(2023年のみ)
# Shapiro-Wilk 検定
w, p = stats.shapiro(x)
print(f'W = {w:.4f}, p = {p:.4g}')
print('帰無仮説(正規性)を' + ('棄却' if p < 0.05 else '棄却せず'))
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47
(47 都道府県のデータ)
📤 実行例:
W = 0.6895, p = 1.108e-08
帰無仮説(正規性)を棄却
→ 総人口は非正規(右に強い歪み、東京が外れ値)
💬 読み方: 総人口は W = 0.6895、p = 1.1×10⁻⁸ で正規性をはっきり棄却する。高齢化率の W = 0.97 と比べて W が低いのは、東京都 1,409 万人が 2 位の神奈川県 923 万人を大きく引き離し、平均 265 万人から標準偏差の約 4.1 倍も離れているため。人口のような規模の変数は、検定の前に log 変換を試すのが順当。
🐍 Python : Q-Q プロット
🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📋 コピー # Q-Q プロット
import matplotlib.pyplot as plt
from scipy import stats
fig, ax = plt.subplots(figsize=(6,6))
stats.probplot(x, dist='norm', plot=ax)
ax.set_title('Q-Q Plot : 総人口')
plt.tight_layout(); plt.savefig('qq.png', dpi=150)
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47
(47 都道府県のデータ)
📤 実行例(実測)
このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。
💬 読み方: このブロックは標準出力を出さず、qq.png に Q-Q プロットを保存する。総人口では右上の東京都・神奈川県・大阪府が直線から上へ大きく離れるので、W = 0.69 がどの県から来ているかが目で分かる。
🐍 Python : 対数変換
🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📋 コピー # 対数変換で正規性が改善するか確認
import numpy as np
log_x = np.log(x)
w2, p2 = stats.shapiro(log_x)
print(f'log変換後 W = {w2:.4f}, p = {p2:.4g}')
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47 — 上のセルから継続して x を使用
📤 実行例:
log変換後 W = 0.9280, p = 0.006417
→ p < 0.05: log変換後も正規性は棄却(A1101 は対数変換後も非正規)
💬 読み方: 自然対数を取ると W は 0.6895 から 0.9280 へ上がるが、p = 0.0064 でまだ 5% 水準で棄却される。log 変換後も歪度は 0.79 残っていて、右の裾が消え切っていない。log より強く大きな値を縮める Box-Cox(下のブロックの λ = −0.492)が次の候補になる。
🐍 Python : 歪度・尖度
🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📋 コピー # 歪度・尖度
skew = stats.skew(x)
kurt = stats.kurtosis(x)
print(f'歪度 = {skew:.3f} (正規分布は 0)')
print(f'尖度 = {kurt:.3f} (正規分布は 0; Fisher 流)')
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47 — 上のセルから継続して x を使用
📤 実行例:
歪度 = 2.219 (正規分布は 0)
尖度 = 4.951 (正規分布は 0; Fisher 流)
→ 強い右歪みと尖った裾(非正規の典型)
💬 読み方: 歪度 2.219 は右の裾が長いこと、尖度 4.951(正規分布なら 0)は平均から遠い値が正規分布よりずっと多いことを示す。東京都は平均から標準偏差の約 4.1 倍離れていて、正規分布ならほぼ起こらない位置にいる。W = 0.69 が低い理由を形の言葉で言い直した値として読む。
⚠️ 追加の落とし穴
❌ 大標本での過検出
n が数千を超えると、 わずかな逸脱でも Shapiro-Wilk が有意になります。 視覚診断(Q-Qプロット)を必ず併用してください。
❌ 検定結果だけで判断
p>0.05 でも「正規分布である」とは結論できません。 帰無仮説の棄却ができなかっただけです。
❌ 変換の選択
対数・Box-Cox・Yeo-Johnson などの変換は、 物理的意味を理解して選ぶ必要があります。 機械的な適用はモデル解釈を歪めます。
❌ 外れ値の影響
都道府県データでは東京・大阪が外れ値級に大きいため、 これらが正規性検定の結果を左右します。
🔗 関連用語(拡張)
❓ よくある質問 (FAQ)
Shapiro-Wilk と Kolmogorov-Smirnov はどちらを使うべき? n が 50 程度までなら Shapiro-Wilk。 n が大きい場合は Anderson-Darling や Lilliefors を検討。
p > 0.05 なら正規分布と認めて良いですか? 結論できません。 帰無仮説(正規性)を棄却できなかっただけです。 効果量・Q-Q プロット・歪度尖度も併用しましょう。
正規性が必要ない検定はありますか? ノンパラメトリック検定(Wilcoxon、 Mann-Whitney、 Kruskal-Wallis、 Spearman 相関等)は正規性を仮定しません。
対数変換以外の選択肢は? Box-Cox(正のみ)、 Yeo-Johnson(負含む)、 平方根、 逆数。 物理的意味と分布形を見て選択。
中心極限定理があるなら正規性は気にしなくていい? 標本平均の分布には CLT が効きますが、 個別観測のモデル仮定にはなりません。 たとえば線形回帰の残差正規性は別問題。
🧪 SSDSE-B-2026 を使った追加計算例
対象列(SSDSE-B) 歪度 尖度 Shapiro p 判定 A1101 総人口 2.22 4.95 < 0.001 非正規(右歪) log(A1101) 0.79 -0.21 0.006 非正規(歪みは緩和) A1303 65歳以上人口 1.78 2.46 < 0.001 非正規(右歪) 高齢化率 -0.56 0.24 0.25 概ね正規 合計特殊出生率 -0.04 -0.44 0.94 概ね正規
🐍 さらにコードを書く
Lilliefors(KS の母数推定版) 🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口)
北海道 5,092,000
東京都 14,086,000
沖縄県 1,468,000
…(全 47 行)
📋 コピー from statsmodels.stats.diagnostic import lilliefors
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
stat, p = lilliefors(df.loc[df['SSDSE-B-2026']==2023, 'A1101']) # 2023年のみ
print(f'Lilliefors stat={stat:.4f} p={p:.4g}')
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47
(47 都道府県のデータ)
📤 実行例:
Lilliefors stat=0.2777 p=0.001
→ p < 0.05: 正規性棄却(総人口は非正規)
💬 読み方: Lilliefors の D = 0.2777 は、経験累積分布と正規分布の累積のずれが最大で約 28 ポイントあることを表す。p = 0.001 は statsmodels が表で返せる下限に張りついた値で、実際はもっと小さい(Shapiro-Wilk の p は 1.1×10⁻⁸)。「p = 0.001 ちょうど」と書かず「p ≤ 0.001」と報告する。
Anderson-Darling 検定 🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📋 コピー from scipy import stats
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
res = stats.anderson(df.loc[df['SSDSE-B-2026']==2023, 'A1101'], dist='norm') # 2023年のみ
print('A^2:', res.statistic)
print('臨界値:', res.critical_values)
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47
(47 都道府県のデータ)
📤 実行例:
A^2: 5.383075924951186
臨界値: [0.536 0.611 0.733 0.855 1.017]
→ A^2 は 5% 水準の臨界値 0.733 も 1% 水準の 1.017 も大きく超える: 正規性棄却
💬 読み方: A² = 5.38 は 5% 水準の臨界値 0.733 の 7 倍以上、1% 水準の 1.017 と比べても 5 倍を超え、どの水準でも正規性を棄却する。scipy の anderson は p 値を返さないので、臨界値の並び(15%・10%・5%・2.5%・1%)のどこを超えたかで読む。裾に重みを置く検定なので、東京都 1 県の大きさがそのまま A² を押し上げている。
Box-Cox 変換と最適λ 🎯 解説: SSDSE-B-2026 の連続変数(高齢化率や所得など)が正規分布に従うかを Shapiro-Wilk 検定や Q-Q プロットで確認する。 多くのパラメトリック検定(t 検定、 回帰、 ANOVA)は正規性を前提とするため、 事前確認は必須。
📋 コピー 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, 'A1101'] # 2023年のみ
y, lam = stats.boxcox(x)
print(f'最適 λ = {lam:.3f}')
📥 入力例: data/raw/SSDSE-B-2026.csv
列コード: A1101(総人口)2023 年 / n=47
(47 都道府県のデータ)
📤 実行例:
最適 λ = -0.492
→ λ≈-0.5 は逆平方根変換に近い(総人口の強い右歪みを補正)
💬 読み方: 最適 λ = −0.492 は log(λ = 0)よりさらに強く大きな値を縮める変換で、ほぼ 1/√x に近い。この変換後の Shapiro-Wilk は W = 0.977、p = 0.475 となり、log の p = 0.0064 と違って正規性を棄却しなくなる。scipy の boxcox は (x^λ − 1)/λ なので λ が負でも県の順位は保たれるが、単位は「人」から離れるので、推定値は元の尺度に戻して報告する。
💡 実務的アドバイス
視覚診断(Q-Q, ヒストグラム)を第一に、 検定は補助に。 大標本では微小逸脱でも有意になりがち。 n=47 程度の SSDSE 都道府県データ は Shapiro-Wilk が適切。正規性が成立しない時は、 ① 変換、 ② ノンパラ検定、 ③ ロバスト統計、 ④ ブートストラップを検討。 残差の正規性は当てはめ後にチェック。 元データの正規性とは別の問題です。
🕰 歴史的背景・発展経緯
Carl Friedrich Gauss が誤差解析で導入したのが起源(1809 年)。 「Gaussian distribution」の名はこれに由来。
Shapiro と Wilk が 1965 年に開発した Shapiro-Wilk 検定は、 小サンプルでの検出力が高く、 n ≤ 50 で広く用いられます。 R や Python の標準関数として実装されており、 統計入門で最初に学ぶ正規性検定の一つです。
現代では機械学習の前処理として、 また残差診断の場面で頻繁に登場します。 ただし「正規性が必要」と「正規性が望ましい」の混同が初学者で多く、 不要な変換が解釈を歪める事例も多発しています。
🐍 高齢化率の正規性を 4 通りで確かめる(Shapiro・KS・Q-Q・Box-Cox)
Shapiro-Wilk で 47 都道府県の高齢化率の正規性 🎯 このコードでやること:2023 年度の 47 都道府県について高齢化率(A1303 ÷ A1101 × 100)を作り、Shapiro-Wilk 検定で W と p を出す。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー import pandas as pd
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年度のみに絞る
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
W , p = stats . shapiro ( df [ 'aging' ])
print ( f 'Shapiro W= { W : .4f } , p= { p : .4f } ' )
# p>0.05 なら正規性を棄却できない
📥 入力: data/raw/SSDSE-B-2026.csv の 2023 年度 47 都道府県から作った高齢化率 aging(%)。最初のブロックで作った df をそのまま使う。
📤 実行例(実測)
Shapiro W=0.9696, p=0.2548
💬 2023 年度 47 都道府県の高齢化率は Shapiro-Wilk で W = 0.9696、p = 0.2548 なので、正規分布から来たという仮説は棄却できない。ただし「棄却できない」は「正規である」の証明ではなく、n = 47 では多少の歪み(ここでは歪度 −0.56 と左に裾を引く)を見逃すことも多い。東京都・沖縄県の低い 2 県を除くと p は 0.68 まで上がるので、歪みの出どころはこの 2 県だと分かる。
Kolmogorov-Smirnov(理論正規 vs 経験) 🎯 このコードでやること:同じ高齢化率を 47 県の平均・標準偏差で z 化し、標準正規分布との Kolmogorov-Smirnov 検定をかける。平均・標準偏差をデータから推定したときに KS の p がどうずれるかを見る。
📋 コピー from scipy import stats
import numpy as np
z = ( df [ 'aging' ] - df [ 'aging' ] . mean ()) / df [ 'aging' ] . std ()
D , p = stats . kstest ( z , 'norm' )
print ( f 'KS D= { D : .4f } , p= { p : .4f } ' )
📥 入力: data/raw/SSDSE-B-2026.csv の 2023 年度 47 都道府県から作った高齢化率 aging(%)。最初のブロックで作った df をそのまま使う。
📤 実行例(実測)
KS D=0.0843, p=0.8640
💬 KS 検定は D = 0.0843、p = 0.864 と、Shapiro よりずっと「正規らしい」結果を返した。これは平均と標準偏差をデータ自身から推定して標準化したのに、パラメータ既知を前提とした p を使っているためで、同じ D に Lilliefors 補正をかけると p は約 0.548 まで下がる。推定値で標準化したデータの正規性は、KS ではなく Lilliefors か Shapiro で判定する。
QQ プロット 🎯 このコードでやること:高齢化率の Q-Q プロット(理論分位と実測値)を描いて qq.png に保存し、直線からどの県がずれるかを見る。
📋 コピー import matplotlib.pyplot as plt
import scipy.stats as stats
stats . probplot ( df [ 'aging' ], dist = 'norm' , plot = plt )
plt . title ( 'Q-Q plot of 高齢化率' )
plt . tight_layout (); plt . savefig ( 'qq.png' , dpi = 150 )
📥 入力: data/raw/SSDSE-B-2026.csv の 2023 年度 47 都道府県から作った高齢化率 aging(%)。最初のブロックで作った df をそのまま使う。
📤 実行例(実測)
このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。
💬 保存される qq.png では、下端の東京都(22.8%)と沖縄県(23.8%)が直線の予想値 24.2%・25.5% より約 1.5 ポイント低く、上端の徳島県(35.4%)・高知県(36.3%)も直線より 1.3〜1.5 ポイント低い。両端がそろって下にずれるのは左に裾を引いた形(歪度 −0.56)で、最も高い秋田県(39.1%)だけが直線上にある。点と直線の相関は 0.983 で、Shapiro-Wilk が棄却しない(p = 0.255)程度のずれである。
Box-Cox 変換で正規性を改善 🎯 このコードでやること:高齢化率に Box-Cox 変換をかけて最適な λ を推定し、変換後にもう一度 Shapiro-Wilk 検定をかける。
📋 コピー from scipy.stats import boxcox
y , lam = boxcox ( df [ 'aging' ])
print ( f 'lambda= { lam : .3f } ' )
W2 , p2 = stats . shapiro ( y )
print ( f '変換後 Shapiro W= { W2 : .4f } , p= { p2 : .4f } ' )
📥 入力: data/raw/SSDSE-B-2026.csv の 2023 年度 47 都道府県から作った高齢化率 aging(%)。最初のブロックで作った df をそのまま使う。
📤 実行例(実測)
lambda=2.747
変換後 Shapiro W=0.9862, p=0.8482
💬 Box-Cox の λ = 2.747 は 1 より大きく、値を 2.7 乗に近い形で引き伸ばす変換で、左に裾を引いた(低い側に東京都・沖縄県がいる)分布を右へ広げて左右対称に近づけている。変換後は W = 0.9862、p = 0.848 と正規に近づいたが、元の p = 0.255 でもすでに棄却されていなかったので、この変換は必須ではない。λ が 2.7 のような半端な値だと係数の解釈が難しくなるので、使う場合は結果を元の % に戻して報告する。
🗺 概念マップ
正規性 (normality) を中心ノードとし、 周囲に判定手段 (Shapiro-Wilk・QQ プロット・歪度尖度)、 仮定する手法群 (t 検定・ANOVA・線形回帰)、 違反時の代替 (ノンパラメトリック検定・対数変換)、 関連概念 (中心極限定理・正規分布) を配置した SVG マップ。 中心からの距離が「正規性チェックからの近さ」を表す。
normality
結論
「使う検定の前提を満たすか?
散布図・ヒストグラム・箱ひげ
1 つの図で 5 指標(最小
n が大きくなるほど正規に近
45° の対角線
本セクションでは正規性に関連する 視覚化・検定・変換・代替手法 を補強する。 QQ プロット、 Shapiro-Wilk の検出力、 対数/Box-Cox 変換、 ノンパラ代替の判断基準を一つずつ確認することで、 「検定 p 値だけに依存しない正規性判断」の引き出しを増やせる。
🔗 隣接手法への橋渡し
「正規性」は単独で完結せず、 前後の手法と組み合わさって価値が発揮される。 入力データの準備 (上流)・同目的の代替手法との比較 (並列)・結果の活用 (下流) という 3 軸で隣接領域を整理する。
上流 (入力の準備) : 記述統計 による 歪度 ・尖度 の確認、 ヒストグラム ・QQ プロット の可視化
並列 (同目的の代替) : Shapiro-Wilk 検定、 Kolmogorov-Smirnov 検定、 Anderson-Darling 検定、 Jarque-Bera 検定 が同目的で並列
下流 (結果の活用) : 結果に応じて t 検定 ・ANOVA (正規 OK) と ノンパラメトリック検定 (正規 NG) を選択、 対数変換 で正規化を試行
この上流・並列・下流の対応を地図化することで、 「正規性」を中核に据えた分析パイプライン (データ準備 → 手法選択 → 結果の検証と展開) の全体像が見えてくる。
🌳 手法選択フロー
「正規性」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。
Step 1: 目的は記述か予測か?
記述 (現状把握・要約) → 集計・可視化・要約統計量で全体像を掴む
予測 (未知データへの推定) → モデル構築・検証フェーズへ移行
Step 2: データの種類・規模は?
Step 3: 結果の解釈・共有は?
専門家向け → 数値指標・統計検定で精緻に評価
非専門家向け → 可視化・自然言語での要約を重視
このフローに沿って判断することで、 「正規性」を中核とした適切な手法選択ができる。
🧭 深掘り:直感・落とし穴・発展(追補)
ここまでの各節(🎨 直感で掴む ・⚠️ よくある落とし穴 ・🔗 関連用語 )で扱った内容を、 「一枚で見返せる要約」として追補します。 既存の解説を置き換えるものではなく、 復習・逆引き用のインデックスとして使ってください。
🎨 直感 — 「正規性」を一言で
正規性とは 「データ(正確には推定量)が正規分布に従うか」 という問いです。 t 検定・ANOVA ・線形回帰の p 値や信頼区間は、 内部で推定量が 正規分布 に従うことを使って計算されるため、 これが前提になります。 確認は 可視化(ヒストグラム ・Q-Q プロット)と検定(Shapiro-Wilk ほか)を必ず併用 するのが鉄則。 検定は「正規か否か」の二値を返しますが、 実務で効くのは「どの程度・どの向きにズレているか」という逸脱の大きさ で、 これは Q-Q プロットでしか見えません。
⚠️ 落とし穴 — 「外れ値を1個抜けば正規」は誤解
SSDSE-B-2026(2023 年・47 都道府県)の総人口で、 「東京都という極端値さえ抜けば正規に戻る」と考えがちですが、 実測ではそうなりません :
対象(総人口 A1101) n 歪度 Shapiro W p 値
全 47 県 47 +2.29 0.6895 1.1e-08
東京都(最大値)を除外 46 +1.82 0.7235 5.6e-08
log10 変換(全 47 県) 47 +0.82 0.9280 0.0064
Box-Cox 変換(λ≈−0.49) 47 ≈0 0.9770 0.48
東京を抜いても歪度は +1.82 と大きいまま(W もほとんど改善しない)。 これは「1 個の外れ値」ではなく分布全体が右に歪んでいる(対数正規型) ことを意味します。 効くのは点の除去ではなく 対数変換 や Box-Cox 変換という スケールの変更 です。 その他の代表的な落とし穴:
大標本での過敏 :n が大きいと Shapiro-Wilk はごく僅かな逸脱でも棄却する。 一方その大標本では 中心極限定理 で平均は十分正規なので、 検定は「非正規」と言っても実害は小さい。
小標本での検出力不足 :n=47 でも微小な歪みは検出できないことがある(「棄却できない=正規」ではない)。
目的次第で正規性は不要 :平均の推定・比較なら CLT が効き、 元データの厳密な正規性は要らないことが多い。 仮説検定 の前提が「何の正規性」かを常に確認する(回帰なら応答変数ではなく残差 )。
Q-Q プロットの主観と検定過信 :可視化だけだと主観、 検定だけだと逸脱の大きさが見えない。 数値検定+箱ひげ図 /Q-Q の併用で客観性を補う。
対数変換の機械適用 :0 や負値には 対数変換 不可(log(x+1) や Yeo-Johnson を検討)。 変換後の平均は幾何平均に対応するので解釈も変わる。
🚀 発展 — 次の一手のマップ
検定の使い分け :Shapiro-Wilk(全般に最強検出力)/Kolmogorov-Smirnov(分布全体)/Anderson-Darling(裾重視)/D'Agostino K²・Jarque-Bera(歪度・尖度)。 得意な逸脱が違うので結論が割れるのは正常(本ページ「🔬 実データで計算」節に 5 検定一括比較あり)。
数値指標 :歪度 ≈ 0、 過剰尖度 ≈ 0 が正規の目安。 経験則で |歪度|≤1・|尖度|≤2 なら概ね許容。
変換 :対数変換 ・Box-Cox(正値前提、 SSDSE 総人口では λ≈−0.49 で W=0.977, p=0.48 まで回復)・Yeo-Johnson(負値可)。
CLT との関係 :中心極限定理 により標本平均は元分布によらず n とともに正規へ。 歪みが強いほど必要な n は増える。
頑健・ノンパラ代替 :ノンパラメトリック検定 (Mann-Whitney U・Wilcoxon・Kruskal-Wallis)、 ブートストラップ 、 ロバスト統計 (中央値・トリム平均・M 推定)。
多変量正規性 :単変量が正規でも結合分布は正規とは限らない。 マハラノビス距離+χ² プロット、 Mardia/Royston 検定などで評価する。
🔗 関連ページ
📌 要点 :正規性は「真理」ではなく「使う手法の前提を満たすか」という相対的な問い。 可視化で逸脱の大きさを見る → 数値検定で裏を取る → 変換/ノンパラで打ち手を持つ 、 の順で判断すれば、 SSDSE のような小標本でも一貫した意思決定ができます。 数値はすべて SSDSE-B-2026(2023 年・47 県)の実測です。