from scipy.stats import norm, zscore
def sample_power_probtest(p1, p2, power=0.8, sig=0.05):
z = norm.isf([sig/2])
zp = -1 * norm.isf([power])
d = (p1-p2)
s =2*((p1+p2) /2)*(1-((p1+p2) /2))
n = s * ((zp + z)**2) / (d**2)
return int(round(n[0]))
p0 = 100/1000
p20 = 80/1000
p30 = 70/1000
p40 = 60/1000
p50 = 50/1000
Power for detecting 20% decrease in infections
sample_power_probtest(p0, p20)
3214
Power for 30%
sample_power_probtest(p0, p30)
1357
Power for 40%
sample_power_probtest(p0, p40)
722
Power for 50%
sample_power_probtest(p0, p50)
436