ヘロログ
統計学

分散の区間推定:カイ二乗分布とF分布の活用

製造業の品質管理では、製品の寸法や重量の「ばらつき」が重要な管理対象となる。平均値が規格内であっても、ばらつきが大きければ不良品が発生しやすくなるためだ。このばらつきを表す指標が分散である。

母平均の信頼区間では母平均の区間推定を扱ったが、本記事では母分散の区間推定と、2つの母集団の分散比の区間推定を解説する。母分散の推定にはカイ二乗分布を、分散比の推定にはF分布を用いる。

母分散の区間推定

母集団が正規分布 N(\mu, \sigma^2) に従うとき、母分散 \sigma^2 の信頼区間を求める。母平均 \mu は未知とする。

カイ二乗分布との関係

この母集団から独立に抽出した標本 X_1, X_2, \ldots, X_n について、偏差平方和を

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

とおく。このとき、統計量

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

は自由度 n-1カイ二乗分布に従う。自由度が n ではなく n-1 になるのは、偏差の計算に標本平均 \bar{X} を使うことで1つの自由度が失われるためである。

自由度が n-1 になる理由

偏差 X_i - \bar{X} の総和は必ず0になる(\sum_{i=1}^{n}(X_i - \bar{X}) = 0)。そのため、n 個の偏差のうち n-1 個が決まれば残りの1個は自動的に決まる。自由に値を取れる個数が n-1 なので、自由度は n-1 となる。

信頼区間の導出

自由度 n-1 のカイ二乗分布の上側 \dfrac{\alpha}{2} 点を \chi^2_{\alpha/2}(n-1)、上側 1-\dfrac{\alpha}{2} 点を \chi^2_{1-\alpha/2}(n-1) とすると

P\left(\chi^2_{1-\alpha/2}(n-1) \le \chi^2 \le \chi^2_{\alpha/2}(n-1)\right) = 1 - \alpha

が成り立つ。\chi^2 = S/\sigma^2 を代入して \sigma^2 について整理すると

\begin{aligned} P\left(\chi^2_{1-\alpha/2}(n-1) \le \dfrac{S}{\sigma^2} \le \chi^2_{\alpha/2}(n-1)\right) &= 1 - \alpha \\[8pt] P\left(\dfrac{S}{\chi^2_{\alpha/2}(n-1)} \le \sigma^2 \le \dfrac{S}{\chi^2_{1-\alpha/2}(n-1)}\right) &= 1 - \alpha \end{aligned}
母分散の信頼区間
\left( \dfrac{S}{\chi^2_{\alpha/2}(n-1)}, \quad \dfrac{S}{\chi^2_{1-\alpha/2}(n-1)} \right)

または不偏分散 s^2 = \dfrac{S}{n-1} を使って

\left( \dfrac{(n-1)s^2}{\chi^2_{\alpha/2}(n-1)}, \quad \dfrac{(n-1)s^2}{\chi^2_{1-\alpha/2}(n-1)} \right)
カイ二乗分布の非対称性

カイ二乗分布は正規分布やt分布と異なり左右非対称なので、信頼区間の下限と上限で異なる分位点を使う。95%信頼区間では \chi^2_{0.025}(n-1)(上側2.5%点)と \chi^2_{0.975}(n-1)(上側97.5%点)を用いる。

χ²0.975 χ²0.025 95% 2.5% 2.5% カイ二乗分布(自由度 n-1)
図1: カイ二乗分布と信頼区間

計算例

ある部品の直径を10個測定したところ、不偏分散は s^2 = 18 mm² だった。母分散 \sigma^2 の95%信頼区間を求める。

自由度 n-1 = 9 のカイ二乗分布より、\chi^2_{0.025}(9) = 19.02\chi^2_{0.975}(9) = 2.70 である。

\begin{aligned} \text{下限} &= \dfrac{(n-1)s^2}{\chi^2_{0.025}(n-1)} = \dfrac{9 \times 18}{19.02} = \dfrac{162}{19.02} = 8.52 \\[8pt] \text{上限} &= \dfrac{(n-1)s^2}{\chi^2_{0.975}(n-1)} = \dfrac{9 \times 18}{2.70} = \dfrac{162}{2.70} = 60.0 \end{aligned}

95%信頼区間は (8.52, 60.0) mm² となる。母標準偏差の信頼区間は平方根をとって (2.92, 7.75) mm である。

分散比の区間推定

2つの独立した母集団の分散を比較したい場合、分散の比 \dfrac{\sigma_1^2}{\sigma_2^2} の信頼区間を求める。これにはF分布を用いる。

F分布との関係

第1の母集団 N(\mu_1, \sigma_1^2) から n_1 個、第2の母集団 N(\mu_2, \sigma_2^2) から n_2 個の標本を独立に抽出する。それぞれの不偏分散を s_1^2s_2^2 とすると、統計量

F = \dfrac{s_1^2 / \sigma_1^2}{s_2^2 / \sigma_2^2}

