ヘロログ
統計学

F検定(等分散性の検定)

「2つの製造ラインで製品の品質にばらつきの差があるか」「新しい測定機器と従来の機器で精度に違いがあるか」。こうした問いに答えるために、2つの母集団の分散を比較する手法が必要となる。その代表格がF検定(等分散性の検定)である。

F検定の「F」は、統計学の父と呼ばれるロナルド・フィッシャー(Ronald Fisher, 1890-1962)に由来する。フィッシャーは1920年代に農業試験場での実験計画法の研究を通じて、分散比の分布を導いた。後に統計学者のジョージ・W・スネデカーがフィッシャーに敬意を表して「F分布」「F検定」と命名した。F検定は今日でも、品質管理や医学研究など幅広い分野で活用されている。

本記事では、F検定の基本的な考え方から、具体的な計算方法、t検定との関係まで解説する。F分布統計的仮説検定の基礎知識があると理解しやすい。

F検定とは

F検定は、2つの母集団の分散が等しいかどうかを検定する手法である。正確には「等分散性の検定」や「分散比の検定」とも呼ばれる。

F検定が必要となる主な場面は以下の通りである。

  • 品質管理:2つの製造ラインの製品ばらつきを比較
  • 測定精度の評価:新旧の測定機器の精度を比較
  • t検定の前提確認:2標本t検定(スチューデント)は等分散を仮定するため、事前にF検定で確認
  • 医学研究:治療法による効果のばらつきを比較
2つの母集団の分布(平均は同じ、分散が異なる) μ(平均) 群A(σ²小) 群B(σ²大) ばらつき小 ばらつき大 x f(x)
図1: F検定は2つの母集団の分散(ばらつき)が等しいかを比較する検定

問題設定と仮説

群Aから n_A 個の標本 X_{A1}, X_{A2}, \ldots, X_{An_A} が得られ、群Bから n_B 個の標本 X_{B1}, X_{B2}, \ldots, X_{Bn_B} が得られたとする。各群の母集団は正規分布に従うと仮定する。

\text{群A}: X_{Ai} \sim N(\mu_A, \sigma_A^2), \quad \text{群B}: X_{Bi} \sim N(\mu_B, \sigma_B^2)

母平均 \mu_A, \mu_B は未知とし、2つの母分散が等しいかを検定する。

帰無仮説と対立仮説

H_0: \sigma_A^2 = \sigma_B^2 \quad \text{vs.} \quad H_1: \sigma_A^2 \neq \sigma_B^2 \quad \text{(両側検定)}

片側検定を行う場合は、対立仮説を H_1: \sigma_A^2 < \sigma_B^2 または H_1: \sigma_A^2 > \sigma_B^2 とする。

検定統計量

各群の不偏分散を計算する。

s_A^2 = \dfrac{1}{n_A - 1} \sum_{i=1}^{n_A} (X_{Ai} - \bar{X}_A)^2, \quad s_B^2 = \dfrac{1}{n_B - 1} \sum_{i=1}^{n_B} (X_{Bi} - \bar{X}_B)^2

帰無仮説 H_0: \sigma_A^2 = \sigma_B^2 のもとで、検定統計量

F = \dfrac{s_B^2}{s_A^2}

自由度 (n_B - 1, n_A - 1)F分布に従う。

分子と分母の順序

F統計量の定義では、分子・分母の取り方に注意が必要である。本記事では群Bの分散を分子に置いたが、文献によっては逆の場合もある。大切なのは自由度の対応である。分子の自由度(第1自由度)は分子に使った分散のサンプルサイズ−1、分母の自由度(第2自由度)は分母に使った分散のサンプルサイズ−1となる。

なぜF分布に従うのか

正規母集団からの標本について、\dfrac{(n-1)s^2}{\sigma^2} は自由度 n-1カイ二乗分布に従う。したがって、帰無仮説のもと(\sigma_A^2 = \sigma_B^2)では

F = \dfrac{s_B^2}{s_A^2} = \dfrac{\dfrac{(n_B-1)s_B^2}{\sigma^2} / (n_B-1)}{\dfrac{(n_A-1)s_A^2}{\sigma^2} / (n_A-1)} = \dfrac{\chi_{n_B-1}^2 / (n_B-1)}{\chi_{n_A-1}^2 / (n_A-1)}

となり、これは自由度 (n_B-1, n_A-1) のF分布の定義そのものである。

棄却域と判定

F分布は非対称な分布であるため、両側検定と片側検定で棄却域の設定が異なる。

両側検定

対立仮説 H_1: \sigma_A^2 \neq \sigma_B^2 のとき、有意水準 \alpha で次の条件を満たせば帰無仮説を棄却する。

