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

如何用R pwr包结合嵌套for循环开展多比例卡方效能分析

循环仅输出单值的原因

两个核心问题:

  • 每次循环迭代都会直接覆盖effect.size3变量,没有预留存储结构保存每一组参数的计算结果,循环结束后只会保留最后一组参数(P0=0.7、差值=0.2)对应的计算值。
  • 代码中没有对计算结果做输出或写入操作,循环过程中不会自动打印每一步的计算值。
    另外你提到预期得到20组结果属于计数误差:4个基准比例各对应4个差值,一共16组对比,和你列出的具体比例对照设置完全匹配。
正确计算代码

提前创建空结果表存储所有迭代的输出,循环中逐行追加计算结果,最后可直接得到结构化的样本量表,代码如下:

library(pwr)

# 定义基础参数
P0 <- seq(0.1, 0.7, by = 0.2) # 基准发生比例
diff_set <- c(0.05, 0.1, 0.15, 0.2) # 基准与实测比例的差值

# 初始化空结果表
sample_size_res <- data.frame(
  baseline_p = numeric(0),
  actual_p = numeric(0),
  p_diff = numeric(0),
  required_n = integer(0)
)

# 嵌套循环遍历所有参数组合
for (p0 in P0) {
  for (d in diff_set) {
    p1 <- p0 + d
    # 计算二分类比例比较的卡方效应量w
    effect_w <- ES.w1(
      p0 = c(p0, 1 - p0), # 零假设下的二分类概率
      p1 = c(p1, 1 - p1)  # 备择假设下的二分类概率
    )
    # 计算效能80%、检验水准0.05下的所需样本量
    calc_n <- pwr.chisq.test(
      w = effect_w,
      df = 1, # 2*2列联表卡方自由度为1
      sig.level = 0.05,
      power = 0.8
    )$N
    # 结果追加到结果表,样本量向上取整
    sample_size_res <- rbind(
      sample_size_res,
      data.frame(
        baseline_p = p0,
        actual_p = p1,
        p_diff = d,
        required_n = ceiling(calc_n)
      )
    )
  }
}

# 查看完整结果
print(sample_size_res)
补充说明
  • 样本量结果做了向上取整,符合实际研究招募的要求,不会出现非整数样本。
  • 如果需要调整检验效能、检验水准,直接修改pwr.chisq.test中对应参数即可。
  • 计算逻辑匹配你列出的所有比例对照场景,结果表中每一行对应一组比例对比的所需样本量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:39:15