6-8 F分布の特徴付け ~ 標準正規分布・カイ二乗分布・t分布・F分布の結びつきをPythonで検証する
今回の統計トピック
確率変数と$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布の繋がりを確認できる良問にチャレンジします。
今回も実データを使って確率変数と確率分布の関係を徹底的に検証(実験)します!
公式問題集の準備
「公式問題集」の問題を利用します。お手元に公式問題集をご用意ください。
公式問題集が無い場合もご安心ください!
「知る」「実践する」の章で、のんびり統計をお楽しみください!
問題を解く
📘公式問題集のカテゴリ
標本分布の分野
問8 $${F}$$分布の特徴付け(データなし)
試験実施年月
調査中
問題
公式問題集をご参照ください。
解き方
題意
確率変数と$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布の関係、$${t}$$分布のパーセント点表の読み取りの理解を確認する出題です。
確率変数と$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布の関係を確認しましょう。
$${\boldsymbol{\chi^2}}$$分布(カイ二乗分布)
標準正規分布に従う確率変数と関連します。
「独立に標準正規分布に従う$${n}$$個の確率変数の二乗を足した」確率変数$${W}$$は、自由度$${n}$$の$${\chi^2}$$分布$${\chi^2(n)}$$に従います。
$${\boldsymbol{t}}$$分布(ティー分布)
標準正規分布に従う確率変数と$${\chi^2}$$分布に従う確率変数に関連します。
「分子が標準正規分布に従う確率変数」「分母が自由度$${m}$$の$${\chi^2}$$分布に従う確率変数を自由度$${m}$$で割った平方根」の確率変数$${t}$$は、自由度$${m}$$の$${t}$$分布$${t(m)}$$に従います。
分母を掘り下げます。
分母の$${W}$$は、標準正規分布に従う確率変数の二乗を$${m}$$個足した確率変数$${W=Z_1^2+ \cdots + Z_m^2}$$です(上の$${\chi^2}$$分布も参照ください)。
自由度=個数=$${m}$$で割っているので、確率変数の二乗の平均$${\bar{Z^2}=(Z_1^2+ \cdots + Z_m^2)/m}$$と言えます。
また、平均した結果の平方根を取っているので、単位が確率変数の二乗(平方)$${\bar{Z^2}}$$の単位から、通常の確率変数$${\bar{Z}}$$の単位になっています。
ざっくり、$${t=\cfrac{Z}{\sqrt{W/m}}}$$は、$${\cfrac{Z}{\bar{Z^{\prime}}}}$$的なイメージです($${Z,W}$$は互いに独立なので、あくまでざっくり)。
$${\boldsymbol{F}}$$分布(エフ分布)
$${\chi^2}$$分布に従う2つの確率変数に関連します。
「分子が自由度$${m_1}$$の$${\chi^2}$$分布に従う確率変数を自由度$${m_1}$$で割った値」「分母が自由度$${m_2}$$の$${\chi^2}$$分布に従う確率変数を自由度$${m_2}$$で割った値」の確率変数$${F}$$は、自由度$${(m_1, m_2)}$$の$${F}$$分布$${F(m_1, m_2)}$$に従います。
深掘りします。
$${W_1=Z_{11}^2+Z_{12}^2+\cdots +Z_{1m_1}^2}$$、$${W_2=Z_{21}^2+ Z_{22}^2+\cdots +Z_{2m_2}^2}$$と表すと、$${W_1, W_2}$$は標準正規分布に従う確率変数の二乗を足したものであることがイメージできます。
また、$${W_1/m_1}$$は$${Z_{11}^2+Z_{12}^2+\cdots +Z_{1m_1}^2}$$の平均、$${W_2/m_2}$$は$${Z_{21}^2+Z_{22}^2+\cdots +Z_{2m_2}^2}$$の平均です。
ざっくり、$${F=\cfrac{W_1/m_1}{W_2/m_2}}$$は、$${ \cfrac{\bar{Z^2_{1.}}} { \bar{Z^2_{2.}}} }$$的なイメージです(あくまでざっくり)。
【まとめ】
$${\chi^2}$$分布・$${t}$$分布・$${F}$$のそれぞれに従う確率変数が関係しあっていることと、背後に標準正規分布に従う確率変数$${Z}$$が隠れていることが分かりました。
では、問題文の確率変数と各分布の定義をマッチングします。
■$${T=Z_2^2+Z_3^2+Z_4^2+Z_5^2+Z_6^2}$$
■$${V=\cfrac{Z_1}{\sqrt{T/5}}}$$
問題(ア)の解答は、自由度$${5}$$の$${t}$$分布 です。
■$${W=\cfrac{T/5}{Z_1^2}}$$
問題(イ)の解答は、自由度$${(5,1)}$$の$${F}$$分布 です。
■確率$${P(|V|\geq 1/\sqrt{\alpha})}$$
確率変数$${V}$$は自由度$${5}$$の$${t}$$分布$${t(5)}$$に従います。
$${t}$$分布のパーセント点表から上側%点を取得して、$${\alpha}$$を求めます。
$${t}$$分布のパーセント点表を見ましょう。
自由度$${5}$$の上側$${2.5\%}$$点は$${2.571}$$です。
つまり、$${1/\sqrt{\alpha}}$$は$${2.571}$$です。
$${\alpha}$$を計算しましょう。
$$
\begin{align*}
1/\sqrt{\alpha}&=2.571 \\
1&=2.571 \sqrt{\alpha} \\
\sqrt{\alpha}&=1/2.571\\
\alpha&=(1/2.571)^2 \\
\alpha&=0.151 \cdots \\
\end{align*}
$$
問題(ウ)の解答は、$${\alpha=0.15}$$ です。
【振り返り】
①この問題の(ア)・(イ)は、$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布について、確率変数$${W}$$・$${t}$$・$${F}$$の数式、これらの確率変数の繋がり、確率分布間の繋がりの知識が問われる問題でした。
②(ウ)は(ア)の答えが判明していないと解答できない問題でした。
難問でした。
【予告】
振り返りの①のさまざまな関係をもっと深掘りします!
「知る」の章は、問題に沿って、確率変数$${T,V,W}$$が$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布に従うことを、実験して確認いたします。
抽象化された数式に触れるとともに、具体的な値をもつデータを利用して、両面から、さまざまな関係性を理解していきましょう!
解答
⑤ です。
難易度 ややむずかしい
・知識:確率変数と$${\chi^2}$$分布・$${t}$$分布・$${F}$$分布の関係
・計算力:数式組み立て(低)、数式計算(低)
・時間目安:2分
知る
おしながき
公式問題集の問題に接近してみましょう!
今回は2本立てです!
1つ目は、公式問題集で提示された「確率変数$${\boldsymbol{T,V,W}}$$が$${\boldsymbol{\chi^2}}$$分布・$${\boldsymbol{t}}$$分布・$${\boldsymbol{F}}$$分布に従うこと」を実験して確かめます!
2つ目は、公式問題集の確率$${P(W \leq \alpha)=P(1/W \geq 1/\alpha)=P(V^2 \geq 1/\alpha)=P(|V|\leq 1/\sqrt{\alpha})}$$の展開を追います!
1.実験
実験方法
Pythonでたくさんデータを生成してシミュレーションを行います。
具体的には、確率変数$${Z_1, Z_2, Z_3, Z_4, Z_5, Z_6}$$のデータをそれぞれ10万個生成します。
シミュレーションした結果をヒストグラムに表して、そのヒストグラムが特定の確率分布の確率密度関数曲線に近似しているかどうかを確認します。
実験開始!
Pythonのコードを追いかけて、実験の臨場感を高めていきましょう!
①インポート
計算の得意な「NumPy」(ナンパイ)と、統計に強い「SciPy.stats」(サイパイ・スタッツ)の出番です。
「SciPy.stats」の次の関数を利用して確率密度関数の曲線を描きます。
⇒ norm:正規分布、chi2:カイ二乗分布、t:t分布、f:F分布
「matplotlib.pyplot」(マットプロットリブ・パイプロット)はグラフ描画のスペシャリスト!
import numpy as np
from scipy.stats import norm, chi2, t, f
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'MS Gothic'
②$${\boldsymbol{Z_1, \cdots, Z_6}}$$ データの生成
平均0、標準偏差1の標準正規分布$${N(0, 1^2)}$$に従う乱数を「norm.rvs()」で生成して、$${Z1, \cdots Z6}$$に設定します。
それぞれ10万個のデータを生成するように、sizeに設定しています。
# 設定 size:データ件数
size=100000
# 初期値
mu, stddev = 0, 1 # 正規分布の平均mu、標準偏差stddev
np.random.seed(11) # 乱数シード
# 標準正規分布に従う確率変数Zデータの乱数生成
Z1 = norm.rvs(mu, stddev, size)
Z2 = norm.rvs(mu, stddev, size)
Z3 = norm.rvs(mu, stddev, size)
Z4 = norm.rvs(mu, stddev, size)
Z5 = norm.rvs(mu, stddev, size)
Z6 = norm.rvs(mu, stddev, size)
③$${\boldsymbol{Z_1, \cdots, Z_6}}$$データのヒストグラムをプロット
標準正規分布$${N(0, 1^2)}$$に近似していることを確認しましょう。
コード表示はスキップします♪
青い部分は各データのヒストグラム、赤い線が標準正規分布の曲線です。
青い部分の稜線は赤い線に一致しています。
つまり、$${Z_1, \cdots, Z_6}$$は標準正規分布に近似しています。
④$${\boldsymbol{T,V,W}}$$のデータの生成
公式問題集の計算式に沿って、$${T,V,W}$$の値を計算します。
「**2」で二乗、「np.sqrt()」で平方根を計算しています。
# T,V,Wの算出
T = Z2**2 + Z3**2 + Z4**2 + Z5**2 + Z6**2
V = Z1 / np.sqrt(T/5)
W = (T/5) / (Z1**2)
print('【データ概要】')
print(' データ件数 T:', T.shape[0], 'V:', V.shape[0], 'W:', W.shape[0])
print(' 平均 T:', T.mean().round(4), 'V:', V.mean().round(4),
'W:', W.mean().round(4))
print(' 分散 T:', T.var(ddof=0).round(4), 'V:', V.var(ddof=0).round(4),
'W:', W.var(ddof=0).round(4))
print(' Wの最小値', W.min().round(4), '最大値', W.max().round(4) )
データ個数はそれぞれ10万個あります。
なおデータ$${W}$$の値はものすごくバラついています。
最小値が0.003、最大値が13億!
それでは、実験の核心に進みます。
$${T,V,W}$$のヒストグラムが、それぞれ$${\chi^2}$$分布、$${t}$$分布・$${F}$$分布の確率密度関数と当てはまるのか、グラフで確かめましょう!
⑤$${\boldsymbol{T}}$$データと$${\boldsymbol{\chi^2}}$$分布のプロット
最初の確認は、確率変数$${T}$$です。
自由度$${5}$$の$${\chi^2}$$分布$${\chi^2(5)}$$に従っているか確認しましょう。
コード表示はスキップします♪
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
「確率変数$${T}$$は$${\chi^2(5)}$$に従う」ことが言えそうです!
⑥$${\boldsymbol{V}}$$データと$${\boldsymbol{t}}$$分布のプロット
次の確認は、確率変数$${V}$$です。
自由度$${5}$$の$${t}$$分布$${t(5)}$$に従っているか確認しましょう。
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
「確率変数$${V}$$は$${t(5)}$$に従う」ことが言えそうです!
⑦$${\boldsymbol{W}}$$データと$${\boldsymbol{F}}$$分布のプロット
最後の確認は、確率変数$${W}$$です。
自由度$${(5,1)}$$の$${F}$$分布$${F(5,1)}$$に従っているか確認しましょう。
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
「確率変数$${W}$$は$${F(5,1)}$$に従う」ことが言えそうです!
【まとめ】
$${T,V,W}$$の確認を終えました。
公式問題集の解答どおり、「確率変数$${\boldsymbol{T,V,W}}$$が$${\boldsymbol{\chi^2}}$$分布・$${\boldsymbol{t}}$$分布・$${\boldsymbol{F}}$$分布に従うこと」を確認できました。
数式の意味するところを実験で確認するのって、楽しいですね!
2.確率を追う!
公式問題集の問題文に、次のような記述があります。
また、問題の解答より、次を得ます。
これらのことをミックスして日本語化すると。次のような感じになります。
では、①から確認しましょう!
①t分布とF分布の関係
$${t}$$分布に従う確率変数$${V=\cfrac{Z_1}{\sqrt{T/5}}}$$があります。
$${V^2}$$は、$${V^2=\cfrac{Z_1^2}{T/5}=\cfrac{Z^2_1/1}{T/5}}$$になります。
分子の$${Z^2_1}$$は自由度$${1}$$の$${\chi^2}$$分布に従います。
分母の$${T}$$は自由度$${5}$$の$${\chi^2}$$分布に従います。
分子・分母がそれぞれ$${\chi^2}$$分布に従う確率変数とその自由度になっています。これは$${F}$$分布の確率変数に合致します。
したがって、$${V^2=\cfrac{Z^2_1/1}{T/5}}$$は自由度$${(1,5)}$$の$${F}$$分布に従います。
確率変数$${V^2=\cfrac{Z^2_1/1}{T/5}}$$は、自由度$${(5, 1)}$$の$${F}$$分布に従う確率変数$${W=\cfrac{T/5}{Z^2_1}}$$の逆数である「自由度$${(1,5)}$$の$${F}$$分布に従う確率変数$${1/W=\cfrac{Z^2_1}{T/5}}$$」と一致するのです!
②確率変数の変換
次の確率の展開を確認します。
最初の項から順を追って見ていきましょう。
$${P(W \leq \alpha)}$$の$${W,\alpha}$$を$${\alpha W}$$で割ります。
$${P(W \leq \alpha)=P(W/ \alpha W \leq \alpha/ \alpha W)=P(1/\alpha \leq 1/W)=P(1/W \geq 1/ \alpha)}$$
$${P(1/W \geq 1/ \alpha)}$$の$${1/W}$$に$${1/W=V^2}$$を代入します。
$${P(1/W \geq 1/ \alpha)=P(V^2 \geq 1/ \alpha)}$$
$${P(V^2 \geq 1/ \alpha)}$$の$${V^2,\ 1/ \alpha}$$の平方根を取ります。
$${P(V^2 \geq 1/ \alpha)=P(\sqrt{V^2} \geq \sqrt{1/ \alpha})=P(\pm V \geq \sqrt{1}/ \sqrt{\alpha})=P(|V| \geq 1/ \sqrt{\alpha})}$$
$${P(|V| \geq 1/ \sqrt{\alpha})}$$ができました!
$${t}$$分布と$${F}$$分布が交錯するポイントは、とても快適な交差点でした。
実践する
一緒に実験してみよう
「知る」の実験を実施してみませんか?
この記事ではPythonの実践をサポートいたします。
電卓・手作業で作成してみよう!
今回はお休みです。
「問題を解く」の確率変数と確率分布の関係をお読みいただいたり、「知る」の実験をお読みくださいませ。
EXCELで作成してみよう!
今回はお休みです。
EXCELサンプルファイルのダウンロード
今回はファイル提供はありません。
Pythonで作成してみよう!
プログラムコードを読んで、データを流したりデータを変えてみたりして、データを追いかけることで、作表ロジックを把握する方法も効果的でしょう。
サンプルコードを揃えておけば、類似する作表作業を自動化して素早く結果を得ることができます。
今回は、「確率変数$${\boldsymbol{T,V,W}}$$が$${\boldsymbol{\chi^2}}$$分布・$${\boldsymbol{t}}$$分布・$${\boldsymbol{F}}$$分布に従うこと」の実験コードを詳細に紹介いたします。
データ数(変数size)を増減させて、自分だけのシミュレーションをお楽しみくださいね。
①インポート
「SciPy.stats」の次の関数を利用して確率密度関数の曲線を描きます。
norm:正規分布、chi2:カイ二乗分布、t:t分布、f:F分布
import numpy as np
from scipy.stats import norm, chi2, t, f
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'MS Gothic'
!pip install japanize-matplotlib
import japanize_matplotlib
②$${\boldsymbol{Z_1, \cdots, Z_6}}$$ データの生成
平均0、標準偏差1の標準正規分布$${N(0, 1^2)}$$に従う乱数を「norm.rvs()」で生成して、$${Z1, \cdots Z6}$$に設定します。
【引数】norm.rvs( loc=平均, scale=標準偏差, size=乱数生成数 )
# 設定 size:データ件数
size=100000
# 初期値
mu, stddev = 0, 1 # 正規分布の平均mu、標準偏差stddev
np.random.seed(11) # 乱数シード
# 標準正規分布に従う確率変数Zデータの乱数生成
Z1 = norm.rvs(mu, stddev, size)
Z2 = norm.rvs(mu, stddev, size)
Z3 = norm.rvs(mu, stddev, size)
Z4 = norm.rvs(mu, stddev, size)
Z5 = norm.rvs(mu, stddev, size)
Z6 = norm.rvs(mu, stddev, size)
③$${\boldsymbol{Z_1, \cdots, Z_6}}$$データのヒストグラムをプロット
for文で6つのグラフを描画しています。
# 描画領域の設定
fig, ax = plt.subplots(2, 3, figsize=(12, 8), tight_layout=True,
sharex=True, sharey=True)
# 標準正規分布N(0,1)のx軸とy軸(確率密度関数)の値を取得
x = np.linspace(-5, 5, 1001)
y = norm.pdf(x, mu, stddev)
# Z1~Z6データを2行×3列でプロット
for i, z in enumerate((Z1, Z2, Z3, Z4, Z5, Z6)):
row, col = divmod(i, 3)
# ヒストグラムをプロット
ax[row][col].hist(z, bins=50, density=True, label=f'$Z_{i+1}$',
alpha=0.5, ec='navy')
# 標準正規分布の曲線をプロット
ax[row][col].plot(x, y, c='red', lw=2, label='$N(0,1)$')
# 修飾
ax[row][col].set_title(f'$Z_{i+1}$', fontsize=15)
ax[row][col].legend()
plt.show()
【出力イメージ】
④$${\boldsymbol{T,V,W}}$$のデータの生成
公式問題集の計算式に沿って、$${T,V,W}$$の値を計算します。
「**2」で二乗の計算をしています。
「np.sqrt()」で平方根を計算しています。
# T,V,Wの算出
T = Z2**2 + Z3**2 + Z4**2 + Z5**2 + Z6**2
V = Z1 / np.sqrt(T/5)
W = (T/5) / (Z1**2)
print('【データ概要】')
print(' データ件数 T:', T.shape[0], 'V:', V.shape[0], 'W:', W.shape[0])
print(' 平均 T:', T.mean().round(4), 'V:', V.mean().round(4),
'W:', W.mean().round(4))
print(' 分散 T:', T.var(ddof=0).round(4), 'V:', V.var(ddof=0).round(4),
'W:', W.var(ddof=0).round(4))
print(' Wの最小値', W.min().round(4), '最大値', W.max().round(4) )
【出力イメージ】
⑤$${\boldsymbol{T}}$$データと$${\boldsymbol{\chi^2}}$$分布のプロット
最初の確認は、確率変数$${T}$$です。
自由度$${5}$$の$${\chi^2}$$分布$${\chi^2(5)}$$に従っているか確認しましょう。
Tデータに基づいてヒストグラムをプロット
chi2.pdfでカイ二乗分布$${\chi^2(5)}$$の確率密度関数の値を取得
【引数】chi2.pdf( xデータ, df=自由度 )
# Tのプロット 自由度5のカイ二乗分布
# Tのヒストグラムの描画
plt.hist(T, bins=100, density=True, label='T', alpha=0.5, ec='navy')
# カイ二乗分布の曲線のデータ取得と描画
x = np.linspace(0, 30, 1001)
y = chi2.pdf(x, df=5)
plt.plot(x, y, label=f'$\chi^2(5)$', c='red', lw=2)
# その他の描画設定
plt.title('$T$は自由度$5$の$\chi^2$分布に従う')
plt.legend()
plt.show()
【出力イメージ】
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
⑥$${\boldsymbol{V}}$$データと$${\boldsymbol{t}}$$分布のプロット
次の確認は、確率変数$${V}$$です。
自由度$${5}$$の$${t}$$分布$${t(5)}$$に従っているか確認しましょう。
Vデータに基づいてヒストグラムをプロット
t.pdfで$${t}$$分布$${t(5)}$$の確率密度関数の値を取得
【引数】t.pdf( xデータ, df=自由度 )
# Vのプロット 自由度5のt分布
# Vのヒストグラムの描画
plt.hist(V, bins=300, density=True, label='V', alpha=0.5, ec='navy')
# t分布の曲線のデータ取得と描画
x = np.linspace(-5, 5, 1001)
y = t.pdf(x, df=5)
plt.plot(x, y, label='$t(5)$', c='red', lw=2)
# その他の描画設定
plt.xlim(-5, 5)
plt.title('$V$は自由度$5$の$t$分布に従う')
plt.legend()
plt.show()
【出力イメージ】
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
⑦$${\boldsymbol{W}}$$データと$${\boldsymbol{F}}$$分布のプロット
最後の確認は、確率変数$${W}$$です。
自由度$${(5,1)}$$の$${F}$$分布$${F(5,1)}$$に従っているか確認しましょう。
Wデータに基づいてヒストグラムをプロット
f.pdfで$${F}$$分布$${F(5,1)}$$の確率密度関数の値を取得
【引数】f.pdf( xデータ, dfn=分子側の自由度、dfd=分母側の自由度 )
# Wのプロット 自由度(5,1)のF分布
# Wのヒストグラムの描画
bins = np.linspace(0, 20, 75)
plt.hist(W, bins=bins, density=True, label='W', alpha=0.5, ec='navy',
align='left')
# F分布の曲線のデータ取得と描画
x = np.linspace(0, 20, 1001)
y = f.pdf(x, dfn=5, dfd=1)
plt.plot(x, y, label='$F(5,1)$', c='red', lw=2)
# その他の描画設定
plt.title('$W$は自由度$(5,1)$の$F$分布に従う')
plt.legend()
plt.show()
【出力イメージ】
青色のヒストグラムと赤色の確率密度関数曲線は、ほぼ一致しています。
Pythonサンプルファイルのダウンロード
こちらのリンクからJupyter Notebook形式のサンプルファイルをダウンロードできます。
おわりに
今回で「標本分布の分野」を終了します。
最後の本問には標本分布のスーパースターが勢ぞろいでしたね!
次回から「推定の分野」が始まります。
推定・検定・分散分析のテーマでは、標準正規分布、$${t}$$分布、$${\chi^2}$$分布、$${F}$$分布が私達の味方になって、難問をバサバサと片付けてくれます!(たぶん)
最後までお読みいただきまして、ありがとうございました。
のんびり統計シリーズの記事
次の記事
前の記事
目次