诊断标志物评估与 ROC 曲线
诊断标志物评估回答的是:某个指标能多准确地区分有病和没病、某亚型和其他亚型。ROC 曲线把所有可能截断值下的灵敏度和 1 减特异度连成曲线,曲线下面积 AUC 表示随机抽一个病例和一个对照时,病例得分更高的概率,0.5 相当于随机猜测。完整评估还包括 AUC 置信区间、最佳截断值及对应的灵敏度、特异度和预测值,多个标志物的 AUC 比较,以及联合模型的验证。数据可以是血清蛋白、代谢物、基因表达、甲基化或影像特征。
什么时候用
- 评估单个血清、组织或分子指标区分疾病与对照的能力
- 比较新标志物与现有标志物的诊断效能
- 为连续指标确定截断值并报告灵敏度、特异度
- 构建并验证多个标志物的联合诊断模型
- 评估标志物区分疾病亚型或良恶性的能力
- 检验标志物在不同分期、性别或中心中的表现是否稳定
不适合的情况
- 预测未来事件发生时间,应使用生存分析与预后模型
- 极少阳性样本时只报告 AUC,忽视精确率与置信区间
- 在同一数据上选截断值后直接报告其灵敏度和特异度
需要准备的数据
- 标志物测量值
- 每个样本一个连续或有序数值;多个标志物各占一列,缺失值需说明处理方式
- 金标准分组
- 以病理、临床诊断等参考标准确定的二分类标签,需写明标准来源和判定时间
- 协变量与来源信息
- 年龄、性别、中心、批次等,用于分层分析和检查混杂
- 验证集
- 独立中心或时间段的样本,用于检验截断值和联合模型能否外推
分析步骤
- 1
明确诊断问题
写清楚要区分的人群,例如早期癌症对良性病变,而不是癌症对健康人。对照的选择决定了 AUC 的实际意义,越接近真实就诊人群越有价值。
- 2
描述与组间比较
先画箱线图或小提琴图,比较两组分布并做检验。注意分布形状和离群值,检查测量值是否随批次、中心或采样时间出现系统偏移,有偏移时需先校正或分层。
- 3
绘制 ROC 曲线
用 R 包 pROC 的 roc 或 Python scikit-learn 的 roc_curve 计算,指明哪一类为阳性及取值方向。用 ci.auc 以 DeLong 法或 bootstrap 给出 AUC 的 95% 置信区间。
- 4
选择截断值
在训练数据上按 Youden 指数或预设的灵敏度、特异度要求选截断值,例如筛查场景优先保证灵敏度。报告该截断值下的灵敏度、特异度、PPV 和 NPV 及置信区间。
- 5
比较多个标志物
同一批样本上的多个 AUC 用 DeLong 检验比较(pROC 的 roc.test)。只比较 AUC 不够,还要看在关注的特异度范围内哪个标志物灵敏度更高。
- 6
构建联合模型
用逻辑回归等方法组合多个标志物,得到每个样本的预测概率后再画 ROC。用交叉验证或独立验证集评估联合模型,并报告校准情况和相对单个标志物的提升。
- 7
独立验证
把训练集确定的截断值和模型原样应用到验证集,报告 AUC、灵敏度和特异度。验证集性能明显下降,说明存在过拟合或两组人群构成差异,需分析原因。
关键参数与决策
阳性类与方向
pROC 默认根据两组中位数自动判断方向,可能在验证集被反向设置。应显式指定对照组、病例组和 direction 参数,保证训练与验证使用同一方向。
截断值标准
Youden 指数让灵敏度与特异度之和最大,是通用选择;筛查强调低漏诊时固定高灵敏度,确诊强调低误诊时固定高特异度,应根据应用场景预先确定。
AUC 置信区间方法
DeLong 法计算快,适用大多数情况;样本量小或分布特殊时可用 bootstrap,重抽样次数通常设为数千次,并固定随机种子。
类别不平衡
阳性样本比例很低时,ROC 和 AUC 可能看起来很好,但 PPV 很低。此时应补充精确率-召回率曲线,并按目标人群的患病率计算预测值。
样本量规划
根据预期 AUC、病例对照比例和可接受的置信区间宽度估算所需样本量。病例数太少时 AUC 置信区间很宽,即使点估计较高,也不足以支持诊断价值的结论。
常见错误
- 在同一数据上选截断值又报告其性能:截断值针对该数据最优,灵敏度和特异度被高估,需在验证集重新评估。
- 病例为确诊晚期患者、对照为健康人:两组差别远大于实际就诊场景,AUC 被严重高估,即谱偏倚。
- 把 AUC 低于 0.5 当作无效指标:多半是方向设反,翻转后 AUC 等于 1 减原值,应检查阳性类设置。
- 用病例对照研究的比例计算 PPV 和 NPV:预测值依赖患病率,需按目标人群患病率重新换算。
- 多个标志物两两比较不校正:比较次数多时假阳性增加,应预先指定主要比较或做多重校正。
- 联合模型只报告训练集 AUC:变量越多训练 AUC 越高,不经交叉验证或外部验证的提升没有意义。
结果怎么看
ROC 曲线图
横轴 1 减特异度,纵轴灵敏度,对角线代表随机。曲线越靠左上越好,图例标注 AUC 及置信区间。多条曲线在关注区段交叉时,不能仅凭 AUC 高低判断谁更适用。
诊断效能表
列出 AUC、截断值、灵敏度、特异度、PPV、NPV 及置信区间。置信区间很宽说明样本量不足;截断值在验证集上的性能应单独列出。
AUC 比较结果
DeLong 检验给出两条相关 ROC 曲线 AUC 差值和 P 值。AUC 差异很小但 P 值显著时,需判断差异是否有实际意义。
联合模型校准曲线
比较预测概率与实际阳性比例,理想情况下各点贴近对角线。校准差的模型即使 AUC 很高,给出的概率也不能直接用于判断个体风险。
分层 ROC 结果
按分期、性别、年龄段或中心分别计算 AUC。各亚组 AUC 相近说明标志物表现稳定;若只在晚期亚组表现好、早期亚组接近 0.5,说明该指标对早期诊断价值有限。
和相近方法怎么选
ROC 曲线与精确率-召回率曲线
ROC 不受患病率影响,适合比较标志物的内在区分能力;PR 曲线反映在实际阳性比例下的精确率,更适合阳性很少的场景。不平衡数据中两者应同时报告。
诊断 ROC 与时间依赖 ROC
诊断 ROC 针对当下的二分类状态;时间依赖 ROC 用于生存数据,评估在某时间点前是否发生事件,需处理删失。判断是否患病用前者,预测预后用后者。
AUC 比较与 NRI、IDI
在已有标志物基础上加入新指标,AUC 常只提高一点。NRI 和 IDI 关注重新分类是否更准确、预测概率差是否增大,可作为补充,但同样需在验证集计算。
常见问题
AUC 多少算好?
常见经验划分是 0.7 到 0.8 为可接受,0.8 到 0.9 为较好,0.9 以上为很好。但这只是粗略参考,还要看置信区间、对照人群是否贴近实际,以及与现有标志物相比是否有提升。
ROC 曲线的最佳截断值怎么确定?
最常用 Youden 指数,即灵敏度加特异度减 1 取最大的点,pROC 中可用 coords 设定 best 获取。也可根据应用场景固定灵敏度或特异度。截断值应在训练集确定,再到验证集检验。
两个 AUC 怎么比较显著性?
同一批样本上测的两个标志物,ROC 曲线是相关的,用 DeLong 检验,pROC 的 roc.test 可直接计算。若来自不同样本,则用非配对的比较方法。报告时同时给出 AUC 差值和置信区间。
多个标志物怎么联合画 ROC?
常用逻辑回归把多个标志物组合,得到每个样本的预测概率,再以概率画 ROC。变量较多时可用带惩罚的回归。联合模型必须经交叉验证或外部验证,否则 AUC 提升可能来自过拟合。
AUC 小于 0.5 是什么意思?
大多数情况是方向设反了,即标志物在对照组更高,而软件把较高值当作阳性。翻转方向后 AUC 等于 1 减原值。若确认方向无误仍低于 0.5,说明该指标区分能力比随机还差。
在 Codar 里怎么做
在 Codar 里上传标志物测量值与金标准分组表并说明应用场景。Codar 确认方案后评估诊断生物标志物性能:绘制 ROC 曲线,计算 AUC 及置信区间,选择截断值并给出灵敏度、特异度和预测值,比较多个标志物和联合模型。交付 ROC 图、效能表、报告和可复现脚本。仅供科研,不替代临床诊断。
这是 150 例胰腺癌和 120 例慢性胰腺炎的 CA19-9 与 3 个候选蛋白数据,帮我画 ROC、比较 AUC,并评估联合诊断模型