F \ge F_{\alpha/2}(n_B-1, n_A-1) \quad \text{または} \quad F \le F_{1-\alpha/2}(n_B-1, n_A-1)

ここで F_{\alpha/2}(d_1, d_2) は自由度 (d_1, d_2) のF分布の上側 \dfrac{100\alpha}{2}%点である。

両側検定の棄却域(α = 0.05) F f(F) 0 1 2 3 4 5 F0.975 F0.025 α/2 α/2 採択域(H₀を棄却しない) F(5, 10)
図2: 両側検定の棄却域(F分布は非対称なので左右の臨界値が異なる)

片側検定

対立仮説 棄却域 意味
H_1: \sigma_A^2 < \sigma_B^2 F \ge F_{\alpha}(n_B-1, n_A-1) 群Bのばらつきが大きい
H_1: \sigma_A^2 > \sigma_B^2 F \le F_{1-\alpha}(n_B-1, n_A-1) 群Aのばらつきが大きい
H_1: \sigma_A^2 \neq \sigma_B^2 F \ge F_{\alpha/2} または F \le F_{1-\alpha/2} ばらつきが異なる
片側検定の棄却域(α = 0.05, 上側) F f(F) 0 1 2 3 4 5 F0.05 = 3.33 α = 0.05 採択域 F(5, 10)
図3: 片側検定の棄却域(σ²A < σ²B を対立仮説とする場合)
F分布の性質を利用した計算の簡略化

F分布には F_{1-\alpha}(d_1, d_2) = \dfrac{1}{F_{\alpha}(d_2, d_1)} という関係がある。そのため、分散が大きい方を分子に置けば、常に上側パーセント点のみで判定できる。多くの統計ソフトや教科書ではこの方法を採用している。

計算例

例:製造ラインの精度比較

ある工場で、2つの製造ライン(A, B)から製品を抽出し、重量(g)を測定した。

ラインA(12個):50.2, 49.8, 50.5, 49.7, 50.3, 50.1, 49.9, 50.4, 50.0, 49.6, 50.2, 50.1

ラインB(10個):49.5, 51.2, 48.8, 50.8, 49.1, 51.0, 49.3, 50.7, 49.0, 51.5

有意水準5%で、2つのラインの分散に差があるか検定せよ。

【解答】

Step 1:仮説の設定

「差があるか」を調べるので両側検定を行う。

H_0: \sigma_A^2 = \sigma_B^2 \quad \text{vs.} \quad H_1: \sigma_A^2 \neq \sigma_B^2

Step 2:統計量の計算

まず、各群の標本平均と不偏分散を計算する。

\bar{X}_A = \dfrac{50.2 + 49.8 + \cdots + 50.1}{12} = 50.067
\bar{X}_B = \dfrac{49.5 + 51.2 + \cdots + 51.5}{10} = 50.090

不偏分散を計算する。

s_A^2 = \dfrac{\sum_{i=1}^{12}(X_{Ai} - 50.067)^2}{11} = 0.0770
s_B^2 = \dfrac{\sum_{i=1}^{10}(X_{Bi} - 50.090)^2}{9} = 1.0810

Step 3:検定統計量の計算

s_B^2 > s_A^2 なので、ラインBの分散を分子に置く。

F = \dfrac{s_B^2}{s_A^2} = \dfrac{1.0810}{0.0770} = 14.04

Step 4:棄却域との比較

自由度 (9, 11) のF分布の上側2.5%点は F_{0.025}(9, 11) = 3.588 である。

F = 14.04 > 3.588 = F_{0.025}(9, 11)

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

結論:有意水準5%で、2つの製造ラインの分散には有意な差がある。ラインBはラインAよりばらつきが大きく、製品の品質安定性に問題がある可能性がある。

F = 14.04 (計算値) 計算例:F(9, 11)分布と検定統計量 F f(F) 0 2 4 6 8 10 12 14 16 F0.025 = 3.59 棄却域(α/2 = 0.025) F(9, 11)
図4: 計算例の検定結果(F = 14.04 は棄却域に入り、帰無仮説を棄却)

t検定との関係

独立な2標本t検定(スチューデントのt検定)は、2群の母分散が等しいこと(等分散)を仮定している。そのため、t検定を実施する前にF検定で等分散性を確認することが推奨されてきた。

従来のアプローチ

  1. F検定で等分散性を検定
  2. 等分散が棄却されなければ → スチューデントのt検定
  3. 等分散が棄却されれば → ウェルチのt検定

現代的なアプローチ

しかし近年では、以下の理由からこの2段階アプローチは推奨されなくなっている。

  • F検定は正規性からの逸脱に敏感で、実用上の信頼性に欠ける
  • 2回の検定を行うことで全体の第一種の過誤確率が膨らむ
  • ウェルチのt検定は等分散でも等分散でなくても適切な結果を与える
