こんにちは、データサイエンティストのたぬ(@tanuhack)です!
アンケートの回答数や広告の表示回数、テレビの視聴率などの、日常生活のありとあらゆる場所で統計学の『母比率』が使われています。
母比率の信頼区間もまた、母平均の区間推定のように算出することができます。
Pythonで母平均の95%信頼区間を区間推定する方法【母分散が未知】そこで今回は、母比率の95%信頼区間を区間推定し、さらにその発展である推定に『妥当な』サンプルサイズを決定する方法を紹介します。
二項分布で母比率の95%信頼区間を推定する
とあるF県でカレーをスパイスから作ったことがあるか調べるため街頭アンケートを行ったところ、通行人200人のうち7人が作ったことがあると回答した。
信頼係数95%で、カレーをスパイスから作ったことがあると回答した人の割合の信頼区間を求めよ。
Pythonを使って、二項分布で母比率pの95%信頼区間を推定するためには、SciPyのscipy.stats.binom.interval
関数を使います。
scipy.stats.binom.interval(alpha=A, n=B, p=C, loc=D)
interval関数のオプション | 意味 |
---|---|
alpha |
信頼区間(0.95=95%、0.99=99%など) |
n |
サンプルサイズ、試行回数 |
p |
標本比率 |
scipy.stats.binom|公式ドキュメント(英語)
今回は、信頼区間が0.95、試行回数が200、標本比率は7/200(0.035)であるので。
import numpy as np
import scipy as sp
alpha=0.95 # 信頼区間
n=200 # 試行回数
p=0.035 # 標本比率(成功回数を試行回数で割ったもの)
bottom, up = sp.stats.binom.interval(alpha=alpha, n=n, p=p, loc=0)
print('母比率pの95%信頼区間: {:.2f} < p < {:.2f}'.format(bottom/n, up/n))
したがって、F県でカレーをスパイスから作ったことがあると回答した人の割合は、95%の確率でおおよそ1%から6%だろうと推定することが出来ました。
妥当なサンプルサイズを決定する
次にやりたいことは、先程求められた『1〜6%』という割合の範囲を狭めたいことだと思います。
この範囲で意思決定に問題なければそのままでも良いのですが、もう少しだけ誤差の範囲を狭めたいと思いませんか?
いま、5%という開きがあるので、この開きを最大2%までにして、それを可能にする最小のサンプル数を求めてみましょう。
import numpy as np
import scipy as sp
# アンケートの有効回答数
alpha=0.95 # 信頼区間
p=0.035 # 標本比率(成功回数を試行回数で割ったもの)
sample=0.02 # 標準誤差の幅(求めたい母比例の幅(2%))
bottom, up = sp.stats.norm.interval(alpha, loc=0, scale=1)
print(pow((2*up*np.sqrt(p*(1-p)))/sample, 2))
したがって、誤差の範囲を2%までに狭めたい場合は、サンプル数が1298以上であれば良いことがわかりました。
さいごに
今回は、二項分布で母比率pの95%信頼区間を推定するために、PythonのSciPyライブラリのscipy.stats.binom.interval
関数を使って算出し、妥当なサンプルサイズを決定するために、scipy.stats.norm.interval
関数を使って算出しました。
- サンプル数nが大きくなると信頼区間の幅は狭くなり、より正確な推定ができる
- 標本比率が0.5のとき、最も信頼区間が広くなり、0.5から外れるごとに信頼区間は狭くなる
- 母比率の信頼区間の幅はに比例する
以上3点に気をつけて、意思決定に必要十分なサンプルサイズを定め、適切な区間推定を行いましょう。
それでは