F 分布(F-distribution)は、2 つの母分散の比の推定・検定において中心的な役割を果たす分布である。分散分析(ANOVA)や回帰分析における F 検定など、統計学の幅広い分野で用いられる。
F 分布は、ロナルド・フィッシャー(Ronald Fisher)の業績を称えて名付けられた。2 つの独立なカイ二乗分布の比として定義され、t 分布の二乗と密接な関係がある。
定義
Y_1 \sim \chi^2(n_1)、Y_2 \sim \chi^2(n_2) がそれぞれ自由度 n_1、n_2 のカイ二乗分布に従い、互いに独立のとき、
が従う分布を自由度 (n_1, n_2) の F 分布といい、F(n_1, n_2) で表す。n_1 を第 1 自由度(分子の自由度)、n_2 を第 2 自由度(分母の自由度)という。
ここで B(\cdot, \cdot) はベータ関数である。F 分布は正の値のみをとり、右に歪んだ形状をもつ。
F 分布は 2 つの自由度をもつ。自由度の順序は重要で、F(n_1, n_2) と F(n_2, n_1) は異なる分布である。
グラフ
自由度の組み合わせを変えたときの F 分布の確率密度関数を示す。
自由度が小さいときは原点付近で非常に大きな値をとり、右に強く歪んだ形状になる。両方の自由度が大きくなるにつれて、x = 1 付近にピークをもつ対称に近い形状になる。
期待値と分散
X \sim F(n_1, n_2) の期待値と分散は、第 2 自由度 n_2 によって存在条件が異なる。
- n_2 \leq 2 のとき、期待値は存在しない
- n_2 \leq 4 のとき、分散は存在しない
期待値 E[X] = \dfrac{n_2}{n_2-2} は第 1 自由度 n_1 に依存せず、n_2 \to \infty で 1 に収束する。
性質
逆数の性質
F 分布には重要な逆数の性質がある。
X \sim F(n_1, n_2) のとき
この性質から、F 分布の下側パーセント点は上側パーセント点から計算できる。
ここで F_{\alpha}(n_1, n_2) は F(n_1, n_2) の下側 \alpha 点である。
t 分布との関係
t 分布と F 分布には次の関係がある。
T \sim t(n) のとき
この関係から、t 検定と F 検定(自由度 (1, n))は本質的に同じ検定であることがわかる。
標本分散比との関係
F 分布が統計的推測で重要な理由は、2 つの正規母集団からの標本分散の比が F 分布に従うことにある。
X_1, \ldots, X_{n_1} が N(\mu_1, \sigma_1^2) からの無作為標本、Y_1, \ldots, Y_{n_2} が N(\mu_2, \sigma_2^2) からの無作為標本で、これらがすべて独立とする。それぞれの不偏分散を
とすると、次が成り立つ。
特に \sigma_1^2 = \sigma_2^2(等分散)のとき、\dfrac{s_1^2}{s_2^2} \sim F(n_1 - 1, n_2 - 1) となる。この結果は、2 つの母分散の比の検定(等分散性の検定、F 検定)に用いられる。
非心 F 分布
F 分布の定義において、分子のカイ二乗分布を非心カイ二乗分布に置き換えると、非心 F 分布が得られる。
Y_1 \sim \chi^2(n_1, \lambda)(自由度 n_1、非心度 \lambda の非心カイ二乗分布)、Y_2 \sim \chi^2(n_2) が独立のとき、
が従う分布を自由度 (n_1, n_2)、非心度 \lambda の非心 F 分布といい、F(n_1, n_2, \lambda) で表す。\lambda = 0 のとき、通常の F 分布 F(n_1, n_2) に一致する。
非心 F 分布は、分散分析や回帰分析における F 検定の検出力の計算に用いられる。また、T \sim t(n, \mu)(非心 t 分布)のとき T^2 \sim F(1, n, \mu^2) となる。
数表
F 分布の上側 5% 点 F_{0.05}(n_1, n_2)(P(X > F_{0.05}) = 0.05 となる値)を示す。
| n_2 | 第 1 自由度 n_1 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
| 5 | 6.61 | 5.79 | 5.41 | 5.19 | 5.05 | 4.95 | 4.88 | 4.82 | 4.77 | 4.74 |
| 6 | 5.99 | 5.14 | 4.76 | 4.53 | 4.39 | 4.28 | 4.21 | 4.15 | 4.10 | 4.06 |
| 7 | 5.59 | 4.74 | 4.35 | 4.12 | 3.97 | 3.87 | 3.79 | 3.73 | 3.68 | 3.64 |
| 8 | 5.32 | 4.46 | 4.07 | 3.84 | 3.69 | 3.58 | 3.50 | 3.44 | 3.39 | 3.35 |
| 9 | 5.12 | 4.26 | 3.86 | 3.63 | 3.48 | 3.37 | 3.29 | 3.23 | 3.18 | 3.14 |
| 10 | 4.96 | 4.10 | 3.71 | 3.48 | 3.33 | 3.22 | 3.14 | 3.07 | 3.02 | 2.98 |
| 12 | 4.75 | 3.89 | 3.49 | 3.26 | 3.11 | 3.00 | 2.91 | 2.85 | 2.80 | 2.75 |
| 15 | 4.54 | 3.68 | 3.29 | 3.06 | 2.90 | 2.79 | 2.71 | 2.64 | 2.59 | 2.54 |
| 20 | 4.35 | 3.49 | 3.10 | 2.87 | 2.71 | 2.60 | 2.51 | 2.45 | 2.39 | 2.35 |
| 30 | 4.17 | 3.32 | 2.92 | 2.69 | 2.53 | 2.42 | 2.33 | 2.27 | 2.21 | 2.16 |
| 60 | 4.00 | 3.15 | 2.76 | 2.53 | 2.37 | 2.25 | 2.17 | 2.10 | 2.04 | 1.99 |
| 120 | 3.92 | 3.07 | 2.68 | 2.45 | 2.29 | 2.18 | 2.09 | 2.02 | 1.96 | 1.91 |
例えば、F_{0.05}(5, 10) = 3.33 である。下側パーセント点は逆数の性質 F_{\alpha}(n_1, n_2) = \dfrac{1}{F_{1-\alpha}(n_2, n_1)} から計算できる。
計算例
自由度 (5, 10) の F 分布について計算する。
【期待値と分散】
【上側パーセント点】 F(5, 10) の上側パーセント点は数表または統計ソフトから
【確率の計算】 X \sim F(5, 10) のとき、P(X \leq 2) を求める。
練習問題
両母集団の分散が等しいので
自由度 (5, 10) の F 分布に従う。
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | F 分布(F-distribution) |
| 記号 | F(n_1, n_2) |
| パラメータ | n_1(第 1 自由度)、n_2(第 2 自由度) |
| 定義域 | x > 0 |
| 確率密度関数 | f(x) = \dfrac{1}{B\left(\frac{n_1}{2}, \frac{n_2}{2}\right)} \left(\dfrac{n_1}{n_2}\right)^{\frac{n_1}{2}} \dfrac{x^{\frac{n_1}{2}-1}}{\left(1 + \frac{n_1}{n_2}x\right)^{\frac{n_1+n_2}{2}}} |
| 期待値 | E[X] = \dfrac{n_2}{n_2 - 2}(n_2 > 2) |
| 分散 | V[X] = \dfrac{2n_2^2(n_1+n_2-2)}{n_1(n_2-2)^2(n_2-4)}(n_2 > 4) |
| 逆数の性質 | X \sim F(n_1, n_2) \Rightarrow 1/X \sim F(n_2, n_1) |
| t 分布との関係 | T^2 \sim F(1, n)(T \sim t(n) のとき) |
| 標本分散比 | \dfrac{s_1^2/\sigma_1^2}{s_2^2/\sigma_2^2} \sim F(n_1-1, n_2-1) |
| 応用 | 分散比の検定(F 検定)、分散分析、回帰分析 |
Pythonで実装する
Pythonを使って F 分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
print("=== F 分布 ===")
# 自由度 (n1, n2) = (5, 10)
n1, n2 = 5, 10
f_dist = stats.f(n1, n2)
print(f"\n【F({n1},{n2})の基本統計量】")
print(f"期待値: {f_dist.mean():.4f} (理論値: {n2/(n2-2):.4f})")
theory_var = 2 * n2**2 * (n1 + n2 - 2) / (n1 * (n2-2)**2 * (n2-4))
print(f"分散: {f_dist.var():.4f} (理論値: {theory_var:.4f})")
# 上側パーセント点
print(f"\n上側パーセント点:")
for alpha in [0.10, 0.05, 0.025, 0.01]:
q = f_dist.ppf(1 - alpha)
print(f" F_{{{alpha}}}({n1},{n2}) = {q:.3f}")
# 確率の計算
print(f"\n確率の計算:")
print(f"P(X ≤ 2) = {f_dist.cdf(2):.4f}")
# 逆数の性質
print(f"\n【逆数の性質】")
f_upper = f_dist.ppf(0.95)
f_lower = 1 / stats.f(n2, n1).ppf(0.95)
print(f"F_{{0.05}}({n1},{n2}) = {f_upper:.3f}")
print(f"F_{{0.95}}({n1},{n2}) = {f_dist.ppf(0.05):.3f}")
print(f"1/F_{{0.05}}({n2},{n1}) = {f_lower:.3f}")
# t分布との関係
print(f"\n【t分布との関係】")
n = 10
t_val = stats.t(n).ppf(0.975)
f_val = stats.f(1, n).ppf(0.95)
print(f"t_{{0.025}}({n})² = {t_val**2:.4f}")
print(f"F_{{0.05}}(1,{n}) = {f_val:.4f}")
# 標本分散比のシミュレーション
print(f"\n【標本分散比のシミュレーション】")
sigma1, sigma2 = 10, 10 # 等分散
n1_samp, n2_samp = 6, 11
n_sim = 10000
f_stats = []
for _ in range(n_sim):
sample1 = np.random.normal(0, sigma1, n1_samp)
sample2 = np.random.normal(0, sigma2, n2_samp)
s1_sq = np.var(sample1, ddof=1)
s2_sq = np.var(sample2, ddof=1)
f_stat = s1_sq / s2_sq
f_stats.append(f_stat)
f_stats = np.array(f_stats)
df1, df2 = n1_samp - 1, n2_samp - 1
print(f"s1²/s2² の標本平均: {np.mean(f_stats):.4f} (理論値: {df2/(df2-2):.4f})")
# 非心F分布
print(f"\n【非心F分布】")
n1_nc, n2_nc, nc = 5, 10, 3
nc_f = stats.ncf(n1_nc, n2_nc, nc)
print(f"非心F({n1_nc},{n2_nc},λ={nc}):")
print(f" 期待値: {nc_f.mean():.4f}")
print(f" 分散: {nc_f.var():.4f}")
scipy.stats.f で F 分布を扱える。シミュレーションでは、等分散の正規母集団から標本を抽出し、標本分散の比が F(5, 10) に従うことを確認している。非心 F 分布は scipy.stats.ncf を使用する。