以下の統計検定2級対策動画で用いられているスライドの一部です。
こんな疑問、ありませんか?
-
「手元にあるアンケート結果は、世間一般の比率と比べて 偏り があるのだろうか?」
-
「サイコロを100回振ってみたけど、本当にそれぞれの目は 平等 に出ているのだろうか?」
このような疑問に客観的な根拠をもって答えるのが 適合度の検定 です。
まず、具体例から見てみましょう
ある新興都市「A市」の人口構成比について、統計的な検証を行います。
問題設定
A市で1000人の住民を対象に調査したところ、以下の結果が得られました。
| 世代 | A市の調査結果 |
|---|---|
| 年少人口(~14歳) | 150人 |
| 生産年齢人口(15~64歳) | 650人 |
| 老年人口(65歳~) | 200人 |
| 合計 | 1000人 |
この 実際に観測されたデータ を 観測度数 と呼びます。
比較対象
一方、この国の全国平均の人口構成比は、以下の通りです。
- 年少人口: 12%
- 生産年齢人口: 59%
- 老年人口: 29%
【今回の問い】
A市の人口構成比は、全国平均と 差がある と言えるでしょうか?
これを統計的に検証していきます。
Step 1: 仮説を立てる
まず、検証したい内容について、2つの仮説を立てます。
-
帰無仮説 $H_0$
A市の人口構成比は、全国平均と 差がない 。
(観測された差は偶然によるもの) -
対立仮説 $H_1$
A市の人口構成比は、全国平均と 差がある 。
(観測された差は偶然とは言えない意味のあるもの)
検定の目的は、この 帰無仮説 を棄却できるかどうかを判断することです。
Step 2: 判断の基準を決める
次に、判断の基準となる 有意水準 $\alpha$ を設定します。
今回は 5% ($0.05$) に設定します。
有意水準 5% とは?
「もし帰無仮説が正しい場合に、それを 誤って棄却してしまう確率」を5%まで許容するという意味です。
Step 3: 「もし仮説が正しかったら」を考える
もし、帰無仮説が正しく「A市の人口構成比が全国平均と同じ」だった場合、期待される人数を計算します。これを 期待度数 と呼びます。
- 期待度数 = 全体の度数合計 $\times$ 理論上の比率
期待度数を計算する
- 年少人口の期待度数: $1000 \times 0.12 =120$ 人
- 生産年齢人口の期待度数: $1000 \times 0.59 = 590$ 人
- 老年人口の期待度数: $1000 \times 0.29 = 290$ 人
| 世代 | 観測度数 $O$ | 期待度数 $E$ |
|---|---|---|
| 年少人口 | 150 | 120 |
| 生産年齢人口 | 650 | 590 |
| 老年人口 | 200 | 290 |
| 合計 | 1000 | 1000 |
「ズレ」を数値化する:カイ二乗統計量
観測度数と期待度数の「ズレ」の大きさを測る指標として、 カイ二乗統計量 ($\chi^2$値)を計算します。
この値が 大きければ大きいほど 、ズレが大きいことを意味します。
$$
\chi^2 = \frac{(150 - 120)^2}{120} + \frac{(650 - 590)^2}{590} + \frac{(200 - 290)^2}{290}
$$
$$
\chi^2 \approx 7.5 + 6.102 + 27.931
$$
$$
\chi^2 \approx \textbf{41.533}
$$
Step 4: 「ズレ」が大きいか判断する
計算したカイ二乗統計量 41.533 という値は、
「偶然では起こりにくいほど 大きい」と言えるのでしょうか?
この判断のモノサシとして、 カイ二乗分布 を用います。
判断のモノサシ:カイ二乗分布
検定統計量 $\chi^2$ は、帰無仮説が正しいとき、ある 自由度 を持つカイ二乗分布に近似的に従います。
- 自由度 ($df$) = (カテゴリ数) - 1
今回の例ではカテゴリが3つ(年少、生産年齢、老年)なので、
自由度は $df = 3 - 1 = 2$ となります。
境界線 (臨界値) を調べる
「自由度2、有意水準5%」のカイ二乗分布における 臨界値 を調べます。
臨界値とは、「これより大きい値が出たら、偶然とは考えにくい」という 境界線 です。
カイ二乗分布表や統計ソフトで調べると、臨界値は 5.991 です。
グラフ生成用Pythonコード
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import chi2
# Parameters
df = 2 # degrees of freedom
alpha = 0.05 # significance level
chi2_critical = chi2.ppf(1 - alpha, df)
chi2_calculated = 41.533
# X-axis values
x = np.linspace(0, 50, 500)
# Y-axis values (probability density function)
y = chi2.pdf(x, df)
# Create the plot
plt.figure(figsize=(10, 6))
plt.plot(x, y, label=f'Chi-squared distribution (df={df})')
# Shade the rejection region
x_rejection = np.linspace(chi2_critical, 50, 100)
y_rejection = chi2.pdf(x_rejection, df)
plt.fill_between(x_rejection, y_rejection, color='red', alpha=0.5, label=f'Rejection Region (alpha={alpha})')
# Mark the critical value
plt.axvline(x=chi2_critical, color='red', linestyle='--', label=f'Critical Value: {chi2_critical:.3f}')
# Mark the calculated chi2 value
plt.axvline(x=chi2_calculated, color='green', linestyle='-', linewidth=2, label=f'Calculated Chi2: {chi2_calculated:.3f}')
# Add titles and labels
plt.title('Chi-squared Distribution and Test Result')
plt.xlabel('Chi-squared value')
plt.ylabel('Probability Density')
plt.legend()
plt.grid(True)
plt.show()
判定
計算したカイ二乗統計量と、境界線である臨界値を比較します。
- 算出したカイ二乗統計量: 41.533
- 臨界値: 5.991
41.533 > 5.991
計算した値は臨界値よりも大きく、 棄却域 (偶然とは考えにくい領域)に入ります。
Step 5: 結論
-
検定統計量が棄却域に入ったため、 帰無仮説 $H_0$ は棄却されます 。
-
したがって、
「有意水準5%において、A市の人口構成比は全国平均と差がある」
と結論付けることができます。
ここまでの流れを一般化すると...
ここからは、今回の例題で行ったことを一般化し、用語や公式としてまとめます。
適合度の検定とは? (定義)
-
実際に観測されたデータ (観測度数) が、ある理論的な分布や想定される比率 (期待度数) にどれだけ適合しているかを統計的に検証する手法。
-
仮説は以下のように設定する。
- 帰無仮説 $H_0$: 観測度数は、理論上の分布に従う (差はない)。
- 対立仮説 $H_1$: 観測度数は、理論上の分布に従わない (差がある)。
カイ二乗 ($\chi^2$) 統計量とは? (公式)
観測度数と期待度数のズレの大きさを測る指標です。
- 観測度数 $O_i$: 実際に観測された、カテゴリ $i$ のデータ数。
- 期待度数 $E_i$: 理論通りであった場合に期待される、カテゴリ $i$ のデータ数。
- カテゴリ数 $k$
$$
\chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}
$$
この $\chi^2$ 値は、帰無仮説が正しいとき、自由度 $df = k-1$ のカイ二乗分布に近似的に従います。
カイ二乗検定の注意点
カイ二乗分布への近似を正しく行うためには、以下の条件を満たすことが推奨されます。
すべてのカテゴリにおいて、期待度数が5未満にならないこと。
もし5未満のカテゴリがある場合は、隣接するカテゴリと統合するなどの調整が必要です。
まとめ
-
適合度の検定
観測されたデータが 理論上の比率と一致しているか を検証する手法。 -
カイ二乗統計量 ($\chi^2$)
観測度数 と 期待度数 のズレを定量化する指標。 -
検定の手順
計算した $\chi^2$ 値が、自由度 $k-1$ のカイ二乗分布における 臨界値 より大きいかどうかで、統計的な判断を下す。