は自由度 (n_1 - 1, n_2 - 1) のF分布に従う。

信頼区間の導出

自由度 (\phi_1, \phi_2) = (n_1-1, n_2-1) のF分布の上側 \dfrac{\alpha}{2} 点を F_{\alpha/2}(\phi_1, \phi_2)、上側 1-\dfrac{\alpha}{2} 点を F_{1-\alpha/2}(\phi_1, \phi_2) とすると

P\left(F_{1-\alpha/2}(\phi_1, \phi_2) \le F \le F_{\alpha/2}(\phi_1, \phi_2)\right) = 1 - \alpha

F の定義を代入し、分散比 \dfrac{\sigma_1^2}{\sigma_2^2} について整理すると

分散比の信頼区間
\left( \dfrac{s_1^2}{s_2^2} \cdot \dfrac{1}{F_{\alpha/2}(\phi_1, \phi_2)}, \quad \dfrac{s_1^2}{s_2^2} \cdot \dfrac{1}{F_{1-\alpha/2}(\phi_1, \phi_2)} \right)

計算例

2つの工場A、Bで同じ製品を製造している。品質のばらつきを比較するため、工場Aから12個、工場Bから16個の製品をサンプリングしたところ、不偏分散はそれぞれ s_1^2 = 25s_2^2 = 16 だった。分散比 \dfrac{\sigma_1^2}{\sigma_2^2} の95%信頼区間を求める。

自由度 (\phi_1, \phi_2) = (11, 15) のF分布より、F_{0.025}(11, 15) = 3.01F_{0.975}(11, 15) = 0.300 である。

\begin{aligned} \dfrac{s_1^2}{s_2^2} &= \dfrac{25}{16} = 1.5625 \\[10pt] \text{下限} &= 1.5625 \times \dfrac{1}{3.01} = 0.52 \\[8pt] \text{上限} &= 1.5625 \times \dfrac{1}{0.300} = 5.21 \end{aligned}

95%信頼区間は (0.52, 5.21) となる。この区間は1を含むため、95%の信頼率では「2つの工場の分散が異なる」とは言えない。

分散比の信頼区間と等分散性

分散比の95%信頼区間が1を含む場合、「2つの母分散が等しい」という帰無仮説を有意水準5%で棄却できない。逆に、信頼区間が1を含まない場合は、分散に有意な差があると判断できる。

練習問題

