ある工場で生産された部品の寸法を10個測定したとき、測定値のばらつきは「たまたま大きかった」のでしょうか、それとも製造工程に問題があるのでしょうか。この問いに答えるには、分散がどのような確率分布に従うかを知る必要があります。
正規分布に従うデータの分散を議論するとき、必ず登場するのがχ²分布(カイ二乗分布、chi-squared distribution)です。χ²分布は、独立な標準正規分布に従う確率変数の二乗和が従う分布であり、統計学における最も基本的な分布の一つです。
χ²分布を理解すると、以下のような幅広い応用が開けます。
- 統計的検定: 母分散の検定(χ²検定)、適合度検定、独立性検定の理論的基盤
- 信頼区間の構成: 正規母集団の分散に対する信頼区間の構成に直接使われる
- F分布・t分布の構成要素: F分布はχ²分布の比として、t分布はχ²分布と正規分布の組み合わせとして定義される
- 機械学習: 特徴選択、モデル評価、異常検知における統計量の分布
本記事では、χ²分布がなぜ「正規分布の二乗和」として自然に現れるのかを直感的に理解し、確率密度関数を厳密に導出します。さらに、モーメントや再生性などの重要な性質を証明し、Pythonによる可視化と数値シミュレーションを通じて理論を実感します。
本記事の内容
- χ²分布の直感的理解と数学的定義
- 確率密度関数の2通りの導出(変数変換法・モーメント母関数法)
- モーメント、再生性、正規近似などの重要な性質
- Pythonによる確率密度関数の可視化とモンテカルロシミュレーション
- χ²検定への応用例
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
- 正規分布 — χ²分布の出発点となる標準正規分布
- ガンマ関数 — χ²分布の確率密度関数に現れるΓ関数
- ガンマ分布 — χ²分布はガンマ分布の特殊ケース
- モーメント母関数 — 分布の一意性と再生性の証明に使用
χ²分布とは — 直感的な理解
二乗和としてのイメージ
χ²分布を理解するための最も良い出発点は、「標準正規分布に従う値を何個か取ってきて、それぞれを二乗して足す」という操作です。
たとえば、あなたが的に向かってダーツを投げるとしましょう。的の中心を原点として、横方向の誤差を $X$、縦方向の誤差を $Y$ とします。もし $X$ と $Y$ がそれぞれ独立に標準正規分布 $N(0, 1)$ に従うならば、的の中心からの距離の二乗 $R^2 = X^2 + Y^2$ は、自由度2のχ²分布に従います。
3次元に拡張して、前後方向の誤差 $Z$ も加えれば、$X^2 + Y^2 + Z^2$ は自由度3のχ²分布に従います。このように、独立な「揺らぎの二乗」を足し合わせた量がχ²分布に従うのです。
なぜ二乗和が重要なのか
二乗和が頻繁に登場する理由は、分散の定義そのものにあります。正規母集団 $N(\mu, \sigma^2)$ からサンプル $X_1, X_2, \dots, X_n$ を取ったとき、標本分散は次のように定義されます。
$$ s^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i – \bar{X})^2 $$
この標本分散を標準化すると、
$$ \frac{(n-1)s^2}{\sigma^2} = \sum_{i=1}^n \left(\frac{X_i – \bar{X}}{\sigma}\right)^2 $$
となり、これは自由度 $n-1$ のχ²分布に従います(自由度が $n$ ではなく $n-1$ になる理由は、$\bar{X}$ を使うことで1つの拘束条件が加わるためです)。つまり、正規分布からのデータの分散は、χ²分布に従うのです。
この事実があるからこそ、母分散に対する検定や信頼区間の構成が可能になります。χ²分布は「分散の揺らぎ」を定量化する道具なのです。
自由度のイメージ
χ²分布のパラメータは自由度(degrees of freedom)$k$ の1つだけです。自由度は「何個の独立な正規変数の二乗を足しているか」を表します。
直感的には、自由度が大きくなるほど、多くの「揺らぎ」を足し合わせることになるため、分布の中心(平均)が大きくなり、形も左右対称に近づいていきます。自由度1や2では分布は強い右裾を持ち、原点付近にピークがありますが、自由度が10を超えると釣り鐘型に近づいていきます。
この「自由度が大きくなると正規分布に近づく」性質は、中心極限定理の帰結であり、のちほど定量的に確認します。
では、この直感を数学的に定式化しましょう。
χ²分布の数学的定義
$Z_1, Z_2, \dots, Z_k$ が互いに独立に標準正規分布 $N(0, 1)$ に従う確率変数であるとき、その二乗和
$$ \begin{equation} Q = Z_1^2 + Z_2^2 + \cdots + Z_k^2 = \sum_{i=1}^{k} Z_i^2 \end{equation} $$
が従う分布を自由度 $k$ のχ²分布といい、$Q \sim \chi^2(k)$ と書きます。
この分布の確率密度関数(PDF)は次の式で与えられます。
$$ \begin{equation} f(x; k) = \frac{1}{2^{k/2}\,\Gamma(k/2)}\,x^{k/2 – 1}\,e^{-x/2}, \quad x > 0 \end{equation} $$
ここで $\Gamma(\cdot)$ はガンマ関数です。$x \leq 0$ では $f(x; k) = 0$ です。
この確率密度関数を眺めると、$x^{k/2-1}$ の因子が $x = 0$ 付近の振る舞いを制御し、$e^{-x/2}$ が右裾の減衰速度を制御していることがわかります。$k = 1$ のとき $x^{-1/2}$ が現れるため $x \to 0$ で発散し、$k = 2$ のとき $x^0 = 1$ で一定、$k \geq 3$ のとき $x^{k/2-1} \to 0$ でゼロからスタートします。
実は、この確率密度関数はガンマ分布 $\text{Gamma}(\alpha, \beta)$ で $\alpha = k/2$, $\beta = 2$ としたものに他なりません。
$$ \chi^2(k) = \text{Gamma}\left(\frac{k}{2}, 2\right) $$
この関係は、χ²分布の性質をガンマ分布の一般理論から導くことを可能にします。
次に、この確率密度関数が実際に「標準正規分布の二乗和」から導かれることを確認しましょう。
確率密度関数の導出
方法1: 自由度1の場合(変数変換法)
まず、最も基本的なケースとして $k = 1$、すなわち $Q = Z^2$($Z \sim N(0,1)$)の場合を導出します。
$Z$ の確率密度関数は次の通りです。
$$ f_Z(z) = \frac{1}{\sqrt{2\pi}}\,e^{-z^2/2}, \quad -\infty < z < \infty $$
変数変換 $x = z^2$ を考えます。$x > 0$ に対して $z = \pm\sqrt{x}$ の2つの対応する値があります。
逆関数の微分は次のようになります。
$$ \frac{dz}{dx} = \pm\frac{1}{2\sqrt{x}} $$
変数変換の公式を適用すると、$Q = Z^2$ の確率密度関数は、正と負の分岐をそれぞれ足し合わせて
$$ f_Q(x) = f_Z(\sqrt{x})\left|\frac{1}{2\sqrt{x}}\right| + f_Z(-\sqrt{x})\left|\frac{1}{2\sqrt{x}}\right| $$
と書けます。$f_Z$ は偶関数($f_Z(z) = f_Z(-z)$)なので、両項は等しくなります。
$$ f_Q(x) = 2 \cdot \frac{1}{\sqrt{2\pi}}\,e^{-x/2} \cdot \frac{1}{2\sqrt{x}} $$
整理すると、次の結果が得られます。
$$ \begin{equation} f_Q(x) = \frac{1}{\sqrt{2\pi}}\,x^{-1/2}\,e^{-x/2}, \quad x > 0 \end{equation} $$
これを一般式 $f(x; k) = \frac{1}{2^{k/2}\Gamma(k/2)}\,x^{k/2-1}\,e^{-x/2}$ で $k = 1$ とおいて確認しましょう。
$$ f(x; 1) = \frac{1}{2^{1/2}\,\Gamma(1/2)}\,x^{-1/2}\,e^{-x/2} $$
ここで $\Gamma(1/2) = \sqrt{\pi}$ を代入すると、
$$ f(x; 1) = \frac{1}{\sqrt{2}\cdot\sqrt{\pi}}\,x^{-1/2}\,e^{-x/2} = \frac{1}{\sqrt{2\pi}}\,x^{-1/2}\,e^{-x/2} $$
となり、変数変換で得られた結果と一致します。
方法2: 一般の自由度(モーメント母関数法)
一般の自由度 $k$ に対しては、モーメント母関数(MGF)を用いた導出が最もエレガントです。
まず、$Z \sim N(0, 1)$ のとき、$Q_1 = Z^2$ のモーメント母関数を求めます。
$$ M_{Q_1}(t) = E[e^{tZ^2}] = \int_{-\infty}^{\infty} e^{tz^2} \cdot \frac{1}{\sqrt{2\pi}}\,e^{-z^2/2}\,dz $$
指数部分をまとめると、$tz^2 – z^2/2 = -\frac{z^2}{2}(1 – 2t)$ となるので、
$$ M_{Q_1}(t) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} \exp\left(-\frac{z^2(1-2t)}{2}\right) dz $$
この積分はガウス積分 $\int_{-\infty}^{\infty} e^{-az^2}\,dz = \sqrt{\pi/a}$($a > 0$)を用いて評価できます。$a = (1-2t)/2$ とおくと($t < 1/2$ が必要)、
$$ M_{Q_1}(t) = \frac{1}{\sqrt{2\pi}} \cdot \sqrt{\frac{2\pi}{1 – 2t}} = (1 – 2t)^{-1/2} $$
これが $\chi^2(1)$ のモーメント母関数です。
次に、$Q = Z_1^2 + Z_2^2 + \cdots + Z_k^2$ のモーメント母関数を求めます。$Z_i$ たちは独立なので、二乗和のモーメント母関数は個々のモーメント母関数の積になります。
$$ M_Q(t) = E\left[e^{t(Z_1^2 + \cdots + Z_k^2)}\right] = \prod_{i=1}^{k} E\left[e^{tZ_i^2}\right] = \left[(1-2t)^{-1/2}\right]^k $$
したがって、
$$ \begin{equation} M_Q(t) = (1 – 2t)^{-k/2}, \quad t < \frac{1}{2} \end{equation} $$
一方、ガンマ分布 $\text{Gamma}(\alpha, \beta)$ のモーメント母関数は $(1 – \beta t)^{-\alpha}$ です。これと比較すると、$\alpha = k/2$, $\beta = 2$ のガンマ分布のモーメント母関数と完全に一致します。
モーメント母関数が存在する場合、分布はモーメント母関数によって一意に定まるため、$Q \sim \text{Gamma}(k/2, 2)$ であり、その確率密度関数は
$$ f(x; k) = \frac{1}{2^{k/2}\,\Gamma(k/2)}\,x^{k/2 – 1}\,e^{-x/2}, \quad x > 0 $$
と結論されます。これがχ²分布の確率密度関数の完全な導出です。
この導出のポイントは、個々の $Z_i^2$ のモーメント母関数を求め、独立性から積を取り、ガンマ分布のモーメント母関数と照合するという3ステップです。モーメント母関数法の威力は、複雑な畳み込み積分を計算することなく、積の形で処理できる点にあります。
確率密度関数が得られたので、次にχ²分布の基本的な特性量を求めましょう。
期待値・分散・モーメント
期待値
$Q \sim \chi^2(k)$ の期待値は、$Q = \sum_{i=1}^k Z_i^2$ の線形性から直ちに計算できます。
$$ E[Q] = \sum_{i=1}^k E[Z_i^2] $$
ここで $Z_i \sim N(0,1)$ なので $E[Z_i^2] = \text{Var}(Z_i) + (E[Z_i])^2 = 1 + 0 = 1$ です。したがって、
$$ \begin{equation} E[Q] = k \end{equation} $$
つまり、χ²分布の期待値は自由度 $k$ そのものです。これは直感に合います。$k$ 個の「分散1の揺らぎの二乗」を足しているので、その平均は $k$ になるべきです。
分散
分散を求めるために、まず $E[Q^2]$ を計算します。
$$ E[Q^2] = E\left[\left(\sum_{i=1}^k Z_i^2\right)^2\right] = \sum_{i=1}^k E[Z_i^4] + \sum_{i \neq j} E[Z_i^2]E[Z_j^2] $$
独立性により混合項は $E[Z_i^2]E[Z_j^2] = 1 \cdot 1 = 1$ となります。$E[Z_i^4]$ は標準正規分布の4次モーメントであり、$E[Z^4] = 3$ です(ガウス積分から計算できます)。
$$ E[Q^2] = k \cdot 3 + k(k-1) \cdot 1 = 3k + k^2 – k = k^2 + 2k $$
したがって分散は、
$$ \begin{equation} \text{Var}(Q) = E[Q^2] – (E[Q])^2 = (k^2 + 2k) – k^2 = 2k \end{equation} $$
分散も自由度に比例し、その値は $2k$ です。標準偏差は $\sqrt{2k}$ となります。
最頻値
確率密度関数の最大値を与える $x$(最頻値、mode)を求めます。$f(x; k) \propto x^{k/2-1} e^{-x/2}$ の対数微分をゼロとおきます。
$$ \frac{d}{dx}\left[\left(\frac{k}{2}-1\right)\ln x – \frac{x}{2}\right] = \frac{k/2 – 1}{x} – \frac{1}{2} = 0 $$
これを解くと、
$$ \begin{equation} x_{\text{mode}} = k – 2 \quad (k \geq 2) \end{equation} $$
$k = 1$ のときは $k/2 – 1 = -1/2 < 0$ なので $f$ は $x = 0$ で発散し、最頻値は存在しません(正確には $x \to 0^+$ で $f \to \infty$)。$k = 2$ のときは $x_{\text{mode}} = 0$ で、指数分布の形をしています。
歪度と尖度
歪度(skewness)$\gamma_1$ と尖度(excess kurtosis)$\gamma_2$ は次のように求まります。
$$ \begin{equation} \gamma_1 = \sqrt{\frac{8}{k}}, \quad \gamma_2 = \frac{12}{k} \end{equation} $$
$k \to \infty$ のとき $\gamma_1 \to 0$, $\gamma_2 \to 0$ となり、正規分布に近づくことが確認できます。
これらの特性量を手に入れました。次に、χ²分布の重要な理論的性質を見ていきましょう。
再生性
χ²分布の最も重要な性質の一つが再生性(reproductive property)です。
定理: $Q_1 \sim \chi^2(k_1)$ と $Q_2 \sim \chi^2(k_2)$ が独立ならば、
$$ \begin{equation} Q_1 + Q_2 \sim \chi^2(k_1 + k_2) \end{equation} $$
証明: モーメント母関数を使えば簡潔に示せます。$Q_1$ と $Q_2$ が独立なので、
$$ M_{Q_1 + Q_2}(t) = M_{Q_1}(t) \cdot M_{Q_2}(t) = (1-2t)^{-k_1/2} \cdot (1-2t)^{-k_2/2} = (1-2t)^{-(k_1+k_2)/2} $$
これは $\chi^2(k_1 + k_2)$ のモーメント母関数に他なりません。モーメント母関数の一意性から、$Q_1 + Q_2 \sim \chi^2(k_1 + k_2)$ が従います。$\square$
再生性は定義からも直感的に理解できます。$Q_1$ が $k_1$ 個の独立な標準正規変数の二乗和、$Q_2$ が $k_2$ 個の独立な標準正規変数の二乗和であれば、$Q_1 + Q_2$ は合計 $k_1 + k_2$ 個の独立な標準正規変数の二乗和です。
この性質は、分散分析(ANOVA)で全変動を群間変動と群内変動に分解するとき、各成分のχ²分布の自由度が加法的であることの理論的根拠になります。
χ²分布の再生性を確認しました。次に、もう一つの重要な性質である正規近似について見ていきましょう。
正規近似
中心極限定理による正規近似
$Q \sim \chi^2(k)$ は $k$ 個の独立同分布な確率変数 $Z_i^2$ の和です。各 $Z_i^2$ は同じ分布に従い、$E[Z_i^2] = 1$, $\text{Var}(Z_i^2) = 2$ です。したがって、中心極限定理により、$k$ が大きいとき $Q$ は正規分布に近づきます。
$$ \frac{Q – k}{\sqrt{2k}} \xrightarrow{d} N(0, 1) \quad (k \to \infty) $$
すなわち、$k$ が十分大きいとき、
$$ \begin{equation} \chi^2(k) \approx N(k, 2k) \end{equation} $$
実用上は $k \geq 30$ 程度で正規近似がかなり良くなります。
フィッシャーの近似
より精度の高い近似として、フィッシャー(R. A. Fisher)が提案した変換があります。
$$ \begin{equation} \sqrt{2Q} \approx N\left(\sqrt{2k – 1},\, 1\right) \end{equation} $$
あるいは同値な表現として、
$$ \sqrt{2Q} – \sqrt{2k – 1} \approx N(0, 1) $$
この近似は平方根変換によって歪度を減少させるため、直接的な正規近似よりも精度が高く、$k \geq 10$ 程度でも実用的に使えます。
これらの性質が実際にどの程度成り立つのか、Pythonで確認してみましょう。
Pythonによる確率密度関数の可視化
まず、さまざまな自由度に対するχ²分布の確率密度関数を描画し、分布の形状がどのように変化するかを視覚的に確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 自由度のリスト
k_values = [1, 2, 3, 5, 10, 20, 50]
x = np.linspace(0.01, 40, 1000)
fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))
# 確率密度関数
ax = axes[0]
for k in k_values:
pdf = stats.chi2.pdf(x, df=k)
ax.plot(x, pdf, linewidth=2, label=rf"$k = {k}$")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("f(x; k)", fontsize=12)
ax.set_title(r"PDF of $\chi^2(k)$ distribution", fontsize=13)
ax.legend(fontsize=10)
ax.set_ylim(0, 0.5)
ax.grid(True, alpha=0.3)
# 累積分布関数
ax = axes[1]
for k in k_values:
cdf = stats.chi2.cdf(x, df=k)
ax.plot(x, cdf, linewidth=2, label=rf"$k = {k}$")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("F(x; k)", fontsize=12)
ax.set_title(r"CDF of $\chi^2(k)$ distribution", fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("chi2_pdf_cdf.png", dpi=150, bbox_inches="tight")
plt.show()
このグラフから、χ²分布の形状について以下の重要な特徴が読み取れます。
-
$k = 1$ では $x = 0$ 付近で発散する L字型の分布 です。これは $x^{-1/2}$ の因子の効果であり、標準正規分布の値が0付近に集中していることを反映しています。二乗すると0に近い値が多くなるのは直感に合います
-
$k = 2$ は原点から単調に減少する指数分布 です。実際、$\chi^2(2) = \text{Gamma}(1, 2) = \text{Exp}(1/2)$ であり、指数分布そのものです
-
$k \geq 3$ では山(最頻値)が現れ、$k$ が増えるにつれて山が右に移動し、分布が左右対称に近づいていく 。$k = 50$ では釣り鐘型にかなり近い形をしており、正規近似が有効であることが視覚的に確認できます
-
右裾が重い(right-skewed)分布 です。特に自由度が小さいとき顕著であり、歪度 $\sqrt{8/k}$ の式と整合しています
次に、モンテカルロシミュレーションによって理論的な確率密度関数と経験的な分布を比較してみましょう。
モンテカルロシミュレーションによる検証
理論通りに「標準正規分布の二乗和」を実際に生成し、その経験分布がχ²分布の確率密度関数と一致するかを検証します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
k_values = [1, 3, 10, 30]
n_samples = 100000
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
for idx, k in enumerate(k_values):
ax = axes[idx // 2, idx % 2]
# 標準正規分布からサンプリングし、二乗和を計算
Z = np.random.randn(n_samples, k)
Q = np.sum(Z**2, axis=1)
# ヒストグラム(経験分布)
ax.hist(Q, bins=100, density=True, alpha=0.6, color="steelblue",
edgecolor="white", label="Monte Carlo")
# 理論的な確率密度関数
x = np.linspace(0.01, np.percentile(Q, 99.5), 500)
pdf = stats.chi2.pdf(x, df=k)
ax.plot(x, pdf, "r-", linewidth=2.5, label=rf"$\chi^2({k})$ PDF")
# 理論値と実測値の比較
ax.set_title(rf"$k = {k}$: mean = {Q.mean():.2f} (theory: {k}), "
rf"var = {Q.var():.2f} (theory: {2*k})", fontsize=11)
ax.set_xlabel("x", fontsize=11)
ax.set_ylabel("Density", fontsize=11)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("chi2_monte_carlo.png", dpi=150, bbox_inches="tight")
plt.show()
このシミュレーション結果から、以下のことが確認できます。
-
すべての自由度で、モンテカルロシミュレーションのヒストグラムが理論的なχ²分布の確率密度関数と非常によく一致している 。100,000サンプルという十分な数の試行により、理論曲線がヒストグラムの輪郭をほぼ完全にトレースしています
-
経験的な平均と分散が理論値($E = k$, $\text{Var} = 2k$)とよく一致している 。タイトルに表示された数値を確認すると、大数の法則により理論値に近い値が得られています
-
自由度の増加に伴い、分布が正規分布に近づいている のが視覚的にわかります。$k = 1$ の強い非対称な分布から、$k = 30$ のほぼ対称な釣り鐘型への変化は、中心極限定理の効果を如実に示しています
次に、χ²分布の正規近似の精度を定量的に評価しましょう。
正規近似の精度検証
先ほど述べた2つの正規近似(直接近似とフィッシャー近似)の精度をPythonで比較します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))
# (a) さまざまな自由度での近似精度
k_values = [5, 10, 30, 100]
ax = axes[0]
for k in k_values:
x = np.linspace(max(0.1, k - 4*np.sqrt(2*k)),
k + 4*np.sqrt(2*k), 500)
# 厳密なχ²分布
pdf_exact = stats.chi2.pdf(x, df=k)
# 正規近似 N(k, 2k)
pdf_normal = stats.norm.pdf(x, loc=k, scale=np.sqrt(2*k))
# 相対誤差
rel_error = np.abs(pdf_exact - pdf_normal) / (pdf_exact + 1e-15)
ax.plot(x, rel_error * 100, linewidth=1.5, label=rf"$k = {k}$")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("Relative error [%]", fontsize=12)
ax.set_title("Normal approximation error", fontsize=13)
ax.legend(fontsize=10)
ax.set_ylim(0, 50)
ax.grid(True, alpha=0.3)
# (b) 上側確率の近似精度(仮説検定で重要)
ax = axes[1]
k_range = np.arange(3, 101)
alpha_level = 0.05
exact_quantile = stats.chi2.ppf(1 - alpha_level, df=k_range)
# 直接正規近似のパーセント点
normal_quantile = k_range + stats.norm.ppf(1 - alpha_level) * np.sqrt(2 * k_range)
# フィッシャー近似のパーセント点
z_alpha = stats.norm.ppf(1 - alpha_level)
fisher_quantile = 0.5 * (z_alpha + np.sqrt(2 * k_range - 1))**2
ax.plot(k_range, np.abs(exact_quantile - normal_quantile) / exact_quantile * 100,
"b-", linewidth=1.5, label="Direct normal approx.")
ax.plot(k_range, np.abs(exact_quantile - fisher_quantile) / exact_quantile * 100,
"r--", linewidth=1.5, label="Fisher approx.")
ax.set_xlabel("Degrees of freedom k", fontsize=12)
ax.set_ylabel("Relative error in 95th percentile [%]", fontsize=12)
ax.set_title(r"Quantile approximation error ($\alpha = 0.05$)", fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("chi2_normal_approx.png", dpi=150, bbox_inches="tight")
plt.show()
この比較から、以下の結論が得られます。
-
左図: 確率密度関数の正規近似精度 。$k = 5$ では最大50%近い相対誤差がありますが、$k = 30$ では10%以下、$k = 100$ ではほとんど誤差が見えなくなります。特に分布の裾(ピークから離れた部分)で誤差が大きくなる傾向があります
-
右図: 95パーセンタイルの近似精度 。仮説検定で重要な上側パーセント点の精度を比較しています。フィッシャー近似(赤の破線)は直接正規近似(青の実線)よりも一貫して精度が高く、$k = 10$ で既に1%程度の誤差に収まっています。実務的にはフィッシャー近似が推奨されます
-
自由度が30を超えれば、いずれの近似も実用上十分な精度 です。統計の教科書でよく見る「$k \geq 30$ なら正規近似可能」という経験則が、ここでも確認されます
正規近似の妥当性を確認したところで、χ²分布の実用的な応用として最も代表的なχ²検定を見てみましょう。
χ²分布と統計的検定
母分散の検定
正規母集団 $N(\mu, \sigma^2)$ からの標本に基づいて、母分散 $\sigma^2$ が特定の値 $\sigma_0^2$ に等しいかどうかを検定する場合、検定統計量は次のように構成されます。
$$ \begin{equation} \chi^2 = \frac{(n-1)s^2}{\sigma_0^2} \end{equation} $$
帰無仮説 $H_0: \sigma^2 = \sigma_0^2$ のもとで、$\chi^2 \sim \chi^2(n-1)$ に従います。
この検定統計量の構成は、冒頭で述べた「標本分散をχ²分布で評価する」というアイデアの直接的な実装です。
適合度検定
χ²分布が活躍するもう一つの場面が適合度検定(goodness-of-fit test)です。観測データが理論的に予想される分布に従っているかどうかを検定します。
$m$ 個のカテゴリーに対して、観測度数を $O_i$、期待度数を $E_i$ とすると、検定統計量は次の式で定義されます。
$$ \begin{equation} \chi^2 = \sum_{i=1}^{m} \frac{(O_i – E_i)^2}{E_i} \end{equation} $$
帰無仮説のもとで、$n$ が十分大きいとき $\chi^2 \approx \chi^2(m – 1)$ に従います(パラメータを推定した場合はさらに自由度が減ります)。
この検定統計量がχ²分布に従う理由を直感的に理解してみましょう。各カテゴリーの度数は多項分布に従いますが、$n$ が大きいとき正規近似により $(O_i – E_i)/\sqrt{E_i}$ は近似的に標準正規分布に従います。その二乗の和がχ²分布に従うのは、まさにχ²分布の定義そのものです。
Pythonで適合度検定を実装
サイコロの公正さを検定する簡単な例を実装してみましょう。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
# 「ズルいサイコロ」のシミュレーション
# 6の目が出やすい確率分布
unfair_prob = np.array([0.14, 0.14, 0.14, 0.14, 0.14, 0.30])
n_rolls = 300
# サイコロを振る
outcomes = np.random.choice(np.arange(1, 7), size=n_rolls, p=unfair_prob)
observed = np.array([np.sum(outcomes == i) for i in range(1, 7)])
# 帰無仮説: 公正なサイコロ(各目の確率 = 1/6)
expected = np.ones(6) * n_rolls / 6
# χ²統計量の計算
chi2_stat = np.sum((observed - expected)**2 / expected)
df = 6 - 1 # 自由度
# p値の計算
p_value = 1 - stats.chi2.cdf(chi2_stat, df=df)
# --- 可視化 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))
# 観測度数と期待度数の比較
ax = axes[0]
x_pos = np.arange(1, 7)
width = 0.35
ax.bar(x_pos - width/2, observed, width, label="Observed", color="steelblue",
edgecolor="white")
ax.bar(x_pos + width/2, expected, width, label="Expected (fair)",
color="salmon", edgecolor="white")
ax.set_xlabel("Die face", fontsize=12)
ax.set_ylabel("Frequency", fontsize=12)
ax.set_title(f"Dice rolls (n = {n_rolls})", fontsize=13)
ax.set_xticks(x_pos)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3, axis="y")
# χ²分布と検定統計量
ax = axes[1]
x = np.linspace(0, 25, 500)
pdf = stats.chi2.pdf(x, df=df)
ax.plot(x, pdf, "b-", linewidth=2, label=rf"$\chi^2({df})$")
ax.fill_between(x, pdf, where=(x >= chi2_stat), alpha=0.3, color="red",
label=f"p-value = {p_value:.4f}")
ax.axvline(chi2_stat, color="red", linewidth=2, linestyle="--",
label=rf"$\chi^2$ = {chi2_stat:.2f}")
ax.axvline(stats.chi2.ppf(0.95, df=df), color="green", linewidth=1.5,
linestyle=":", label=f"Critical value (5%) = {stats.chi2.ppf(0.95, df=df):.2f}")
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("Density", fontsize=12)
ax.set_title(r"$\chi^2$ goodness-of-fit test", fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("chi2_test.png", dpi=150, bbox_inches="tight")
plt.show()
print(f"観測度数: {observed}")
print(f"期待度数: {expected}")
print(f"χ²統計量: {chi2_stat:.4f}")
print(f"自由度: {df}")
print(f"p値: {p_value:.6f}")
print(f"有意水準5%での判定: {'棄却(サイコロは公正でない)' if p_value < 0.05 else '棄却できない'}")
この検定の結果から、以下のことが読み取れます。
-
左図の棒グラフ: 6の目の観測度数が期待度数を大きく上回っています。視覚的にも公正なサイコロとは言い難い偏りが見えます
-
右図のχ²分布: 計算されたχ²統計量(赤の破線)が臨界値(緑の点線)を上回り、p値が有意水準0.05を下回っています。これにより帰無仮説「サイコロは公正である」が棄却され、統計的に有意な偏りがあると結論できます
-
p値の直感的理解: p値は「公正なサイコロであると仮定したとき、これほど大きなχ²統計量が偶然得られる確率」を表しています。この確率が非常に小さいということは、偶然では説明しにくい偏りがあることを意味します
χ²分布と他の分布との関係
χ²分布は、統計学の主要な分布と深いつながりを持っています。これらの関係を整理しておきましょう。
ガンマ分布との関係
先ほど導出したように、
$$ \chi^2(k) = \text{Gamma}\left(\frac{k}{2},\, 2\right) $$
この関係により、ガンマ分布の性質(再生性、モーメントなど)がすべてχ²分布に継承されます。
t分布との関係
$Z \sim N(0,1)$ と $Q \sim \chi^2(k)$ が独立であるとき、
$$ \begin{equation} T = \frac{Z}{\sqrt{Q/k}} \sim t(k) \end{equation} $$
は自由度 $k$ のt分布に従います。t分布は「正規分布を分散の不確実性で割ったもの」という構造を持っており、母分散が未知のときの平均値の推定や検定に使われます。
F分布との関係
$Q_1 \sim \chi^2(k_1)$ と $Q_2 \sim \chi^2(k_2)$ が独立であるとき、
$$ \begin{equation} F = \frac{Q_1/k_1}{Q_2/k_2} \sim F(k_1, k_2) \end{equation} $$
は自由度 $(k_1, k_2)$ のF分布に従います。F分布は分散の比の検定に使われ、分散分析(ANOVA)の理論的基盤です。
指数分布との関係
$k = 2$ のとき、
$$ \chi^2(2) = \text{Exp}\left(\frac{1}{2}\right) $$
すなわち、パラメータ $\lambda = 1/2$ の指数分布と一致します。これは2次元の等方的なガウスノイズの距離の二乗が指数分布に従うことに対応しています。
これらの関係は「χ²分布が統計学の分布体系のハブとなっている」ことを示しています。χ²分布を十分に理解しておくことで、t分布やF分布の理解がスムーズになります。
まとめ
本記事では、χ²分布の定義から導出、性質、応用までを解説しました。
- χ²分布は標準正規分布の二乗和の分布 であり、$Q = \sum_{i=1}^k Z_i^2 \sim \chi^2(k)$ と定義されます。パラメータは自由度 $k$ の1つだけです
- 確率密度関数 $f(x; k) = \frac{1}{2^{k/2}\Gamma(k/2)}x^{k/2-1}e^{-x/2}$ は、変数変換法($k=1$の場合)とモーメント母関数法(一般の場合)の2通りで導出しました
- 基本統計量は $E[Q] = k$, $\text{Var}(Q) = 2k$, 最頻値 $= k-2$($k \geq 2$)です
- 再生性により、独立なχ²確率変数の和もχ²分布に従い、自由度は加法的です
- 正規近似は $k \geq 30$ で実用上十分な精度を持ち、フィッシャー近似はさらに小さい自由度でも有効です
- χ²検定(母分散の検定、適合度検定)は、χ²分布の最も代表的な応用です
- χ²分布はガンマ分布の特殊ケースであり、t分布やF分布の構成要素として統計学の分布体系の中核に位置しています
次のステップとして、以下の記事も参考にしてください。