カイ二乗分布(\chi^2 分布、chi-square distribution)は、統計的推測において最も重要な分布の一つである。標本分散の分布を記述し、母分散の区間推定や検定の基礎となる。
カイ二乗分布は独立な標準正規確率変数の二乗和として定義され、正の値のみをとる連続分布である。適合度検定、独立性検定、分散の検定など、統計学の幅広い分野で用いられる。また、ガンマ分布の特殊ケースであり、t分布や F分布の定義にも関わる基本的な分布である。
定義
Z_1, Z_2, \ldots, Z_n が互いに独立に標準正規分布 N(0, 1) に従うとき、その二乗和
が従う分布を自由度 n のカイ二乗分布といい、\chi^2(n) で表す。
ここで \Gamma(\cdot) はガンマ関数である。この確率密度関数は、形状母数 a = \dfrac{n}{2}、尺度母数 b = 2 のガンマ分布 Ga\left(\dfrac{n}{2}, 2\right) と一致する。
カイ二乗分布はガンマ分布の特殊ケースである。ガンマ分布の性質(モーメント母関数、再生性など)をそのまま利用できる。
グラフ
自由度 n を変えたときのカイ二乗分布の確率密度関数を示す。
自由度が小さいときは原点付近で非常に大きな値をとり、右に強く歪んだ形状になる。自由度が大きくなるにつれて、分布の中心が右に移動し、対称に近い形状になる。これは中心極限定理により、自由度が大きいとき正規分布に近づくことと対応している。
期待値と分散
Y \sim \chi^2(n) の期待値と分散は、ガンマ分布 Ga\left(\dfrac{n}{2}, 2\right) の公式から直ちに得られる。
【導出】 ガンマ分布 Ga(a, b) の期待値は ab、分散は ab^2 である。\chi^2(n) = Ga\left(\dfrac{n}{2}, 2\right) より
この結果は直感的にも理解できる。Z_i^2 の期待値は E[Z_i^2] = V[Z_i] + (E[Z_i])^2 = 1 + 0 = 1 であり、n 個の独立な Z_i^2 の和の期待値は n となる。
モーメント母関数
これはガンマ分布のモーメント母関数 M(t) = (1 - bt)^{-a} において a = \dfrac{n}{2}、b = 2 とした形である。
再生性
カイ二乗分布には再生性が成り立つ。
Y_1 \sim \chi^2(n_1)、Y_2 \sim \chi^2(n_2) が独立のとき
【証明】 モーメント母関数を用いて示す。Y_1 と Y_2 が独立なので
これは自由度 n_1 + n_2 のカイ二乗分布のモーメント母関数に一致する。
標本分散との関係
カイ二乗分布が統計的推測で重要な理由は、正規母集団からの標本分散の分布がカイ二乗分布に従うことにある。
X_1, X_2, \ldots, X_n が正規分布 N(\mu, \sigma^2) からの無作為標本とする。標本平均を \bar{X} = \dfrac{1}{n}\sum_{i=1}^{n} X_i、不偏分散を s^2 = \dfrac{1}{n-1}\sum_{i=1}^{n} (X_i - \bar{X})^2 とすると、次が成り立つ。
さらに、\bar{X} と s^2 は独立である
自由度が n ではなく n - 1 になるのは、\sum_{i=1}^{n} (X_i - \bar{X}) = 0 という制約があるためである。この結果は、母分散 \sigma^2 の区間推定や検定に用いられる。
非心カイ二乗分布
カイ二乗分布の定義において、標準正規分布の代わりに平均が 0 でない正規分布を用いると、非心カイ二乗分布が得られる。
Z_i \sim N(\mu_i, 1)(i = 1, \ldots, n)が互いに独立とし、\lambda = \mu_1^2 + \mu_2^2 + \cdots + \mu_n^2 とおく。このとき
が従う分布を自由度 n、非心度 \lambda の非心カイ二乗分布といい、\chi^2(n, \lambda) で表す。
\lambda = 0 のとき、非心カイ二乗分布は通常のカイ二乗分布 \chi^2(n) に一致する。非心カイ二乗分布は、検定の検出力の計算などに用いられる。
数表
カイ二乗分布のパーセント点(下側確率 \alpha に対する \chi^2_\alpha(n))を示す。
| n | 下側確率 \alpha | 上側確率 \alpha | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 0.005 | 0.01 | 0.025 | 0.05 | 0.10 | 0.10 | 0.05 | 0.025 | 0.01 | 0.005 | |
| 1 | 0.000 | 0.000 | 0.001 | 0.004 | 0.016 | 2.706 | 3.841 | 5.024 | 6.635 | 7.879 |
| 2 | 0.010 | 0.020 | 0.051 | 0.103 | 0.211 | 4.605 | 5.991 | 7.378 | 9.210 | 10.597 |
| 3 | 0.072 | 0.115 | 0.216 | 0.352 | 0.584 | 6.251 | 7.815 | 9.348 | 11.345 | 12.838 |
| 4 | 0.207 | 0.297 | 0.484 | 0.711 | 1.064 | 7.779 | 9.488 | 11.143 | 13.277 | 14.860 |
| 5 | 0.412 | 0.554 | 0.831 | 1.145 | 1.610 | 9.236 | 11.070 | 12.833 | 15.086 | 16.750 |
| 6 | 0.676 | 0.872 | 1.237 | 1.635 | 2.204 | 10.645 | 12.592 | 14.449 | 16.812 | 18.548 |
| 7 | 0.989 | 1.239 | 1.690 | 2.167 | 2.833 | 12.017 | 14.067 | 16.013 | 18.475 | 20.278 |
| 8 | 1.344 | 1.646 | 2.180 | 2.733 | 3.490 | 13.362 | 15.507 | 17.535 | 20.090 | 21.955 |
| 9 | 1.735 | 2.088 | 2.700 | 3.325 | 4.168 | 14.684 | 16.919 | 19.023 | 21.666 | 23.589 |
| 10 | 2.156 | 2.558 | 3.247 | 3.940 | 4.865 | 15.987 | 18.307 | 20.483 | 23.209 | 25.188 |
| 11 | 2.603 | 3.053 | 3.816 | 4.575 | 5.578 | 17.275 | 19.675 | 21.920 | 24.725 | 26.757 |
| 12 | 3.074 | 3.571 | 4.404 | 5.226 | 6.304 | 18.549 | 21.026 | 23.337 | 26.217 | 28.300 |
| 13 | 3.565 | 4.107 | 5.009 | 5.892 | 7.042 | 19.812 | 22.362 | 24.736 | 27.688 | 29.819 |
| 14 | 4.075 | 4.660 | 5.629 | 6.571 | 7.790 | 21.064 | 23.685 | 26.119 | 29.141 | 31.319 |
| 15 | 4.601 | 5.229 | 6.262 | 7.261 | 8.547 | 22.307 | 24.996 | 27.488 | 30.578 | 32.801 |
| 16 | 5.142 | 5.812 | 6.908 | 7.962 | 9.312 | 23.542 | 26.296 | 28.845 | 32.000 | 34.267 |
| 17 | 5.697 | 6.408 | 7.564 | 8.672 | 10.085 | 24.769 | 27.587 | 30.191 | 33.409 | 35.718 |
| 18 | 6.265 | 7.015 | 8.231 | 9.390 | 10.865 | 25.989 | 28.869 | 31.526 | 34.805 | 37.156 |
| 19 | 6.844 | 7.633 | 8.907 | 10.117 | 11.651 | 27.204 | 30.144 | 32.852 | 36.191 | 38.582 |
| 20 | 7.434 | 8.260 | 9.591 | 10.851 | 12.443 | 28.412 | 31.410 | 34.170 | 37.566 | 39.997 |
| 21 | 8.034 | 8.897 | 10.283 | 11.591 | 13.240 | 29.615 | 32.671 | 35.479 | 38.932 | 41.401 |
| 22 | 8.643 | 9.542 | 10.982 | 12.338 | 14.041 | 30.813 | 33.924 | 36.781 | 40.289 | 42.796 |
| 23 | 9.260 | 10.196 | 11.689 | 13.091 | 14.848 | 32.007 | 35.172 | 38.076 | 41.638 | 44.181 |
| 24 | 9.886 | 10.856 | 12.401 | 13.848 | 15.659 | 33.196 | 36.415 | 39.364 | 42.980 | 45.559 |
| 25 | 10.520 | 11.524 | 13.120 | 14.611 | 16.473 | 34.382 | 37.652 | 40.646 | 44.314 | 46.928 |
| 26 | 11.160 | 12.198 | 13.844 | 15.379 | 17.292 | 35.563 | 38.885 | 41.923 | 45.642 | 48.290 |
| 27 | 11.808 | 12.879 | 14.573 | 16.151 | 18.114 | 36.741 | 40.113 | 43.195 | 46.963 | 49.645 |
| 28 | 12.461 | 13.565 | 15.308 | 16.928 | 18.939 | 37.916 | 41.337 | 44.461 | 48.278 | 50.993 |
| 29 | 13.121 | 14.256 | 16.047 | 17.708 | 19.768 | 39.087 | 42.557 | 45.722 | 49.588 | 52.336 |
| 30 | 13.787 | 14.953 | 16.791 | 18.493 | 20.599 | 40.256 | 43.773 | 46.979 | 50.892 | 53.672 |
例えば、自由度 10 で上側 5% 点は \chi^2_{0.05}(10) = 18.307 である。
計算例
自由度 5 のカイ二乗分布について計算する。
【期待値と分散】
【上側パーセント点】 \chi^2(5) の上側 5% 点(P(Y > \chi^2_{0.05}(5)) = 0.05 となる値)は数表または統計ソフトから
【確率の計算】 P(Y \leq 9) を求める。Y \sim \chi^2(5) のとき
これは数表や統計ソフトで確認できる。
練習問題
再生性より
したがって
n = 16 なので
自由度 15 のカイ二乗分布に従う。
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | カイ二乗分布(chi-square distribution) |
| 記号 | \chi^2(n) |
| パラメータ | n(自由度、正の整数) |
| 定義域 | y > 0 |
| 確率密度関数 | f(y) = \dfrac{1}{\Gamma\left(\frac{n}{2}\right) 2^{\frac{n}{2}}} y^{\frac{n}{2}-1} e^{-\frac{y}{2}} |
| 期待値 | E[Y] = n |
| 分散 | V[Y] = 2n |
| モーメント母関数 | M(t) = (1 - 2t)^{-\frac{n}{2}}(t < \frac{1}{2}) |
| ガンマ分布との関係 | \chi^2(n) = Ga\left(\dfrac{n}{2}, 2\right) |
| 再生性 | \chi^2(n_1) + \chi^2(n_2) = \chi^2(n_1 + n_2)(独立のとき) |
| 標本分散との関係 | \dfrac{(n-1)s^2}{\sigma^2} \sim \chi^2(n-1) |
Pythonで実装する
Pythonを使ってカイ二乗分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
print("=== カイ二乗分布 ===")
# 自由度 n = 5
n = 5
chi2_dist = stats.chi2(n)
print(f"\n【χ²({n})の基本統計量】")
print(f"期待値: {chi2_dist.mean():.1f} (理論値: {n})")
print(f"分散: {chi2_dist.var():.1f} (理論値: {2*n})")
print(f"標準偏差: {chi2_dist.std():.3f}")
# 確率密度関数の値
print(f"\n確率密度関数 f(y):")
for y in [1, 3, 5, 10]:
print(f" f({y}) = {chi2_dist.pdf(y):.4f}")
# 累積分布関数
print(f"\n累積分布関数 F(y) = P(Y ≤ y):")
for y in [5, 9, 11.07]:
print(f" P(Y ≤ {y}) = {chi2_dist.cdf(y):.4f}")
# 上側パーセント点
print(f"\n上側パーセント点:")
for alpha in [0.10, 0.05, 0.01]:
q = chi2_dist.ppf(1 - alpha)
print(f" χ²_{{{alpha}}}({n}) = {q:.3f}")
# 再生性の検証
print("\n【再生性の検証】")
n1, n2 = 3, 7
np.random.seed(42)
samples1 = stats.chi2.rvs(n1, size=100000)
samples2 = stats.chi2.rvs(n2, size=100000)
samples_sum = samples1 + samples2
print(f"χ²({n1}) + χ²({n2}) の標本平均: {np.mean(samples_sum):.2f} (理論値: {n1+n2})")
print(f"χ²({n1}) + χ²({n2}) の標本分散: {np.var(samples_sum):.2f} (理論値: {2*(n1+n2)})")
# 標本分散との関係
print("\n【標本分散との関係】")
mu, sigma = 50, 10
sample_size = 16
n_sim = 10000
chi2_stats = []
for _ in range(n_sim):
sample = np.random.normal(mu, sigma, sample_size)
s2 = np.var(sample, ddof=1) # 不偏分散
chi2_stat = (sample_size - 1) * s2 / sigma**2
chi2_stats.append(chi2_stat)
chi2_stats = np.array(chi2_stats)
print(f"(n-1)s²/σ² の標本平均: {np.mean(chi2_stats):.2f} (理論値: {sample_size-1})")
print(f"(n-1)s²/σ² の標本分散: {np.var(chi2_stats):.2f} (理論値: {2*(sample_size-1)})")
# 非心カイ二乗分布
print("\n【非心カイ二乗分布】")
n_nc, lambda_nc = 5, 3
nc_chi2 = stats.ncx2(n_nc, lambda_nc)
print(f"非心χ²(n={n_nc}, λ={lambda_nc}):")
print(f" 期待値: {nc_chi2.mean():.2f} (理論値: {n_nc + lambda_nc})")
print(f" 分散: {nc_chi2.var():.2f} (理論値: {2*n_nc + 4*lambda_nc})")
scipy.stats.chi2 でカイ二乗分布を扱える。シミュレーションにより、再生性や標本分散との関係が理論通りであることが確認できる。非心カイ二乗分布は scipy.stats.ncx2 を使用する。