数值计算补充了第 28–29 章对样本估计与重复抽样性质的讨论。综合分析资料由一个明确的概率模型生成,每行对应一名独立的模拟参与者;仿真实验则在给定参数下重复抽样,以评价区间覆盖率与多重检验的错误率。前文“每组 200 人、成功 40/70 人”的手算例具有另一组设定,两类资料中的参数与数值分别属于各自的例题。
数值实验资料
| 文件 | 用途 |
|---|---|
| 完整学习包 | Markdown 笔记、数据、脚本、图与结果,可作为 Obsidian 仓库打开 |
| trial.csv | 固定种子生成的 1600 行模拟样本 |
| generation.json | 数据来源、种子、生成顺序与版本记录 |
| generate_data.py | 重新生成 CSV |
| analyze.py | 样本约束、列联表、条件模型与独立测试集预测评价 |
| simulate.py | 置信区间覆盖率与多重检验仿真 |
| create_figures.py | 从模型和结果文件重建教学 PNG/SVG 图 |
| requirements.txt | 本次运行使用的 Python 库版本 |
| analysis.json | 未四舍五入的分析结果、软件版本与 CSV 校验值 |
| simulation.json | 仿真与精确枚举结果、Monte Carlo 标准误 |
计算环境与运行方法
计算使用 Python 3.12。以下命令以解压后的 Probability-Statistics/practice 为当前目录,虚拟环境保存本次数值实验所用的软件依赖。
python -m venv .venvmacOS/Linux 激活环境:
source .venv/bin/activateWindows PowerShell 激活环境:
.venv\Scripts\Activate.ps1然后执行:
python -m pip install -r requirements.txt
python scripts/generate_data.py
python scripts/analyze.py
python scripts/simulate.py
python scripts/create_figures.py脚本内部的数据位置由脚本路径确定;上述相对命令以实践目录为起点。已下载的 CSV 可以直接用于分析,无须再次生成。固定随机种子确定的是给定算法与调用次序下的随机序列,因此相同结果还依赖生成顺序和软件版本。浮点运算库的差异可能反映在计算结果的末位。
以下结果采用 Python 3.12.14、NumPy 2.3.5、Pandas 2.2.3、SciPy 1.17.0、Statsmodels 0.14.6、Scikit-learn 1.8.0、Patsy 1.0.3、Matplotlib 3.10.8 计算。软件版本既关系到随机算法,也关系到具体检验和估计方法的实现。
数据字典与生成机制
| 字段 | 类型与编码 | 分析角色 |
|---|---|---|
id | 1–1600,不重复 | 识别个体;不进入回归 |
treatment | 0 对照、1 干预 | 随机分配的组别 |
age | 18–70 整数 | 基线年龄 |
baseline_visits | 非负整数 | 干预前访问次数 |
channel | search/social/referral | 基线来源渠道 |
outcome | 0 失败、1 成功 | 二元结局 |
固定种子 20261012,先生成组别、年龄、基线次数、渠道,再生成结局。组别按概率 .5 分配;年龄按 18–70 离散均匀分布生成;次数服从 Poisson(3);渠道概率为 .45/.35/.20。结局生成模型为
其中渠道效应 search=0、social=−.25、referral=.35。给定变量后,每人的结局按 Bernoulli 独立生成。真实的模拟条件 OR 为 ;单次拟合估计与该值有差异,是抽样波动的一部分。
生成模型规定了样本的结构:标识唯一,组别与结局为二元编码,年龄有给定范围,访问次数为非负整数,渠道取自三个类别,并且不存在缺失。analyze.py 以这些约束判断输入资料是否对应所声明的模拟样本;空资料、缺列或不符合约束的记录会使计算停止。这一判断针对模型设定与文件内容的一致性,现实研究中的资料来源、纳入排除、重复观测和缺失机制则属于更进一步的研究设计问题。
综合分析的数值结果
| 组别 | 人数 | 成功人数 | 样本成功比例 |
|---|---|---|---|
| 对照 | 839 | 202 | 24.08% |
| 干预 | 761 | 280 | 36.79% |
干预减对照的风险差为 12.72 个百分点,95% 大样本 Wald 区间 8.23–17.20 个百分点;RR=1.528(log 区间 1.313–1.779);粗 OR=1.836(log 区间 1.479–2.279)。四个期望频数均超过 200,未作连续性校正的 Pearson ,自由度 1,p=;Fisher 概率排序双侧 p=。
条件模型预先指定为 outcome ~ treatment + age + baseline_visits + C(channel),search 为渠道基准,使用全部 1600 行。模型收敛,干预的调整 OR 为 1.930(95% Wald 区间 1.545–2.410)。这是在该模型条件下比较干预与对照的优势比;粗 OR 与调整 OR 的差别本身不足以认定存在混杂。
经验标准化以样本的基线分布为参照。对同一名对象,保留基线变量,分别计算组别为 0 和 1 时的预测概率;再对各组设定下的预测取平均,得到标准化风险 .23896 和 .37027。它们是条件概率模型在同一基线分布上的平均,因而与直接比较两组观测比例具有不同构造。本次计算未给出这两个量的置信区间,其估计精度尚未由区间量化。相应解释见 二分类研究的综合分析。
独立测试集上的预测表现
个体预测评价采用按结局分层的 70%/30% 样本划分,其中 1120 行用于拟合,480 行用于独立测试。测试集 ROC-AUC=.6149,Average Precision=.4111,阳性率=.3021;模型的 Brier 分数为 .2043,以训练集阳性率作为恒定预测概率时,测试集 Brier 分数为 .2108。前两项数值描述排序关系,Brier 分数描述概率预测的均方误差。
预定阈值 .5 下,测试集真负 312、假正 23、假负 126、真阳性 19,敏感度约 13.1%。干预系数的检验讨论组别与成功概率的关系,个体预测则面对每个对象结局的随机性;因此,前者具有较强统计证据,并不保证后者具有较强区分能力。本例阈值 .5 对应较多假负,其决策含义取决于两类错误的成本。该阈值为预先给定,并未通过测试集反复选择。各指标的定义见 预测评价。
区间覆盖与多重检验的数值评价
二项模型下的区间覆盖事件,是某次抽样所得区间包含给定参数值。20,000 次模拟中这一事件的频率估计覆盖概率;枚举全部 并累加相应二项概率,则直接给出固定参数点的实际覆盖率。后一计算的精确性属于覆盖率的求和过程,Wald 与 Wilson 区间本身仍具有各自的近似性质。
| 参数点 | 方法 | 仿真覆盖率 | 枚举实际覆盖率 | 仿真标准误 |
|---|---|---|---|---|
| n=20,p=.05 | Wald | .6340 | .63894 | .00341 |
| n=20,p=.05 | Wilson | .9255 | .92452 | .00186 |
| n=100,p=.30 | Wald | .9500 | .95018 | .00154 |
| n=100,p=.30 | Wilson | .9361 | .93719 | .00173 |
在第一参数点,Wald 区间明显欠覆盖;第二参数点中,Wilson 的实际覆盖率同样低于名义水平,且两种方法的相对表现发生变化。因此,一个参数点上的覆盖率只描述该点的性质。对方法的评价还涉及参数范围内的覆盖变化、区间长度以及研究所关注的误差。
多重检验实验采用理想化模型:20 个零假设全部为真,p 值相互独立并服从均匀分布。未校正的族错误率(FWER)仿真值为 .64365,理论值为 .64151;Bonferroni 校正后的仿真值为 .05245,理论值为 .04883。后一仿真值的标准误为 .00158。有限次重复所得频率围绕其理论概率波动,故观测频率高于 .05 与理论错误率控制并不矛盾。推导与实验讨论见 第 29 章。
软件方法参考
实现细节可查 SciPy Fisher 精确检验、Statsmodels GLM、比例置信区间 和 Scikit-learn 模型评估。各实现所采用的区间算法、双侧检验定义和评价指标,分别对应正文讨论的统计方法。