You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的pwr包计算2:1分组比例的最优样本量?

2:1分组比例的样本量计算方案

用pwr包自带的pwr.2p2n.test函数

pwr.2p.test只适用于1:1等比例分组,不等比例的情况直接用同包的pwr.2p2n.test就行,这个函数支持指定两组不同的样本量。步骤如下:

  1. 先算效应量h,和你之前的操作一致
  2. 通过设定两组样本量的比例(比如试验组:对照组=2:1,那n2=2*n1),用求解函数找到满足power要求的样本量

示例代码:

library(pwr)
# 计算效应量h
h_val <- ES.h(p1 = 0.6, p2 = 0.5)

# 定义函数,输入n1(对照组样本量),返回当前power与目标0.8的差值
calc_power_diff <- function(n1) {
  test_result <- pwr.2p2n.test(h = h_val, n1 = n1, n2 = 2*n1, sig.level = 0.05, alternative = "greater")
  return(test_result$power - 0.8)
}

# 用uniroot求解满足条件的n1
n_control <- uniroot(calc_power_diff, interval = c(1, 1000))$root
n_treatment <- 2 * n_control

# 输出结果
cat(sprintf("对照组样本量:%d,试验组样本量:%d", round(n_control), round(n_treatment)))

用R基础包的power.prop.test函数

基础包自带的power.prop.test也能搞定,不需要额外装包,逻辑和上面类似:

# 定义求解函数
find_n <- function(n1) {
  test <- power.prop.test(p1 = 0.6, p2 = 0.5, n1 = n1, n2 = 2*n1, sig.level = 0.05, alternative = "greater")
  return(test$power - 0.8)
}

n_control <- uniroot(find_n, interval = c(1, 1000))$root
n_treatment <- 2 * n_control

cat(sprintf("对照组样本量:%d,试验组样本量:%d", round(n_control), round(n_treatment)))

额外提示

  • 如果你不想写求解函数,也可以手动调整n1的值,看pwr.2p2n.test返回的power是否接近0.8,不过用uniroot更精准
  • 要是需要更灵活的样本量计算,也可以试试presize包,但上面两个方法已经完全能满足你的需求

内容的提问来源于stack exchange,提问作者Ayoubinsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:40