エフ分布のシミュレーション
エフ分布に従う確率変数は、カイ2乗分布に従う確率変数をその自由度で割ったものを、別のカイ2乗分布に従う確率変数をその自由度で割ったもので割ると得ることができる。
リスト1にシミュレーションプログラム例を示す。
リスト1 エフ分布のシミュレーション
import numpy
as np
import scipy.stats
as ss
import matplotlib.pyplot
as plt
import seaborn
as sb
n_smpls = 1_000_000
df1 = int(input('df1
= '))
df2 = int(input('df2
= '))
X1 = ss.chi2.rvs(df1, size = n_smpls)
X2 = ss.chi2.rvs(df2, size = n_smpls)
F = (X1/df1) / (X2/df2)
F = np.sort(F)
F = F[:int(0.95*len(F))]
# 右裾5%を除く
plt.hist(F, bins = 100, density = True, alpha
= 0.5, label = 'Simulation')
F_max = F.max()
x_coord = np.linspace(0,
F_max, 1000)
y_coord = ss.f.pdf(x_coord,
df1, df2) / 0.95
plt.plot(x_coord, y_coord, label = 'Model')
plt.title(f'df1 = {df1}, df2 = {df2}')
plt.legend()
plt.show()
リスト1のスクリプトを実行すると、自由度の設定が求められる。
df1 = 2
df2 = 3
2つの自由度の入力が終わると、計算が始まり、計算後、シミュレーションによるサンプルのヒストグラムとエフ分布の確率密度関数が描かれる(図1)。
図1
サンプルは、グラフ表示が見やすくなるようにサンプルの右側の裾が5%除かれている。
エフ分布については、<岡本安晴「データを使いこなすための統計入門」22世紀アート>の付録 確率:E.6 エフ分布で説明している。