はじめに
統計解析の本の最後によく標準正規分布表が載っています。 これで正規分布に関する問題を解くこともできますが、「21世紀にもなって表とか引きたくない」と思う事もよくあります。しかも本によって上側確率だったり0からの累積確率だったりまちまちです。 表の使い方覚えるぐらいなら、統計ソフトやプログラムの統計ライブラリの使い方を覚えた方が後々役に立ちそうで、あまり学ぶモチベーションがあがらないことがあります。
そういうときに、pythonが入ったパソコンがあれば、scipyを使って計算できます。 scipyはpipがあればコマンドラインで
pip install scipy
か
pip3 install scipy
などを実行すればインストールできます。
横軸から確率を出す
横軸の値から上側確率を出すには
>>> from scipy.stats import norm >>> norm.sf(x=1.233) 0.10878788208591617
とします。
横軸の値から下側確率を出すには
>>> from scipy.stats import norm >>> norm.cdf(x=1.233) 0.8912121179140838
とします。
確率の定義から、この二つを加えると1になります。
>>> norm.cdf(x=1.233) + norm.sf(x=1.233) 1.0
なので、どちらか覚えれば十分です。 ただし、1からsfを引くよりは直接cdfを使った方が精度は良くなる可能性があります。
累積確率から横軸の値を出す
累積確率から横軸の値を出すには
>>> from scipy.stats import norm >>> norm.ppf(q=0.9) 1.2815515655446004
とします。
上側確率から横軸の値を出すには、
>>> norm.isf(q=0.9) -1.2815515655446004
とします。
標準正規分布の性質から、累積確率の結果とは符号が逆転します。 よってこれもどちらか覚えれば十分です。
normは標準正規分布だけではなく、一般の正規分布にも対応しています。
一般の正規分布で使う時はパラメータに loc, scaleを加えます。 それぞれ平均と標準偏差です。 ただ、標準化すれば済むのでこのページでは省略します。
詳しくはこちらでscipy.stats.norm。
例
95%信頼区間を求めるときに使う係数、「1.96」を求めることを考えます。 95%信頼区間は平均値の周りに確率の和が0.95となる範囲を取り出すことになるので、上側および下側確率が0.025になる部分以外とも考えられます。
よって上側確率から横軸の値を求めるisfを使えば
>>> norm.isf(q=0.025)
結果:
1.9599639845400543
を得ます。
同様に90%信頼区間の係数なら
>>> norm.isf(q=0.05)
結果:
1.6448536269514726
となります。
一般に100(1-a)%の信頼区間の係数を求めるならnorm.isf(q=a/2)と書けます。
Page Info | |
---|---|
Page Name : | Python/標準正規分布 |
Page aliases : | None |
Page owner : | njf |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | All visitors |
Users : | All visitors |