実務での推奨

現在では、2群の平均を比較する際は最初からウェルチのt検定を使用することが推奨されている。等分散性の事前検定は多くの場合不要である。ただし、分散そのものに興味がある場合(品質管理での精度比較など)は、F検定は依然として有用なツールである。

前提条件と注意点

正規性の仮定

F検定は母集団が正規分布に従うことを仮定している。t検定は正規性からの逸脱にある程度頑健だが、F検定は正規性の仮定に対して敏感である。つまり、データが正規分布から外れると、検定結果の信頼性が低下する。

代替手法

正規性が疑わしい場合や、外れ値が存在する場合は、以下の代替手法が利用できる。

手法 特徴
レヴェーン検定 正規性に対して頑健。各データの絶対偏差を用いる
ブラウン-フォーサイス検定 中央値からの偏差を使用。外れ値に強い
バートレット検定 3群以上の等分散性を検定。正規性を仮定

練習問題

問1. 2つのメーカー(A, B)の電球の寿命(時間)を比較した。

メーカーA(5個):1200, 1180, 1220, 1190, 1210

メーカーB(6個):1150, 1250, 1100, 1280, 1180, 1230

有意水準5%で、2つのメーカーの製品寿命の分散に差があるか検定せよ。

H_0: \sigma_A^2 = \sigma_B^2 vs H_1: \sigma_A^2 \neq \sigma_B^2

各群の統計量:

\bar{X}_A = 1200.0s_A^2 = 250.00n_A = 5

\bar{X}_B = 1198.3s_B^2 = 4536.67n_B = 6

検定統計量:

F = \dfrac{s_B^2}{s_A^2} = \dfrac{4536.67}{250.00} = 18.15

自由度 (5, 4) のF分布の上側2.5%点:F_{0.025}(5, 4) = 9.364

F = 18.15 > 9.364 なので帰無仮説を棄却する。

結論:有意水準5%で、2つのメーカーの製品寿命の分散には有意な差がある(メーカーBのばらつきが大きい)。

問2. 2台の血圧測定機器(A, B)の精度を比較するため、同じ基準器で8回ずつ測定した。

機器A:118, 122, 120, 119, 121, 120, 118, 123

機器B:115, 125, 118, 128, 112, 130, 116, 126

有意水準5%で、機器Bの測定値のばらつきは機器Aより大きいか検定せよ(片側検定)。

H_0: \sigma_A^2 = \sigma_B^2 vs H_1: \sigma_A^2 < \sigma_B^2(右片側検定)

各機器の統計量:

\bar{X}_A = 120.1s_A^2 = 3.27

\bar{X}_B = 121.3s_B^2 = 45.93

検定統計量:

F = \dfrac{s_B^2}{s_A^2} = \dfrac{45.93}{3.27} = 14.06

自由度 (7, 7) のF分布の上側5%点:F_{0.05}(7, 7) = 3.787

F = 14.06 > 3.787 なので帰無仮説を棄却する。

結論:有意水準5%で、機器Bの測定値のばらつきは機器Aより有意に大きい。機器Aの方が精度が高い。

問3. 新薬と既存薬の効果を測定した。効果の指標(数値が大きいほど効果が高い)は以下の通りである。

新薬(10人):15.2, 14.8, 15.5, 15.0, 14.5, 15.3, 14.9, 15.1, 14.7, 15.4

既存薬(8人):13.5, 16.0, 14.0, 15.8, 13.2, 16.5, 14.5, 15.0

有意水準5%で、2つの薬の効果の分散に差があるか検定せよ。t検定を行う際の等分散の仮定が適切かどうかを判断せよ。

H_0: \sigma_{\text{new}}^2 = \sigma_{\text{old}}^2 vs H_1: \sigma_{\text{new}}^2 \neq \sigma_{\text{old}}^2

各群の統計量:

新薬:\bar{X} = 15.04s^2 = 0.1027n = 10

既存薬:\bar{X} = 14.81s^2 = 1.4784n = 8

検定統計量:

F = \dfrac{s_{\text{old}}^2}{s_{\text{new}}^2} = \dfrac{1.4784}{0.1027} = 14.40

自由度 (7, 9) のF分布の上側2.5%点:F_{0.025}(7, 9) = 4.197

F = 14.40 > 4.197 なので帰無仮説を棄却する。

結論:有意水準5%で、2つの薬の効果の分散には有意な差がある。新薬は効果のばらつきが小さく安定している。t検定を行う場合は、等分散を仮定しないウェルチのt検定を使用すべきである。

まとめ

