from rpy2.robjects import pandas2ri
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
print('单样本率优效性检验的样本量计算 - Python程序 \nby Lokyshin\n')
# 请注意,该程序是python调用R的pwr.p.test实现。
# reference: https://cran.r-project.org/web/packages/pwr
p1=0.5
p2=0.8
alpha=0.05
power=0.90
alternative="two.sided"
# 打开pandas转r dataframe的功能
#pandas2ri.activate()
# 载入需要的R包
pwr = importr('pwr')
# 设定R代码
#使用二项枚举方法计算
r_codes =f'''
# 计算效应量
h <- ES.h({p2}, {p1})
# 使用 if 语句根据 alternative 参数进行条件判断
if ("{alternative}" == "two.sided") {{
# H0: p2 = p1, Ha: p2 != p1
results <- pwr.p.test(h = h, sig.level = {alpha}, power = {power}, alternative = "two.sided")
}} else {{
if ({p2} > {p1}) {{
#H0: p2 <= p1, Ha: p2 > p1
results <- pwr.p.test(h = h, sig.level = {alpha}, power ={power}, alternative = "greater")
}} else {{
#H0: p2 >= p1, Ha: p2 < p1
results <- pwr.p.test(h = h, sig.level = {alpha}, power = {power}, alternative = "less")
}}
}}
# 打印结果
n <- ceiling(results$n)
R_result_str = paste0("使用二项枚举方法计算,试验组样本量为: ", n)
print(R_result_str)
print(results)
'''
# 执行R代码
ro.r(r_codes)