問1. 16個の標本から計算した不偏分散が s^2 = 20 であった。母分散 \sigma^2 の95%信頼区間を求めよ。(\chi^2_{0.025}(15) = 27.49\chi^2_{0.975}(15) = 6.26

n = 16s^2 = 20、自由度 n-1 = 15

\begin{aligned} \text{下限} &= \dfrac{15 \times 20}{27.49} = \dfrac{300}{27.49} = 10.91 \\[8pt] \text{上限} &= \dfrac{15 \times 20}{6.26} = \dfrac{300}{6.26} = 47.92 \end{aligned}

95%信頼区間は (10.91, 47.92)

問2. 2つの母集団から標本を抽出し、以下の結果を得た。分散比 \dfrac{\sigma_1^2}{\sigma_2^2} の95%信頼区間を求めよ。
母集団1: n_1 = 10s_1^2 = 36
母集団2: n_2 = 8s_2^2 = 16
F_{0.025}(9, 7) = 4.82F_{0.975}(9, 7) = 0.238

自由度 (\phi_1, \phi_2) = (9, 7)

\begin{aligned} \dfrac{s_1^2}{s_2^2} &= \dfrac{36}{16} = 2.25 \\[10pt] \text{下限} &= 2.25 \times \dfrac{1}{4.82} = 0.47 \\[8pt] \text{上限} &= 2.25 \times \dfrac{1}{0.238} = 9.45 \end{aligned}

95%信頼区間は (0.47, 9.45)。1を含むため、分散に有意な差があるとは言えない。

問3. 母分散 \sigma^2 の95%信頼区間の上限を下限の3倍以内にしたい。必要な最小サンプルサイズを概算せよ。(ヒント: 大きな自由度では \dfrac{\chi^2_{0.025}(n-1)}{\chi^2_{0.975}(n-1)} の値がどう変化するか考える)

信頼区間の上限/下限の比は

\dfrac{\chi^2_{0.025}(n-1)}{\chi^2_{0.975}(n-1)} \le 3

を満たせばよい。いくつかの自由度で計算すると:

  • 自由度9: 19.02 / 2.70 = 7.04
  • 自由度15: 27.49 / 6.26 = 4.39
  • 自由度30: 47.0 / 16.8 ≈ 2.80

概算で n \ge 31 程度が必要。

まとめ

推定対象 使用する分布 自由度
母分散 \sigma^2 カイ二乗分布 n - 1
分散比 \sigma_1^2 / \sigma_2^2 F分布 (n_1 - 1, n_2 - 1)
項目 95%信頼区間
母分散 \left( \dfrac{(n-1)s^2}{\chi^2_{0.025}}, \dfrac{(n-1)s^2}{\chi^2_{0.975}} \right)
分散比 \left( \dfrac{s_1^2/s_2^2}{F_{0.025}}, \dfrac{s_1^2/s_2^2}{F_{0.975}} \right)

Python実装

SciPyを使って母分散と分散比の信頼区間を計算する。

variance_ci.py
import numpy as np
from scipy import stats

# === 母分散の信頼区間 ===
print("=== 母分散の区間推定 ===")

n = 10
s2 = 18  # 不偏分散
alpha = 0.05
df = n - 1

# カイ二乗分布の分位点
chi2_lower = stats.chi2.ppf(alpha/2, df)      # 下側2.5%点
chi2_upper = stats.chi2.ppf(1 - alpha/2, df)  # 上側2.5%点

# 信頼区間
ci_lower = (n - 1) * s2 / chi2_upper
ci_upper = (n - 1) * s2 / chi2_lower

print(f"標本サイズ: n = {n}")
print(f"不偏分散: s² = {s2}")
print(f"自由度: {df}")
print(f"χ²_0.975({df}) = {chi2_lower:.3f}")
print(f"χ²_0.025({df}) = {chi2_upper:.3f}")
print(f"母分散の95%信頼区間: ({ci_lower:.2f}, {ci_upper:.2f})")
print(f"母標準偏差の95%信頼区間: ({np.sqrt(ci_lower):.2f}, {np.sqrt(ci_upper):.2f})")
print()

# === 分散比の信頼区間 ===
print("=== 分散比の区間推定 ===")

n1, n2 = 12, 16
s1_sq, s2_sq = 25, 16
df1, df2 = n1 - 1, n2 - 1

# F分布の分位点
f_lower = stats.f.ppf(alpha/2, df1, df2)
f_upper = stats.f.ppf(1 - alpha/2, df1, df2)

# 信頼区間
ratio = s1_sq / s2_sq
ci_lower_f = ratio / f_upper
ci_upper_f = ratio / f_lower

print(f"標本1: n₁ = {n1}, s₁² = {s1_sq}")
print(f"標本2: n₂ = {n2}, s₂² = {s2_sq}")
print(f"自由度: ({df1}, {df2})")
print(f"F_0.975({df1},{df2}) = {f_lower:.4f}")
print(f"F_0.025({df1},{df2}) = {f_upper:.4f}")
print(f"s₁²/s₂² = {ratio:.4f}")
print(f"分散比の95%信頼区間: ({ci_lower_f:.3f}, {ci_upper_f:.3f})")

# 1を含むか判定
if ci_lower_f <= 1 <= ci_upper_f:
    print("→ 信頼区間は1を含む(分散に有意差なし)")
else:
    print("→ 信頼区間は1を含まない(分散に有意差あり)")
print()

# === 関数化 ===
def variance_ci(s2, n, alpha=0.05):
    """母分散の信頼区間を計算"""
    df = n - 1
    chi2_l = stats.chi2.ppf(alpha/2, df)
    chi2_u = stats.chi2.ppf(1 - alpha/2, df)
    return (df * s2 / chi2_u, df * s2 / chi2_l)

def variance_ratio_ci(s1_sq, n1, s2_sq, n2, alpha=0.05):
    """分散比の信頼区間を計算"""
    df1, df2 = n1 - 1, n2 - 1
    f_l = stats.f.ppf(alpha/2, df1, df2)
    f_u = stats.f.ppf(1 - alpha/2, df1, df2)
    ratio = s1_sq / s2_sq
    return (ratio / f_u, ratio / f_l)

# 使用例
print("=== 関数の使用例 ===")
ci = variance_ci(s2=20, n=16)
print(f"variance_ci(s2=20, n=16): ({ci[0]:.2f}, {ci[1]:.2f})")

ci_ratio = variance_ratio_ci(s1_sq=36, n1=10, s2_sq=16, n2=8)
print(f"variance_ratio_ci(36, 10, 16, 8): ({ci_ratio[0]:.2f}, {ci_ratio[1]:.2f})")
=== 母分散の区間推定 === 標本サイズ: n = 10 不偏分散: s² = 18 自由度: 9 χ²_0.975(9) = 2.700 χ²_0.025(9) = 19.023 母分散の95%信頼区間: (8.52, 59.99) 母標準偏差の95%信頼区間: (2.92, 7.75) === 分散比の区間推定 === 標本1: n₁ = 12, s₁² = 25 標本2: n₂ = 16, s₂² = 16 自由度: (11, 15) F_0.975(11,15) = 0.3003 F_0.025(11,15) = 3.0078 s₁²/s₂² = 1.5625 分散比の95%信頼区間: (0.519, 5.203) → 信頼区間は1を含む(分散に有意差なし) === 関数の使用例 === variance_ci(s2=20, n=16): (10.91, 47.91) variance_ratio_ci(36, 10, 16, 8): (0.47, 9.44)