Up

エフ分布のシミュレーション

 

エフ分布に従う確率変数は、カイ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 エフ分布で説明している。

 

Up