from statsmodels.stats.proportion import proportion_confint
print('预估率可信区间的Python程序\nby Lokyshin\n')
# 样本量
n = 100
# 阳性事件数量
positive = 30
# 计算比例
p = positive / n
# 设定alpha=0.05,即95%可信区间
alpha = 0.05 # significance level for a 95% confidence interval
# 计算np和n(1-p)
np_value = n * p
n1_p_value = n * (1 - p)
# 判断使用哪种方法
if np_value > 5 and n1_p_value > 5:
# 如果np > 5 和 n(1-p) > 5,使用正态分布近似方法Normal Approximation Method
method = "Normal Approximation Method"
# 计算置信区间
ci_low, ci_up = proportion_confint(positive, n, alpha=alpha, method='normal')
ci_low, ci_up = round(ci_low, 3), round(ci_up, 3)
else:
# 否则使用Clopper-Pearson方法
method = "Clopper-Pearson Method"
# 计算置信区间
ci_low, ci_up = proportion_confint(positive, n, alpha=alpha, method='beta')
ci_low, ci_up = round(ci_low, 3), round(ci_up, 3)
print(f"样本量:{n}")
print(f"阳性数量:{positive}")
print(f"预期成功次数n*p:{round(np_value,3)}")
print(f"预期失败次数n*(1-p):{round(n1_p_value,3)}\n")
print(f"使用的方法是:{method}")
print('95% Confidence interval: [{}, {}]'.format(ci_low, ci_up))
print('\n感谢您使用本程序进行统计分析,再见。\n')