俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

必要なサンプルサイズを計算する(Python)

どーもこんにちは、ハヤトです。
アンケートやオンライン広告を計画するときに、 どれくらいのサンプルサイズがあれば妥当な検証結果を得られるか知りたい 、なんて時が結構あると思います。

今回は、必要なサンプルサイズをPythonで計算します(ちょっと無理やりですが・・・)

f:id:hayato1986:20120919164316j:plain:w400


サンプルサイズについて

アンケートの回答数が3人なら、結果は妥当でないと感覚的にわかります。
しかし、それじゃあ50だったら?100, 300, 1000だったら?

多くのサンプルサイズを集めようと、するとそれだけ費用も手間もかかります。かといって、少なすぎては意味のない結果を得ることになり、それまた失敗です。
そこで、十分なサンプルサイズの最小数を求める必要が出てきます。

前提条件を考える

統計的に妥当かどうか判断するために、まずは前提条件から設定していきましょう。
許容できる誤差の範囲、何%で信頼できるか、回答比率はどれくらいか、の3つが分かれば計算できます。

例:

許容誤差範囲:5% 信頼水準:95% 回答比率:0.5

その後、下記の計算式に当てはめると、必要サンプルサイズを計算できます。

計算式

n = (信頼水準)2 * 回答比率*(1-回答比率)/(標準誤差2)

ココらへんは以下URLが詳しいので、「回答比率」とかがピンと来ない人は見てみるといいかもしれません。

research-boutique.com

Python で計算する

では実際にPythonで計算していきましょう。ぶっちゃけ単発なら手計算するほうが早いですが、プログラムのつなぎ込み時に使うことはあるかもしれません。
Rには{pwr}という便利なライブラリがあるのですが、Pythonには無いので自作します。

from scipy.stats import norm, zscore

def sample_power_difftest(d, s, power=0.8, sig=0.05):
    z = norm.isf([sig/2])
    zp = -1 * norm.isf([power])
    n = s * ((zp + z)**2) / (d**2)
    return int(round(n[0]))

if __name__ == '__main__':

    n = sample_power_difftest(0.1, 0.5, power=0.8, sig=0.05)
    

print(n) #395

と言った感じです。割と数式丸暗記でもいいような気がしてきますね・・orz

もっと詳しく

こちらの本を読みましょう。(買ったけど読んでないなんて言えない)

サンプルサイズの決め方 (統計ライブラリー)

サンプルサイズの決め方 (統計ライブラリー)

オラッオラッ(ノ`Д´)ノ彡┻━┻