以前、”正規分布に従う確率変数の二乗和はカイ二乗分布に従うことの証明”という記事を書いた。
記事タイトルの通り、正規分布に従う確率変数の二乗和はカイ二乗分布に従う。
実際にデータを生成して確かめてみる。
まずは、scipi.stats.chi2.pdfを使って各自由度と対応する確率密度関数を書いてみる。
“pdf” ってPortableDocumentFormatではなく、ProbabilityDensityFunction(確率密度関数)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import numpy as np import matplotlib.pyplot as plt from scipy import stats # 0から8まで1000個のデータを等間隔で生成する x = np.linspace(0, 8, 1000) fig, ax = plt.subplots(1,1) linestyles = [':', '--', '-.', '-'] deg_of_freedom = [1, 2, 3, 4] for k in deg_of_freedom: linestyle = linestyles[k-1] ax.plot(x, stats.chi2.pdf(x, k), linestyle=linestyle, label=r'$k=%i$' % k) plt.xlim(0, 8) plt.ylim(0, 1.0) plt.legend() plt.show() |
定義に従って各自由度ごとに2乗和を足し合わせてヒストグラムを作ってみる。
(ループのリストが自由度)
1 2 3 4 5 6 7 8 9 10 11 |
cum = 0 for i in [1,2,3,4]: # 標準正規分布に従う乱数を1000個生成 x = np.random.normal(0, 1, 1000) # 2乗 x2 = x**2 cum += x2 plt.figure(figsize=(7,5)) plt.title("chi2 distribution.[k=1]") plt.hist(cum, 80) |
全部k=1ってなってしまった…。左上、右上、左下、右下の順に1,2,3,4。
頻度がこうなので、各階級の頻度の相対値を考えると上記の確率密度関数の形になりそう。
k=1,2が大きくことなるのがわかるし、3,4と進むにつれて変化が少なくなる。