項目 内容
目的 2つの母集団の分散が等しいかを検定
帰無仮説 H_0: \sigma_A^2 = \sigma_B^2
検定統計量 F = \dfrac{s_B^2}{s_A^2}(分散比)
帰無仮説下の分布 自由度 (n_B-1, n_A-1) のF分布
前提条件 各群のデータが正規分布に従う
注意点 正規性からの逸脱に敏感。代替としてレヴェーン検定がある
t検定との関係 現在はウェルチのt検定を使用することが推奨されている

Python実装

SciPyを使ったF検定の実装例を示す。

f_test.py
import numpy as np
from scipy import stats

# === F検定(等分散性の検定)===
print("=== F検定:製造ラインの精度比較 ===")

# データ
line_a = np.array([50.2, 49.8, 50.5, 49.7, 50.3, 50.1, 49.9, 50.4, 50.0, 49.6, 50.2, 50.1])
line_b = np.array([49.5, 51.2, 48.8, 50.8, 49.1, 51.0, 49.3, 50.7, 49.0, 51.5])

n_a, n_b = len(line_a), len(line_b)

# 不偏分散の計算
var_a = np.var(line_a, ddof=1)
var_b = np.var(line_b, ddof=1)

print(f"ラインA: n={n_a}, 平均={np.mean(line_a):.3f}, 分散={var_a:.4f}")
print(f"ラインB: n={n_b}, 平均={np.mean(line_b):.3f}, 分散={var_b:.4f}")

# F統計量(大きい分散を分子に)
F = var_b / var_a
df1, df2 = n_b - 1, n_a - 1

print(f"\nF統計量 = {F:.3f}")
print(f"自由度 = ({df1}, {df2})")

# P値(両側検定)
p_value = 2 * min(stats.f.sf(F, df1, df2), stats.f.cdf(F, df1, df2))
print(f"P値(両側) = {p_value:.6f}")

# 臨界値
alpha = 0.05
F_crit = stats.f.ppf(1 - alpha/2, df1, df2)
print(f"臨界値 F_0.025({df1},{df2}) = {F_crit:.3f}")

# 判定
if F > F_crit:
    print("→ 帰無仮説を棄却(分散に有意な差がある)")
else:
    print("→ 帰無仮説を棄却しない")

print()

# === レヴェーン検定(正規性に頑健な等分散検定)===
print("=== レヴェーン検定 ===")
stat_levene, p_levene = stats.levene(line_a, line_b)
print(f"統計量 = {stat_levene:.3f}")
print(f"P値 = {p_levene:.6f}")

print()

# === F検定を行う関数 ===
def f_test(x, y, alpha=0.05, alternative='two-sided'):
    """
    F検定を実行する関数
    
    Parameters:
    -----------
    x, y : array-like
        2つの標本データ
    alpha : float
        有意水準
    alternative : str
        'two-sided'(両側), 'greater'(x の分散が大きい), 'less'(y の分散が大きい)
    
    Returns:
    --------
    dict : F統計量、P値、判定結果
    """
    x, y = np.array(x), np.array(y)
    n_x, n_y = len(x), len(y)
    var_x, var_y = np.var(x, ddof=1), np.var(y, ddof=1)
    
    # F統計量
    F = var_x / var_y
    df1, df2 = n_x - 1, n_y - 1
    
    # P値の計算
    if alternative == 'two-sided':
        p_value = 2 * min(stats.f.sf(F, df1, df2), stats.f.cdf(F, df1, df2))
    elif alternative == 'greater':
        p_value = stats.f.sf(F, df1, df2)
    else:  # 'less'
        p_value = stats.f.cdf(F, df1, df2)
    
    reject = p_value < alpha
    
    return {
        'F_statistic': F,
        'df': (df1, df2),
        'p_value': p_value,
        'reject_H0': reject,
        'var_x': var_x,
        'var_y': var_y
    }

# 使用例
print("=== f_test関数の使用例 ===")
result = f_test(line_a, line_b)
print(f"F統計量 = {result['F_statistic']:.4f}")
print(f"自由度 = {result['df']}")
print(f"P値 = {result['p_value']:.6f}")
print(f"帰無仮説を棄却: {result['reject_H0']}")
=== F検定:製造ラインの精度比較 === ラインA: n=12, 平均=50.067, 分散=0.0770 ラインB: n=10, 平均=50.090, 分散=1.0810 F統計量 = 14.044 自由度 = (9, 11) P値(両側) = 0.000180 臨界値 F_0.025(9,11) = 3.588 → 帰無仮説を棄却(分散に有意な差がある) === レヴェーン検定 === 統計量 = 58.569 P値 = 0.000000 === f_test関数の使用例 === F統計量 = 0.0712 自由度 = (11, 9) P値 = 0.000180 帰無仮説を棄却: True