一般的な統計手法をあまり知らないのは問題なので、「Think Bayes」で挫けたついでに基本のきから積み上げていくこととする。
第2章でヒストグラムについて扱っている。ビンの幅によってかなり恣意的に情報の見た目を弄ることができるので決め方にも一定の規準が使われる。(分析者がよく検討した上で「人間的に」決めることも多いらしい。)
この際に使われる公式は二つあり、それぞれビンの個数と幅を決める。これらが自分が普段使っているnumpyやmatplotlibについて調べたところ、これらの公式は使われていないことが分かった。
ビンの個数(スタージェスの公式)
\[ 1 + \dfrac{log_{10}(データ個数)}{\log_{10}2} \]
ビンの幅
\[ \dfrac{(最大値)- (最小値)}{(ビンの個数)} \]
matplotlib、numpy.histogramで検証してみる
- 使うデータ
普通の正規分布
mu = 0 sigma = 1 size = 100 data = np.random.normal(mu, sigma, size) #ビンの数 num_bin = round(1 + np.log10(100) / log10(2)) #ビンの幅 width_bin = (data.max() - data.min()) / num_bin
ビンの個数が8、幅が0.612...とわかる。
- matplotlib
from matplotlib import pylab pylab.hist(data) pylab.show()
公式とは一致しない。
- numpy.histogram
numpy.histogramはmatplotlibのバックで使われている。実際、
pylab.histogram(data) np.histogram(data)
は一致して、
(array([ 3, 3, 8, 13, 14, 16, 19, 12, 7, 5]), array([-2.71636594, -2.22661139, -1.73685684, -1.24710229, -0.75734774, -0.26759319, 0.22216136, 0.71191591, 1.20167046, 1.69142501, 2.18117956]))
が得られる。やはり公式とは一致していない。