如何使用 bootstrap (R) 估计校准曲线

机器算法验证 引导程序 样条 回归策略 校准
2022-03-25 16:55:08

问题:我已经安装了一个概率模型(贝叶斯网络)来对二元结果变量进行建模。我想创建一个高分辨率校准图(例如样条曲线),通过自举进行过拟合校正。是否有计算这种曲线的标准程序?

注意事项:我可以通过训练/测试拆分轻松地做到这一点,但我不想丢弃任何数据,因为我的样本少于 20,000 个。所以我很自然地想到了自举。我知道在 Frank Harrell 的 rms 包中实现了一个这样的功能(校准),但不幸的是,我使用的模型不受包支持。

额外的问题:是否可以通过自举重新校准错误校准的模型?我问这个的原因是我试图通过重新校准模型

  1. 在训练/测试中拆分数据
  2. 将模型拟合到训练集
  3. 重新校准模型以训练集(使用三次样条)
  4. 在测试集上评估校准

以上述方式重新校准的模型在训练集上得到了完美的校准,但在测试集上没有那么多,这可能表明存在轻微的过度拟合。我还尝试进一步拆分测试集,在一次拆分时校准并在第二次拆分时评估校准。我得到了更好的结果(虽然仍然没有完全校准),但是集合变得非常小(~1000 个样本),因此校准不可靠

1个回答

在通过电子邮件与 Frank Harrell 教授讨论后,我设计了以下程序来估计乐观校正的校准曲线,部分基于他的生物统计学教程(医学统计学,第 15,361-387 卷(1996 年)):

  1. 在所有数据上拟合风险预测模型
  2. 将灵活的模型(带有样条和 logit 链接的游戏)拟合到模型的预测概率与结果,并在预测概率网格中查询游戏p=(0.01,0.02,...,0.99). 这是明显的校准曲线,我们称之为calapp
  3. 绘制带替换的引导样本,原始数据大小相同
  4. 在引导样本上拟合风险预测模型
  5. 使用 bootstrap 模型从bootstrap样本中预测概率,在预测概率和结果之间拟合一个 gam,并在预测概率网格中查询 gam(我们称这些点为calboot)
  6. 使用 bootstrap 模型从原始样本中预测概率,在预测概率和结果之间拟合一个 gam,并在预测概率网格处查询 gam,获得校准曲线 (calorig)
  7. 计算每个点的乐观度p像这样的网格
    Optimism(p)=calboot(p)calorig(p)
  8. 重复步骤 3-7 大约 100 次,平均每个点的乐观度p
  9. 像这样计算乐观校正校准
    calcorr(p)=calapp(p)<Optimism(p)>

重要提示:上述程序的灵感来自 Harrell 的工作和我与他的讨论,但所有错误都是我一个人的错误。