Rで 確率分布:F分布 を試みます。
本ポストはこちらの続きです。

1. F分布とは
F分布は、2つの独立なカイ2乗分布に従う確率変数の比から作られる連続確率分布です。主に分散分析(ANOVA)や回帰分析におけるモデルの有意性の検定など、2つのばらつき(分散)を比較する際に用いられます。
F分布の定義
F分布の定義は、その応用を理解する上で非常に重要です。 独立な確率変数 \(U_1\) と \(U_2\) が、それぞれ
- \(U_1 \sim \chi^2(d_1)\) (自由度 \(d_1\) のカイ2乗分布)
- \(U_2 \sim \chi^2(d_2)\) (自由度 \(d_2\) のカイ2乗分布)
に従うとします。このとき、それぞれのカイ2乗変数をその自由度で割ったものの比、
\[F = \dfrac{U_1/d_1}{U_2/d_2}\]
が従う分布が、分子の自由度 \(d_1\)、分母の自由度 \(d_2\) のF分布です。 \(U_1/d_1\) と \(U_2/d_2\) は、平均平方(Mean Square)と呼ばれ、分散の推定量と見なせます。したがって、F分布は「2つの分散の推定量の比」がどのような分布をとるかを示していると解釈できます。
確率密度関数 (Probability Density Function, PDF)
自由度 \((d_1, d_2)\) のF分布に従う確率変数 \(F\) の確率密度関数 \(f(x)\) は、以下の式で定義されます。
\[f(x | d_1, d_2) = \dfrac{\sqrt{\dfrac{(d_1x)^{d_1}d_2^{d_2}}{(d_1x+d_2)^{d_1+d_2}}}}{x \cdot B\left(\dfrac{d_1}{2}, \dfrac{d_2}{2}\right)} \quad (x \ge 0)\] ここで \(B\) はベータ関数です。
この分布は、2つのパラメータによって形状が決定されます。
- \(d_1\): 分子の自由度 (numerator degrees of freedom)
- 定義式の分子に来るカイ2乗分布の自由度です。
- \(d_2\): 分母の自由度 (denominator degrees of freedom)
- 定義式の分母に来るカイ2乗分布の自由度です。
主な特徴
- 定義域: 分散の比であるため、確率変数は常に非負の値 (\(x \ge 0\)) をとります。
- 形状: カイ2乗分布と同様に、右に大きく歪んだ(裾を引く)非対称な形状をしています。その具体的な形状は、2つの自由度 \(d_1\) と \(d_2\) の組み合わせによって決まります。
- 自由度の影響:
- 一般的に、両方の自由度が大きくなるにつれて、分布の歪みは小さくなり、ピークは1の周りに集中し、より尖った形状になります。
- 他の分布との関係:
- 確率変数 \(T\) が自由度 \(k\) のt分布に従うとき、その2乗 \(T^2\) は、自由度(1, k)のF分布に従います。\(T^2 \sim F(1, k)\)。
2. F分布の応用例
F分布は、2つの分散を比較するF検定で中心的な役割を果たします。
- 分散分析 (Analysis of Variance, ANOVA)
- F分布の最も代表的な応用です。3つ以上のグループの母平均がすべて等しいかどうかを検定します。
- 例: 3種類の異なる肥料を与えた作物の平均収穫量に、統計的に有意な差があるか。
- 「グループ間のばらつき(群間変動)」と「グループ内のばらつき(群内変動)」を比較し、その比(F値)が偶然で起こる範囲を超えているかをF分布を用いて評価します。
- 回帰分析
- モデル全体の有用性を評価するために用いられます。具体的には、「説明変数のすべてが目的変数に影響を与えていない(すべての回帰係数が0である)」という帰無仮説を検定します。
- モデルによって説明される変動と、説明されない変動(残差)の比を計算し、F検定を行います。
- 等分散性の検定
- 2つの正規分布に従う母集団の分散が等しいかどうかを検定します。
3. R言語によるシミュレーション
ここでは、2つの自由度 \((d_1, d_2)\) を変更した4つのF分布を、1枚のチャートにggplot2
を用いて描画します。これにより、2つの自由度が分布の形状に与える影響を視覚的に理解します。
- ケース1:
d1=5, d2=5
(自由度が等しく、比較的小さい) - ケース2:
d1=30, d2=30
(自由度が等しく、大きい。ピークが1に近づく) - ケース3:
d1=5, d2=30
(分子の自由度が小さい) - ケース4:
d1=30, d2=5
(分母の自由度が小さい)
Rコード
# 必要なライブラリを読み込みます
library(ggplot2)
library(dplyr)
library(tidyr)
# 1. 描画範囲となるx軸の値を生成
<- seq(0, 5, length.out = 1000)
x_vals
# 2. 異なる自由度を持つF分布の確率密度を計算
# df(x, df1, df2) を使用。df1が分子、df2が分母の自由度
<- tibble(
df x = x_vals
%>%
) mutate(
`d1=5, d2=5` = df(x, df1 = 5, df2 = 5),
`d1=30, d2=30` = df(x, df1 = 30, df2 = 30),
`d1=5, d2=30` = df(x, df1 = 5, df2 = 30),
`d1=30, d2=5` = df(x, df1 = 30, df2 = 5)
)
# 3. ggplotで描画しやすいように、データを「ロングフォーマット」に変換
<- df %>%
df_long pivot_longer(
cols = -x,
names_to = "parameters",
values_to = "density"
%>%
) # 凡例の順序を調整
mutate(parameters = factor(parameters, levels = c(
"d1=5, d2=5",
"d1=30, d2=30",
"d1=5, d2=30",
"d1=30, d2=5"
)))
# 4. 各分布に割り当てる色を定義
<- c(
manual_colors "d1=5, d2=5" = "blue",
"d1=30, d2=30" = "red",
"d1=5, d2=30" = "darkgreen",
"d1=30, d2=5" = "purple"
)
# 5. ggplotを使用してチャートを描画
<- ggplot(df_long, aes(x = x, y = density, color = parameters)) +
p geom_line(linewidth = 1.2) +
scale_color_manual(values = manual_colors) +
labs(
title = "自由度(d1, d2)によるF分布の変化",
subtitle = "自由度が大きいほど、分布は1の周りに集中し、ばらつきが小さくなる",
x = "F値",
y = "確率密度",
color = "パラメータ (d1, d2)"
+
) coord_cartesian(xlim = c(0, 4), ylim = c(0, 1.25)) +
theme_minimal(base_size = 14) +
theme(
legend.position = "top",
plot.title = element_text(face = "bold"),
plot.subtitle = element_text(color = "gray40")
)
# チャートの表示
print(p)
Figure 1 の解説
上記のRコードを実行すると、4つのF分布が描画されたチャート Figure 1 が生成されます。
-
d1=5, d2=5
(青線): 分子・分母の自由度が共に小さいため、比較的ばらつきが大きく、右に歪んだ形状をしています。 -
d1=30, d2=30
(赤線): 両方の自由度が大きいため、分布のばらつきが最も小さく、ピークは1の近くに集中しています。このチャートの中では最も高く、鋭い山を持つ分布です。 -
d1=5, d2=30
(緑線): 分母の自由度d2
が大きいため、青線(d1=5, d2=5
)と比べて分布のばらつきがやや小さくなり、ピークが高くなっています。ピークの位置は1よりも左にあります。 -
d1=30, d2=5
(紫線): 分母の自由度d2
が5と小さいため、分布はばらつきが大きく、右に長く裾を引いています。ピークの高さは赤線(d1=30, d2=30
)や緑線(d1=5, d2=30
)よりも低くなっており、分子の自由度d1
が大きいだけではピークが高くなるとは限らないことがわかります。
以上です。