如何确保R语言rbinom()函数返回至少一次成功?
确保rbinom返回至少一次成功的方法
当调用 rbinom(5015, size=2, prob=1/5000) 时,确实存在返回全0的可能(经计算该概率约13%),以下是几种确保至少一次成功的实用方法:
方法1:循环重抽(最直观)
生成样本后检查是否全0,若全0则重新生成,直到得到符合要求的结果:
# 可选:设置随机种子保证结果可复现 set.seed(123) result <- rbinom(5015, size=2, prob=1/5000) # 只要结果全0就重新生成 while(all(result == 0)) { result <- rbinom(5015, size=2, prob=1/5000) }
由于全0概率不高,大部分情况下一次生成就能满足要求,仅少数情况需要重抽。
方法2:强制指定一个成功样本
先随机选一个位置,强制该位置出现成功(成功次数按原二项分布的概率比例生成),其余样本保持原分布:
# 随机选一个要设置成功的位置 success_idx <- sample(1:5015, 1) # 生成初始样本 result <- rbinom(5015, size=2, prob=1/5000) # 给选中位置生成符合原分布的成功次数(1或2) success_count <- sample(c(1, 2), 1, prob = c(2*(1/5000)*(4999/5000), (1/5000)^2)) result[success_idx] <- success_count
这种方法无需循环,一次生成即可满足要求,仅对单个样本的分布做微小调整,整体与原分布差异极小。
补充说明
如果场景允许,也可以通过增加样本量 n 或单次试验次数 size 来降低全0的概率,但如果必须严格保留原参数,上述两种方法是更直接的解决方案。
内容的提问来源于stack exchange,提问作者Sky Scraper
相关产品推荐
相关产品推荐

