検出力分析 - パート II
前回は、実験を1回だけシミュレーションして p 値を計算しました。ここではその枠組みを使って統計的検出力(power)を求めます。実験の検出力とは、差が本当に存在するときに、処置群と対照群の差を検出できる能力のことです。一般には、検出力80%を目指すのがよい実務的な目安です。
本演習のウェブサイトの例では、滞在時間が10%増加した差を、検出力80%で検出できるようにするには、各バリアントに何人の訪問が必要かを知りたいとします。このために、まずは小さなサンプル(50)から始め、同じ実験を複数回シミュレーションして検出力を確認します。80%に到達したら終了します。到達しない場合はサンプルサイズを増やして再度試します。
この演習はコースの一部です
Pythonで学ぶ統計シミュレーション
演習の手順
time_spentの乱数変数では、sizeをタプルにして、形状がsample_size×simsになるように設定します。powerは、p 値が 0.05 未満(統計的に有意)となる割合として計算します。powerが80%以上ならbreakして while ループを抜けます。満たさない場合は、sample_sizeを 10 ずつ増やし続けてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
sample_size = 50
# Keep incrementing sample size by 10 till we reach required power
while 1:
control_time_spent = np.random.normal(loc=control_mean, scale=control_sd, size=(____,____)))
treatment_time_spent = np.random.normal(loc=control_mean*(1+effect_size), scale=control_sd, size=(____,____))
t, p = st.ttest_ind(treatment_time_spent, control_time_spent)
# Power is the fraction of times in the simulation when the p-value was less than 0.05
power = (p < 0.05).sum()/____
if ____:
____
else:
____ += ____
print("For 80% power, sample size required = {}".format(sample_size))