ヘロログ
統計学

カイ二乗検定

「製品の品質にばらつきはないか」「製造工程は安定しているか」。こうした問いに答えるために、分散を検定する手法が必要となる。その代表的な手法がカイ二乗検定である。

カイ二乗検定は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 と等しいかを検定する。

H_0: \sigma^2 = \sigma_0^2 \quad \text{vs.} \quad H_1: \sigma^2 \neq \sigma_0^2

検定統計量の導出

標本から不偏分散 s^2 を計算する。

s^2 = \dfrac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})^2

正規母集団からの標本について、以下の重要な性質が知られている。

\dfrac{(n-1)s^2}{\sigma^2} \sim \chi^2(n-1)

つまり、\dfrac{(n-1)s^2}{\sigma^2}自由度 n-1 のカイ二乗分布に従う。この性質を利用して、帰無仮説 H_0: \sigma^2 = \sigma_0^2 のもとでの検定統計量を

V = \dfrac{(n-1)s^2}{\sigma_0^2}

と定義する。帰無仮説が正しければ、V は自由度 n-1 のカイ二乗分布に従う。

正規性の仮定が重要

この検定は母集団が正規分布に従うことを強く仮定している。t検定と比べて正規性からの逸脱に敏感であり、母集団が正規分布から大きく外れる場合は信頼性が低下する。

棄却域と判定

カイ二乗分布は左右非対称であるため、両側検定では上側と下側で異なる臨界値を使用する。

両側検定

有意水準 \alpha の両側検定では、以下の条件で帰無仮説を棄却する。

V \leq \chi_{1-\alpha/2}^2(n-1) \quad \text{または} \quad V \geq \chi_{\alpha/2}^2(n-1)

ここで \chi_{\alpha/2}^2(n-1)\chi_{1-\alpha/2}^2(n-1) はそれぞれカイ二乗分布の上側 \alpha/2 点と上側 1-\alpha/2 点である。

カイ二乗分布(自由度 n−1)の両側検定 V f(V) 0 5 10 15 20 25 30 2.70 19.02 棄却域 α/2 棄却域 α/2 採択域
図1: 両側検定の棄却域(自由度9、α=0.05の場合)

片側検定

対立仮説の方向に応じて、片側検定を行うこともできる。

対立仮説 棄却域 意味
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:仮説の設定

「規格を超えているか」を調べるので右片側検定を行う。

H_0: \sigma^2 = 4 \quad \text{vs.} \quad H_1: \sigma^2 > 4

Step 2:統計量の計算

まず標本平均を計算する。

\bar{X} = \dfrac{47+53+48+55+46+54+49+52+51+45}{10} = \dfrac{500}{10} = 50

次に偏差平方和を計算する。

\begin{aligned} &(47-50)^2 + (53-50)^2 + (48-50)^2 + (55-50)^2 + (46-50)^2 \\ &+ (54-50)^2 + (49-50)^2 + (52-50)^2 + (51-50)^2 + (45-50)^2 \\ &= 9 + 9 + 4 + 25 + 16 + 16 + 1 + 4 + 1 + 25 = 110 \end{aligned}

不偏分散を計算する。

s^2 = \dfrac{110}{10-1} = \dfrac{110}{9} = 12.22

Step 3:検定統計量の計算

V = \dfrac{(n-1)s^2}{\sigma_0^2} = \dfrac{9 \times 12.22}{4} = \dfrac{110}{4} = 27.5

Step 4:棄却域との比較

自由度9のカイ二乗分布の上側5%点は \chi_{0.05}^2(9) = 16.92 である。

V = 27.5 > 16.92 = \chi_{0.05}^2(9)

検定統計量が棄却域に入るので、帰無仮説を棄却する。

結論:有意水準5%で、製品重量のばらつきは規格(標準偏差2g以内)を超えていると判断できる。製造工程の見直しが必要である。

区間推定との関係

カイ二乗検定は母分散の区間推定と密接に関連している。信頼区間と検定の関係を利用すると、区間推定の結果から検定の結論を導くことができる。

母分散 \sigma^2100(1-\alpha)\% 信頼区間は

\left[ \dfrac{(n-1)s^2}{\chi_{\alpha/2}^2(n-1)}, \dfrac{(n-1)s^2}{\chi_{1-\alpha/2}^2(n-1)} \right]

である。この信頼区間に \sigma_0^2 が含まれていなければ、有意水準 \alpha で帰無仮説 H_0: \sigma^2 = \sigma_0^2 を棄却する。

先の例で計算すると、95%信頼区間は

\left[ \dfrac{110}{19.02}, \dfrac{110}{2.70} \right] = [5.78, 40.74]

となる。規格値 \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分布

練習問題

問1. ある電池メーカーでは、電池の寿命の標準偏差が15時間以内であることを品質基準としている。12個の電池をテストしたところ、寿命のデータ(単位:時間)は以下の通りであった。

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

検定統計量:

V = \dfrac{11 \times 379.55}{225} = 18.56

自由度11のカイ二乗分布の臨界値:\chi_{0.975}^2(11) = 3.82\chi_{0.025}^2(11) = 21.92

3.82 < 18.56 < 21.92 なので帰無仮説を棄却しない。

結論:有意水準5%で、電池寿命のばらつきは品質基準を満たしているといえる。

問2. ある薬品の純度について、製造工程の安定性を評価するため8回の測定を行った。測定値(%)は以下の通りである。

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

検定統計量:

V = \dfrac{7 \times 0.045}{0.04} = 7.875

自由度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を使ったカイ二乗検定の実装例を示す。

chi_squared_test.py
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}")
=== 製品重量のばらつき検査 === サンプルサイズ: n = 10 不偏分散: s² = 12.2222 検定統計量: V = 27.5000 自由度: 9 P値: 0.001156 帰無仮説を棄却 === 臨界値表 === 自由度 9 のカイ二乗分布: 上側 5% 点: χ²₀.₀₅(9) = 16.919 上側 2.5% 点: χ²₀.₀₂₅(9) = 19.023 下側 2.5% 点: χ²₀.₉₇₅(9) = 2.700