一个标称 95% 的比例区间,在事件少、样本小时,实际能覆盖真值多少次?这个问题适合用模拟回答:我们亲手设定真实比例,再不断生成样本,看每次算出的区间是否包含它。实验开始前,把规则写清,结果才有可以解释的范围。

六个场景与数据生成

本次设计比较普通 Wald 区间与 Wilson score 区间。样本量 n 取 20、100、500,真实比例 p 取 0.05、0.5,交叉形成六个场景。前一个比例代表较少发生的事件,后一个位于比例范围中央;每个场景重复 10,000 次。

每次生成 n 个相互独立的伯努利观测:一次观测以概率 p 记为 1,否则为 0。把成功次数记为 k,样本比例为 k/n。两种区间必须用同一次生成的 k 计算,这样比较的是区间方法对同一份数据的反应。

两种区间的公式与端点处理

Wald 区间以样本比例为中心,加减 1.959963984540054 倍的估计标准误。Wilson 区间使用 score 公式,分母为 1+z²/n,中心为 (k/n+z²/(2n)) 除以该分母,半宽为 z×√[(k/n)(1−k/n)/n+z²/(4n²)] 再除以该分母。

保留 Wald 公式直接给出的端点,不在计算中临时裁到 0 和 1。是否做这种处理属于方法定义的一部分,应在运行前决定。k=0 或 k=n 时也正常记录结果,不删除这些恰好能暴露边界行为的重复。

覆盖率、平均宽度与模拟误差

每个场景跑完后计算两项表现指标。覆盖率逐次判断:某次重复中若区间下限≤p≤上限,就记为覆盖一次;覆盖次数除以 10,000,得到该方法在这个场景下的覆盖率估计。比如 n=20、p=0.05 时抽到 k=0,Wald 区间退化为 [0, 0],不含 0.05,这次计为未覆盖。Wilson 平均宽度取每轮重复的上限减下限,再对 10,000 个差值求平均。覆盖率和宽度要一起读:覆盖率接近目标之后,较窄的区间才能给出更集中的估计。

模拟本身也有抽样波动。覆盖率估计若为 0.95,10,000 次重复对应的 Monte Carlo 标准误约为 √(0.95×0.05/10000)=0.00218,也就是 0.218 个百分点。相差零点几个百分点时,应把这一精度一起摆出来。

复现设置与适用范围

本次实现使用 Python 标准库 random.Random(20261015),按照 n=20、100、500,再按 p=0.05、0.5 的顺序消耗随机数。结果文件记录 Python 版本、种子、每场景重复次数、两种覆盖率和 Wilson 平均宽度。固定种子之外,循环顺序和生成方法也会影响逐项复现。

Morris 等提出的 ADEMP 框架,要求同时说明目标、数据生成、估计对象、方法和表现指标。这份设计逐项对应它:估计对象是真实比例 p,数据由已知 p 生成,比较对象是两种区间。后续运行记录将展示六个场景的实际数字,并保留可复制的程序。

这项实验考察独立伯努利模型下的区间行为。若实际资料来自聚类抽样、重复测量或有漏报的记录,应把这些机制加入另一套场景,再研究相应方法;调整实验设计,就能让模拟回答另一个清楚的问题。

资料:Morris 等:模拟研究的 ADEMP 框架;NIST:二项比例置信区间;RSS:模拟数据的两种用途。