tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

ヒストグラムのビンの決め方 - 「マンガでわかる統計学」第2章

一般的な統計手法をあまり知らないのは問題なので、「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()

f:id:kuyata:20140531234516p:plain

公式とは一致しない。

  • 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]))

が得られる。やはり公式とは一致していない。