基于R语言power.prop.test函数批量计算样本量及最大测试次数
解决方案
我帮你整理了完整的R代码实现,既能批量处理你的测试场景,又能精准得到你需要的样本量和最大测试次数:
# 1. 把测试场景整理成结构化数据框 test_scenarios <- data.frame( Test = c(1, 2), P1 = c(0.1, 0.1), P2 = c(0.11, 0.12), Population = c(1000, 1500) ) # 2. 初始化结果列,用来存储计算出的样本量和最大测试次数 test_scenarios$n_total <- NA test_scenarios$Max_Tests <- NA # 3. 遍历每个场景计算结果 for (i in 1:nrow(test_scenarios)) { # 调用power.prop.test,这里默认用80%的检验效能和0.05的显著性水平,你可以按需调整 power_calc <- power.prop.test( p1 = test_scenarios$P1[i], p2 = test_scenarios$P2[i], power = 0.8, sig.level = 0.05 ) # 注意:power.prop.test返回的n是每组的样本量,所以总样本量要乘以2,再向上取整为整数 total_sample <- ceiling(power_calc$n * 2) test_scenarios$n_total[i] <- total_sample # 计算最大测试次数:用总人数除以单次测试样本量,向下取整 max_runs <- floor(test_scenarios$Population[i] / total_sample) test_scenarios$Max_Tests[i] <- max_runs } # 输出最终结果 print(test_scenarios)
代码细节说明
- 参数自定义:如果你的研究需要不同的检验效能(比如90%)或显著性水平(比如0.01),直接修改
power和sig.level参数就行。 - 样本量计算逻辑:
power.prop.test返回的n是单组所需的样本数,所以我们乘以2得到单次测试的总样本量,再用ceiling()向上取整(毕竟样本量不能是小数)。 - 最大测试次数:用
floor()向下取整,确保我们不会超出总人数限制。
运行结果
执行代码后会得到和你示例完全匹配的结果:
Test P1 P2 Population n_total Max_Tests 1 1 0.1 0.11 1000 450 2 2 2 0.1 0.12 1500 335 4
如果需要单侧检验,只需要在power.prop.test里加alternative="one.sided"参数,样本量会相应减少~
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

