「製品の品質にばらつきはないか」「製造工程は安定しているか」。こうした問いに答えるために、分散を検定する手法が必要となる。その代表的な手法がカイ二乗検定である。
カイ二乗検定は1900年、イギリスの統計学者カール・ピアソンによって発表された。ピアソンはこの検定を「適合度検定」として提案し、観測データが理論分布にどれだけ適合するかを評価する方法を確立した。この手法は現代統計学の基礎となり、品質管理から医学研究まで幅広い分野で活用されている。
本記事では、カイ二乗分布を用いた母分散の検定について解説する。これは正規母集団の分散が特定の値と等しいかどうかを検証する手法であり、製造業における品質管理などで重要な役割を果たす。統計的仮説検定の基礎知識があると理解しやすい。
分散の検定とは
分散の検定とは、母集団の分散(ばらつき)が特定の値と等しいかどうかを統計的に判断する手法である。たとえば「製品重量のばらつきが規格内に収まっているか」といった問題に答えるために用いられる。
平均の検定(t検定やZ検定)が「中心」を評価するのに対し、分散の検定は「散らばり」を評価する。どちらも品質管理では重要であり、平均が規格通りでも、ばらつきが大きければ不良品が発生する可能性がある。
製品重量が平均50gであっても、ばらつきが大きければ45gや55gの製品が混在する。規格が48g〜52gなら、平均は合格でもばらつきによって不良品が発生する。分散の検定はこのような「ばらつきの管理」に必要不可欠である。
検定の考え方
問題設定
母集団が正規分布 N(\mu, \sigma^2) に従うとする。母平均 \mu は未知でもよい。標本 X_1, X_2, \ldots, X_n から、母分散 \sigma^2 がある値 \sigma_0^2 と等しいかを検定する。
検定統計量の導出
標本から不偏分散 s^2 を計算する。
正規母集団からの標本について、以下の重要な性質が知られている。
つまり、\dfrac{(n-1)s^2}{\sigma^2} は自由度 n-1 のカイ二乗分布に従う。この性質を利用して、帰無仮説 H_0: \sigma^2 = \sigma_0^2 のもとでの検定統計量を
と定義する。帰無仮説が正しければ、V は自由度 n-1 のカイ二乗分布に従う。
この検定は母集団が正規分布に従うことを強く仮定している。t検定と比べて正規性からの逸脱に敏感であり、母集団が正規分布から大きく外れる場合は信頼性が低下する。
棄却域と判定
カイ二乗分布は左右非対称であるため、両側検定では上側と下側で異なる臨界値を使用する。
両側検定
有意水準 \alpha の両側検定では、以下の条件で帰無仮説を棄却する。
ここで \chi_{\alpha/2}^2(n-1) と \chi_{1-\alpha/2}^2(n-1) はそれぞれカイ二乗分布の上側 \alpha/2 点と上側 1-\alpha/2 点である。
片側検定
対立仮説の方向に応じて、片側検定を行うこともできる。
| 対立仮説 | 棄却域 | 意味 |
|---|---|---|
| H_1: \sigma^2 > \sigma_0^2(右片側) | V \geq \chi_{\alpha}^2(n-1) | 分散が規格より大きいか |
| H_1: \sigma^2 < \sigma_0^2(左片側) | V \leq \chi_{1-\alpha}^2(n-1) | 分散が規格より小さいか |
| H_1: \sigma^2 \neq \sigma_0^2(両側) | V \leq \chi_{1-\alpha/2}^2 または V \geq \chi_{\alpha/2}^2 | 分散が規格と異なるか |
計算例
ある工場で製造される製品の重量について、規格では標準偏差が2g以内(分散4以内)であることが求められている。品質管理のため10個の製品を抽出して重量を測定したところ、以下のデータが得られた(単位:g)。
47, 53, 48, 55, 46, 54, 49, 52, 51, 45
有意水準5%で、製品重量のばらつきが規格を超えているか検定せよ。
【解答】
Step 1:仮説の設定
「規格を超えているか」を調べるので右片側検定を行う。
Step 2:統計量の計算
まず標本平均を計算する。
次に偏差平方和を計算する。
不偏分散を計算する。
Step 3:検定統計量の計算
Step 4:棄却域との比較
自由度9のカイ二乗分布の上側5%点は \chi_{0.05}^2(9) = 16.92 である。
検定統計量が棄却域に入るので、帰無仮説を棄却する。
結論:有意水準5%で、製品重量のばらつきは規格(標準偏差2g以内)を超えていると判断できる。製造工程の見直しが必要である。
区間推定との関係
カイ二乗検定は母分散の区間推定と密接に関連している。信頼区間と検定の関係を利用すると、区間推定の結果から検定の結論を導くことができる。
母分散 \sigma^2 の 100(1-\alpha)\% 信頼区間は
である。この信頼区間に \sigma_0^2 が含まれていなければ、有意水準 \alpha で帰無仮説 H_0: \sigma^2 = \sigma_0^2 を棄却する。
先の例で計算すると、95%信頼区間は
となる。規格値 \sigma_0^2 = 4 はこの区間に含まれないので、帰無仮説を棄却するという結論と一致する。
F検定との関係
カイ二乗検定が「1つの母集団の分散が特定の値と等しいか」を検定するのに対し、F検定は「2つの母集団の分散が等しいか」を検定する。
| カイ二乗検定 | F検定 | |
|---|---|---|
| 目的 | 1つの母分散が特定の値か | 2つの母分散が等しいか |
| 帰無仮説 | \sigma^2 = \sigma_0^2 | \sigma_A^2 = \sigma_B^2 |
| 検定統計量 | V = \dfrac{(n-1)s^2}{\sigma_0^2} | F = \dfrac{s_A^2}{s_B^2} |
| 分布 | カイ二乗分布 | F分布 |
練習問題
1020, 985, 1035, 990, 1010, 1005, 995, 1015, 1000, 980, 1025, 970
有意水準5%で、電池寿命のばらつきが品質基準を満たしているか両側検定せよ。
H_0: \sigma^2 = 225 vs H_1: \sigma^2 \neq 225
標本平均:\bar{X} = 1002.5
偏差平方和:4175
不偏分散:s^2 = 4175/11 = 379.55
検定統計量:
自由度11のカイ二乗分布の臨界値:\chi_{0.975}^2(11) = 3.82、\chi_{0.025}^2(11) = 21.92
3.82 < 18.56 < 21.92 なので帰無仮説を棄却しない。
結論:有意水準5%で、電池寿命のばらつきは品質基準を満たしているといえる。
99.2, 99.5, 99.1, 99.4, 99.3, 99.6, 99.0, 99.5
製造規格では純度の標準偏差が0.2%以内であることが求められている。有意水準5%で、ばらつきが規格を超えているか(片側検定)を検定せよ。
H_0: \sigma^2 = 0.04 vs H_1: \sigma^2 > 0.04(右片側)
標本平均:\bar{X} = 99.325
不偏分散:s^2 = 0.045
検定統計量:
自由度7のカイ二乗分布の上側5%点:\chi_{0.05}^2(7) = 14.07
V = 7.875 < 14.07 なので帰無仮説を棄却しない。
結論:有意水準5%で、ばらつきが規格を超えているとはいえない。
まとめ
| 項目 | 内容 |
|---|---|
| 目的 | 母分散が特定の値と等しいかを検定 |
| 前提 | 母集団が正規分布に従う |
| 検定統計量 | V = \dfrac{(n-1)s^2}{\sigma_0^2} |
| 分布 | 自由度 n-1 のカイ二乗分布 |
| 両側検定の棄却域 | V \leq \chi_{1-\alpha/2}^2 または V \geq \chi_{\alpha/2}^2 |
| 主な用途 | 品質管理、製造工程の安定性評価 |
Python実装
SciPyを使ったカイ二乗検定の実装例を示す。
import numpy as np
from scipy import stats
def chi2_variance_test(data, sigma0_sq, alternative='two-sided', alpha=0.05):
"""
母分散のカイ二乗検定
Parameters:
-----------
data : array-like
標本データ
sigma0_sq : float
帰無仮説での母分散
alternative : str
'two-sided', 'greater', 'less'のいずれか
alpha : float
有意水準
Returns:
--------
dict : 検定結果
"""
n = len(data)
s_sq = np.var(data, ddof=1) # 不偏分散
df = n - 1
# 検定統計量
V = (n - 1) * s_sq / sigma0_sq
# P値の計算
if alternative == 'two-sided':
p_value = 2 * min(stats.chi2.cdf(V, df), 1 - stats.chi2.cdf(V, df))
critical_lower = stats.chi2.ppf(alpha/2, df)
critical_upper = stats.chi2.ppf(1 - alpha/2, df)
reject = V <= critical_lower or V >= critical_upper
elif alternative == 'greater':
p_value = 1 - stats.chi2.cdf(V, df)
critical_upper = stats.chi2.ppf(1 - alpha, df)
reject = V >= critical_upper
else: # 'less'
p_value = stats.chi2.cdf(V, df)
critical_lower = stats.chi2.ppf(alpha, df)
reject = V <= critical_lower
return {
'n': n,
's_squared': s_sq,
'test_statistic': V,
'df': df,
'p_value': p_value,
'reject': reject
}
# 例:製品重量のばらつき検査
print("=== 製品重量のばらつき検査 ===")
data = np.array([47, 53, 48, 55, 46, 54, 49, 52, 51, 45])
sigma0_sq = 4.0 # 規格分散(σ₀ = 2g)
result = chi2_variance_test(data, sigma0_sq, alternative='greater')
print(f"サンプルサイズ: n = {result['n']}")
print(f"不偏分散: s² = {result['s_squared']:.4f}")
print(f"検定統計量: V = {result['test_statistic']:.4f}")
print(f"自由度: {result['df']}")
print(f"P値: {result['p_value']:.6f}")
print(f"帰無仮説を{'棄却' if result['reject'] else '棄却しない'}")
print()
# 臨界値の確認
df = len(data) - 1
print("=== 臨界値表 ===")
print(f"自由度 {df} のカイ二乗分布:")
print(f" 上側 5% 点: χ²₀.₀₅({df}) = {stats.chi2.ppf(0.95, df):.3f}")
print(f" 上側 2.5% 点: χ²₀.₀₂₅({df}) = {stats.chi2.ppf(0.975, df):.3f}")
print(f" 下側 2.5% 点: χ²₀.₉₇₅({df}) = {stats.chi2.ppf(0.025, df):.3f}")