第1章 代码库使用说明与 Agent 执行契约
现行主案例执行入口(2026-09-19)
Myocardial_Infarction_Complications的唯一执行根位于仓库 04_Cases/Myocardial_Infarction_Complications/,参数由analysis_config.R维护。按案例运行指南执行,不能复制本章技术Demo的变量、折数或数值替代主案例。
| 任务 | 主案例脚本 |
|---|---|
| 读取与描述、固定成员 | L01_Read_Check_Demo.R、L02_Data_Preparation.R |
| LASSO lambda.min按原始变量筛选、普通Logistic | L03_Feature_Selection_Logistic.R |
| 完整训练内筛选/调参的外层OOF | L04_Internal_Validation.R |
| 共享特征的RF/XGBoost/SVM与SHAP | L05_ML_Comparison_SHAP.R |
| 第5课集中纠错、Kappa冻结与留出对照 | L06_Data_Audit_T0_Correction.R |
| 单变量整体LRT与AIC机制展示 | Teacher_Selection_Demonstrations.R |
| 冻结系数列线图及验证 | Export_Classroom_Artifacts.R、Validate_Review_Run.R、Check_Separation.py |
| Python完整统计主链快速展示 | Export_Python_Raw.R、Python_Statistical_Workflow.py |
Python演示保留原始缺失与固定成员,在各训练范围独立筛查、插补和选择lambda.min,再按原始变量拟合普通Logistic,训练OOF最大Kappa阈值冻结后用于测试。使用scikit-learn 1.9的SAGA,与R glmnet内层实现不同,不要求数值完全一致;R维护正式四模型比较。完整脚本课前预跑,最后一课仅快速展示数据→描述→筛选→拟合→评价,课后可依据代码与浓缩讲义复现。
All111是异常教学反例;Corrected执行已确认的时间、稀疏/零格、无变异和极低观测比例筛查。旧版T0_102不是最终纠正版。不要用已全训练插补的矩阵做CV,不从测试选变量、调参或选阈值。具体统计边界见教学契约。
通用技术Demo与原有代码片段
以下Demo_R_Project及其数值属于独立技术示范,保留作为片段查阅;本节默认值不覆盖上面的主案例配置。
本章解决什么问题:这本 Code Library 是什么、怎么按任务检索、怎么运行配套 Demo、怎么把任务交给 AI Agent 执行、Prompt 契约怎么写、输入输出如何验收,以及六章分别管哪一段流程。读完本章,你应该能独立找到需要的章节与 Prompt,把一次分析任务完整交代给 Agent 并核对它的产物。
本章只讲”怎么用”,不讲统计方法本身。方法原理见课程讲义,Agent 与环境操作见工具手册;从第 2 章起,每一章针对一个具体任务给出代码、真实运行结果与核对方法。
Code Library 是什么
本书是一本按问题与方法检索的长期代码库,不是课程讲义的重排,也不是某次直播的笔记。它回答的是实际动手时的五个问题:该调用什么代码、该怎样向 Agent 描述任务、输入和输出是什么、结果如何检查、R 与 Python 之间如何迁移。
全书内容按四层分工维护,每层只放一类东西:
- 数值结果 →
Demo_R_Project/results/tables/(CSV)与Demo_R_Project/results/book_fragments/(脚本自动生成的摘要片段); - 图片 →
Demo_R_Project/results/figures/; - 完整代码 →
Demo_R_Project/R/与Demo_R_Project/python/; - QMD 正文 → 只负责解释、展示关键片段、索引产物、给出核对方法。
由此引出本书最重要的纪律:正文不手抄大表、不复制完整脚本。你在正文看到的每一组关键数字,都能追溯到某个 CSV、某个片段和生成它的脚本;每一段代码摘录,都来自 Demo_R_Project/ 里真实可运行的文件。
本书全部统计结果由 Demo_R_Project/ 真实运行生成并冻结。Demo 使用 R 内置数据 MASS::Pima.tr2(二分类结局),定位是技术演示:验证本书所述统计契约能被代码严格执行。它不是第三个正式教学 Case,不进入正式教学的结果口径。正式教学数据只有两套:Myocardial Infarction Complication(直播主案例)与 Early Stage Diabetes Risk Prediction(Mini Project),见正式案例目录。
怎么检索
按你手头的任务查下表,直接跳到对应章节;每章末尾的”复用时替换什么”告诉你换成自己的数据要改哪里。
| 任务 | 章节 | 配套脚本 | 配套 Prompt |
|---|---|---|---|
| 数据读取、字典、缺失核查 | 第2章 | Demo_R_Project/R/01_prepare_data.R |
01_数据读取与核查 |
| 清理、Table 1、固定划分 | 第2章 | Demo_R_Project/R/02_clean_table1_split.R |
02_清理Table1与划分 |
| LASSO 筛变量、Logistic 建模、Nomogram | 第3章 | Demo_R_Project/R/03_lasso_logistic_nomogram.R |
03_LASSO与Logistic |
| 内部验证、ROC / 校准 / DCA | 第4章 | Demo_R_Project/R/04_internal_validation.R |
04_完整内部验证 |
| 机器学习比较、SHAP、最终测试 | 第5章 | Demo_R_Project/R/05_ml_compare_final_test.R |
05_ML比较与最终测试 |
| Python 迁移 | 第6章 | Demo_R_Project/python/01_contract_migration_demo.py |
06_Python迁移 |
| 调用 Agent 的契约与验收 | 本章 | Demo_R_Project/run_all.R |
prompts/ 目录 |
其中 LASSO(Least Absolute Shrinkage and Selection Operator,最小绝对收缩与选择算子)负责筛变量,Logistic 回归负责重拟合出可解释的效应量,ROC(Receiver Operating Characteristic,受试者工作特征曲线)与 AUC(Area Under the Curve,曲线下面积)、校准、DCA(Decision Curve Analysis,决策曲线分析)负责评价——这条主线在第 3、4 章展开。
怎么运行 Demo
Demo_R_Project/ 是一个自包含的 R 项目,run_all.R 是唯一总入口。运行方法(摘自 Demo_R_Project/README.md):
在 Demo_R_Project 目录下执行
# 从本目录(Demo_R_Project)执行;R 4.5+,依赖包见 R/00_setup.R
Rscript run_all.R
# 每个 R 脚本也可单独从项目根运行(依赖前序脚本已落盘的产物)
Rscript R/04_internal_validation.R
# Python 迁移 Demo 在 R 全流程完成后可独立运行
python python/01_contract_migration_demo.pyrun_all.R 按固定顺序执行六个阶段脚本,最后做产物核验并写出运行摘要。阶段定义直接摘自 Demo_R_Project/run_all.R:
run_all.R(摘录:阶段清单)
stages <- file.path("R", c("01_prepare_data.R", "02_clean_table1_split.R",
"03_lasso_logistic_nomogram.R", "04_internal_validation.R",
"05_ml_compare_final_test.R", "06_export_python_bridge.R"))
timings <- vapply(stages, run_stage, numeric(1))所有分析参数——种子、结局变量名与正类、训练比例、交叉验证(Cross-Validation, CV)折数、LASSO 选 lambda 的规则、阈值规则——只存在于单一配置源 Demo_R_Project/config/config.R,任何脚本不另存第二份:
config/config.R(摘录)
config <- list(
project_id = "pima_demo",
dataset = "MASS::Pima.tr2",
seed = 20260918L,
outcome = "type",
positive_class = "Yes",
train_prop = 0.70,
outer_folds = 5L,
inner_folds = 5L,
lasso_lambda = "lambda.min",
threshold_rule = "youden"
)实际运行结果
本书引用的是一次真实运行的冻结产物(Demo_R_Project/results/run_summary.md,R 4.5.2,seed = 20260918):
- 样本 n = 300,事件 106(35.3%);划分 Training 211 / Holdout Test 89,outer 5 折、inner 5 折;
- 内部验证(Logistic,OOF)AUC = 0.8437(95% CI 0.7921–0.8954,DeLong),Brier = 0.1600;
- Holdout Test AUC = 0.7442(95% CI 0.6362–0.8521),仅评价一次;
- 产物计数:
artifact_manifest.csv共 52 条记录且全部status = ok——图 14 张、表 22 个、模型 4 个、教材片段 7 个、日志 2 份。
这里 OOF 指 out-of-fold(折外)预测:每一折的样本由”不含该折”的流程预测,是第 4 章内部验证的核心。这些数字只是 Demo 的能力证明,各章会用自己的片段展开细节;不要把它们当作任何正式案例的结论。
怎么调用 Agent
本书假设的执行方式是:你描述任务,Coding Agent 写代码并运行,你按契约验收。标准动作只有四步:
- 选 Prompt:按任务检索表找到对应章节,打开
prompts/里的同名文件; - 替换占位符:把
<数据路径>、<结局变量>等占位符换成你的实际值(见下文”复用时替换什么”); - 交给 Agent 执行:Agent 的基础操作见工具手册第 3 章与第 5 章;
- 按”验收”节核对:对照 Prompt 里的验收清单逐项检查产物,出错时的处理见工具手册第 6 章。
Prompt 把方法主线钉死(例如”LASSO 只用于筛选、Logistic 必须无惩罚重拟合”、“折内重新学习全部预处理”),Agent 只负责实现与执行。方法决策留在人手里,这正是 Demo 项目契约要点在提示词层面的翻版。
Prompt 契约
每个 Prompt 文件都可以独立复制给 Agent,固定为八个部分,顺序不可换:
- 背景:任务在项目流程中的位置与定位声明;
- 数据说明:输入文件、字典、结局与正类编码、成员清单等输入契约;
- 当前任务:这一阶段要完成什么、不做什么;
- 方法:钉死的方法主线与禁止事项;
- 输出:必须落盘的文件清单(路径、格式、关键列);
- 约束:统计纪律与工程纪律(只读原始数据、单一配置源等);
- 验收:逐条可核对的检查项;
- 暂停条件:命中即停止并报告、等待人工决定的情形。
这八段对应教学实施与分析规范的口径:背景 → 数据说明 → 当前任务 → 方法 → 输出 → 约束 → 验收,先列计划、只执行指定阶段、命中暂停条件才停。每个 Prompt 都逐字包含下面这句执行指令:
先检查输入并给出简要计划,然后继续执行指定任务;不要在计划后等待用户再次确认。只有输入冲突、字典冲突、必须改变方法或命中暂停条件时停止。
也就是说:Agent 先列计划让你看到它要做什么,但不等你二次确认就直接执行;只有输入冲突、数据字典冲突、必须改变方法或命中暂停条件时才停下来报告,由人做决定后再继续。
输入输出如何验收
验收分三层,全部可以机械核对,不依赖”看起来差不多”:
输入验收(执行前)
- 数据文件、数据字典存在且可读;结局变量与正类编码与说明一致;
- 若已有划分:成员 ID 在训练与测试间无交叠,fold 成员恰好划分训练集;
- 分析范围明确(本阶段只用哪部分数据)。
输出验收(执行后)
- 输出清单中的每个文件存在且非空——Demo 用
artifact_manifest.csv把 52 个产物逐行登记并核验,全部status = ok才算通过; - 关键数字可追溯:正文/报告引用的数字能在 CSV 或片段中找到同一值;
- 运行记录完整:日志与 session 信息已保存(Demo 对应
results/logs/run.log与results/logs/sessionInfo.txt)。
纪律验收(统计契约)
- 测试集未参与筛选、预处理学习、调参与阈值选择;
- 内部验证的每个 outer fold 内重新学习预处理与变量集合;
- 锁定产物(选模记录、锁定配置、模型文件)先于任何测试集访问落盘,测试后未返回重选;
- Python 端直接读取 R 导出的成员与契约,未重新抽样。
这套口径与教学实施与分析规范的交接与验收表一致:接收成果时核对版本、人数、事件编码、成员无交叠与分析范围。
六章如何导航
- 本章:使用说明与 Agent 执行契约;
- 第2章 R 数据读取、清理、Table 1 与固定划分:数据字典、类型与编码核查、缺失概览、清理日志、Table 1、训练/测试固定划分与 fold 成员清单;
- 第3章 LASSO、Logistic 与 Nomogram:仅训练集内的主线建模——LASSO 筛选、映射回原始变量、Logistic 无惩罚重拟合、OR 与置信区间、Nomogram;
- 第4章 完整内部验证与评价图:折内独立重学的完整流程验证,OOF 预测上的 ROC、校准与 DCA;
- 第5章 机器学习比较、解释与最终测试:Logistic、随机森林(Random Forest, RF)、XGBoost(eXtreme Gradient Boosting)、支持向量机(Support Vector Machine, SVM)同台比较,先锁后测,SHAP(SHapley Additive exPlanations)解释,Holdout Test 一次性评价;
- 第6章 Python 迁移与通用片段:Python 直接读取 R 导出的成员与特征契约,记录实现差异,不为对齐 AUC 反复调参。
常见错误
- 把 Demo 当正式案例:Demo 数字只证明流程可执行,任何正式分析必须用正式案例数据重跑;
- 让 Agent 重新划分数据:划分与 fold 成员一旦生成即冻结,后续阶段只读
split_manifest.csv/fold_manifest.csv,Python 端同样禁止重新抽样; - 用 Table 1 筛变量:描述与筛选分离,Table 1 只做描述;
- 先全训练集筛变量再做 CV:这是泄漏,内部验证必须折内重选,见第 4 章;
- 测完不满意再换一个模型:锁定先于测试,测试后不返回选优,见第 5 章;
- 把 run_summary 的数字手抄进新分析:换新数据后所有数字必须重新运行生成。
复用时替换什么
把本书流程搬到自己的数据时,改动集中在三处:
- Prompt 占位符:
<数据路径>、<结局变量>、<正类>、<训练比例>、<折数>等,按你的项目填; - 配置:Demo 中所有参数集中在
config/config.R,复用时只改这一处,不在脚本里另存第二份种子或折数; - 变量与契约:预测变量集合、因子水平与参照、缺失处理规则,按你的数据字典重新定义,并同步写进特征契约。
方法主线(LASSO → 原始变量 → Logistic 重拟合;折内重学;先锁后测;Python 读 manifest)不替换——它是本书要复用的东西本身。
相关资源
- 课程讲义(Book 1):概念与判断,对应章节为数据准备、Logistic 建模、模型评价、机器学习与最终评价;
- 工具手册(Book 2):Agent 上手与任务交接;
- prompts/README.md:六个可直接复制的阶段 Prompt 及使用说明;
Demo_R_Project/README.md:Demo 的运行方法与统计契约要点;- 正式教学案例:Myocardial Infarction Complication 与 Early Stage Diabetes Risk Prediction。