如何用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
相关产品推荐
相关产品推荐

