2013年12月4日水曜日

Pythonで統計: 累積分布、分位点を計算

Pythonで確率分布、累積分布、分位点などを計算する。
簡単のためにとりあえず二項分布で実験。
コインじゃ面白くないので、たとえば1回の施行で事象A,Bが0.4、0.6の確率で起きるとして
それを50回繰り返すとする。
from scipy.stats import binom
n = 50
p = 0.4
rv = binom(n, p)

このrvが確率分布を扱ういろいろなメソッドを提供してくれるらしい。
http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_discrete.html#scipy-stats-rv-discrete

平均、分散は
print rv.mean(), rv.var()
そのほかにもstdとかmeanとかある。

23回Aが起きるときの確率は
print rv.pmf(23)
pmfはProbability Mass Functionの略で確率密度関数の離散関数版のようだ。

分布の形が知りたいときは
x = np.arange(0, n)
plt.vlines(x, 0, rv.pmf(x))
累積分布は(さっきのと重ねて描くと)
cdf = rv.cdf(x)
plt.plot(x, cdf)
80%となるような分位点は
print rv.ppf(0.8)
23という結果なので図と一致する。ちなみに定義からあたりまえやけど、
分位点は累積分布関数の逆関数から求まる。








0 件のコメント:

コメントを投稿