京公网安备 11010802034615号
经营许可证编号:京B2-20210330
受试者工作特征曲线(ROC 曲线)是评估诊断模型或预测指标效能的核心工具,但其原始曲线常因数据离散性呈现 “锯齿状”,影响视觉解读与诊断阈值判断。本文系统阐述 ROC 曲线平滑的原理与必要性,以 SPSS(26.0 及以上版本)为工具,从数据准备、参数设置、平滑曲线生成到结果解读,提供全流程操作指南,并通过医学诊断案例验证方法有效性,同时梳理常见问题与解决方案,为科研人员、数据分析从业者提供可直接落地的 ROC 曲线优化方案。
ROC 曲线以 “假阳性率(1 - 特异性)” 为横轴、“真阳性率(敏感性)” 为纵轴,通过连续调整诊断阈值,绘制不同阈值下的效能点并连接而成,曲线下面积(AUC)用于量化指标的诊断能力(AUC 越接近 1,效能越强)。其核心应用场景包括:
原始 ROC 曲线由样本数据直接生成,当存在以下情况时易出现 “锯齿状波动”:
样本量较小(n<100):数据分布离散,阈值变化时敏感性 / 特异性骤升骤降;
指标离散化:如等级资料(如疼痛评分 1-5 分)、整数型检测值(如白细胞计数);
极端值干扰:少数异常数据导致曲线局部 “突跳”。
锯齿状曲线不仅影响视觉美观,更可能误导诊断阈值选择(如最佳阈值对应点模糊),因此需通过平滑处理优化曲线形态,同时保留真实的诊断效能信息。
SPSS 采用 “非参数平滑法”(默认基于局部加权回归 LOESS 或移动平均),通过以下逻辑优化曲线:
对原始 ROC 曲线上的离散点,按横轴(1 - 特异性)排序;
以每个点为中心,构建局部数据窗口,计算窗口内点的加权均值(近点权重高、远点权重低);
用平滑后的均值点替代原始点,重新连接形成连续曲线;
在使用 SPSS 调整 ROC 曲线前,需满足以下数据前提:
结局变量(状态变量):二分类变量(如 “患病 = 1 / 未患病 = 0”“违约 = 1 / 正常 = 0”);
预测变量(检验变量):连续型或有序分类变量(如血糖值、风险评分);
样本量要求:建议 n≥50(样本量过小会导致平滑结果不稳定);
以 SPSS 26.0 版本为例,分 4 个核心步骤实现 ROC 曲线平滑,操作界面截图与参数说明如下:
SPSS 数据需为 “宽格式”,每行代表 1 个样本,包含 2 个关键变量:
| 变量类型 | 变量名称 | 数据示例(医学诊断场景) | 说明 |
|---|---|---|---|
| 状态变量 | disease | 1(患病)、0(未患病) | 二分类结局,需定义 “1 = 事件发生” |
| 检验变量 | blood_sugar | 5.2、7.8、10.1(mmol/L) | 连续型预测指标 |
打开 SPSS,点击菜单栏【文件】→【打开】→【数据】;
选择数据文件(支持.sav、.xls、.csv 格式),确认变量类型(状态变量设为 “数值 - 名义”,检验变量设为 “数值 - 连续”);
点击【分析】→【描述统计】→【描述】,检查检验变量是否存在极端值(如血糖 > 30 mmol/L),若有需通过 “筛选个案” 剔除或修正。
点击菜单栏【分析】→【ROC 曲线】(SPSS 22 及以上版本直接在 “分析” 菜单,旧版本需在【分析】→【回归】→【ROC 曲线】中查找);
弹出 “ROC 曲线” 对话框,确认界面包含 “检验变量”“状态变量”“选项”“图表” 4 个核心区域(如图 1)。

图 1:SPSS 26.0 ROC 曲线分析主对话框
将 “检验变量”(如 blood_sugar)选入右侧 “检验变量” 框;
将 “状态变量”(如 disease)选入右侧 “状态变量” 框;
点击 “状态变量的值”,在弹出窗口中输入 “1”(代表 “事件发生”,如患病),点击【继续】。
点击对话框右下角【选项】,弹出 “ROC 曲线:选项” 窗口;
在 “曲线” 区域,勾选 “平滑曲线”(SPSS 默认使用 LOESS 平滑法,无需手动选择算法);
勾选 “显示 AUC 值”“95% 置信区间”(用于验证平滑后效能是否稳定);
点击【继续】返回主对话框。
点击主对话框【图表】,勾选 “ROC 曲线”“图例”“坐标参考线”(参考线为对角线,代表 AUC=0.5 的无价值指标);
选择 “曲线颜色”(建议检验变量设为蓝色,平滑曲线设为红色,便于区分);
点击【继续】→【确定】,执行分析。
SPSS 输出 3 类核心结果,需重点关注:
ROC 曲线检验表:查看平滑前后 AUC 值(如原始 AUC=0.892,平滑后 AUC=0.887,误差 < 1%,说明平滑有效);
ROC 曲线图:红色平滑曲线无锯齿,蓝色原始曲线有波动,两条曲线趋势一致(如图 2);
最佳阈值表:平滑后曲线的 “敏感性 + 特异性最大” 对应阈值更明确(如血糖 = 7.2 mmol/L,原始曲线阈值模糊)。

图 2:原始 ROC 曲线(蓝色锯齿状)与平滑 ROC 曲线(红色连续型)对比
双击结果窗口中的 ROC 曲线图,进入 “图表编辑器”;
可调整曲线粗细(双击曲线→【线条】→【宽度】设为 2pt)、坐标轴标签(如横轴改为 “1 - 特异性(假阳性率)”);
点击【文件】→【导出】,选择导出格式(建议.png 或.eps,前者用于报告,后者用于论文排版),设置分辨率 300dpi。
数据集:某医院 200 例体检者数据,包含 “是否糖尿病(disease:1 = 是,0 = 否)” 和 “空腹血糖值(blood_sugar:mmol/L)”;
目标:通过 SPSS 生成平滑 ROC 曲线,确定最佳诊断阈值,评估血糖值的诊断效能。
数据导入:确认 200 例数据无缺失,血糖值范围 3.9-16.8 mmol/L,无极端值;
ROC 设置:检验变量 = blood_sugar,状态变量 = disease,状态值 = 1,勾选 “平滑曲线”(α=0.5);
结果核心指标:
平滑前 AUC=0.903(95% CI:0.861-0.945);
平滑后 AUC=0.898(95% CI:0.855-0.941);
最佳阈值 = 7.0 mmol/L(敏感性 = 87.2%,特异性 = 82.5%)。
平滑后曲线无锯齿,最佳阈值从原始曲线的 “6.8-7.2 mmol/L” 明确为 7.0 mmol/L,便于临床应用;
AUC 误差仅 0.5%,说明平滑未扭曲血糖值的真实诊断能力;
结合临床指南(糖尿病诊断标准:空腹血糖≥7.0 mmol/L),平滑后的阈值与指南完全一致,验证了结果的实用性。
样本量不足处理:n<50 时,建议先扩大样本量,或使用 “Bootstrap 法”(在【选项】中勾选)增强平滑稳定性。
避免过度平滑:α<0.2 时,曲线过度平缓,可能掩盖真实的效能拐点(如某阈值处敏感性骤升);
避免平滑不足:α>0.8 时,曲线仍有明显锯齿,需降低 α 值(如 α=0.6)重新分析。
结合临床 / 业务逻辑:平滑后的最佳阈值需符合实际场景(如医学指标需参考临床指南,商业指标需参考成本效益)。
| 常见问题 | 原因分析 | 解决方案 |
|---|---|---|
| 找不到 “平滑曲线” 选项 | SPSS 版本过低(<22.0)或模块未安装 | 升级至 SPSS 26.0 及以上,或重新安装 “回归模块” |
| 平滑后曲线与原始曲线趋势不一致 | 检验变量存在极端值,或 α 值设置过小 | 剔除极端值(如血糖 > 20 mmol/L),α 调整为 0.5 |
| 输出结果无 AUC 值 | 未在【选项】中勾选 “显示 AUC 值” | 重新进入【选项】,勾选 “AUC 值” 与 “95% CI” |
| 平滑曲线出现 “平台段” | 检验变量存在大量重复值(如多数血糖 = 5.6 mmol/L) | 对检验变量进行分组(如每 0.2 mmol/L 为一组)后再分析 |
SPSS 通过内置的非参数平滑算法,可高效将锯齿状 ROC 曲线优化为连续平滑曲线,且操作流程简单、结果可靠。核心在于:先确保数据符合 “二分类状态变量 + 连续型检验变量” 的前提,再通过【ROC 曲线】→【选项】勾选 “平滑曲线” 完成配置,最后结合 AUC 误差与实际场景验证结果。未来随着 SPSS 版本升级,平滑算法将进一步优化(如支持自定义平滑方法),但当前方法已能满足多数科研与业务需求,为 ROC 曲线的精准解读提供有力支持。
[1] SPSS Inc. IBM SPSS Statistics 26.0 User Guide [M]. IBM Corporation, 2019.(SPSS 官方指南,详细说明 ROC 平滑算法)
[2] Zweig M H, Campbell G. Receiver-Operating Characteristic (ROC) Plots: A Fundamental Evaluation Tool in Clinical Medicine [J]. Clinical Chemistry, 1993, 39 (4):561-577.(ROC 曲线经典理论文献)
[3] 方积乾。卫生统计学(第 8 版)[M]. 人民卫生出版社,2017.(国内权威教材,阐述 ROC 曲线在医学中的应用)

数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在大数据时代背景下,海量行业数据亟需通过专业化工具挖掘潜在价值,辅助企业业务决策、优化运营模式、规避经营风险。Python凭借 ...
2026-08-28SQL是数据分析领域最基础、最核心的工具,承担着取数、清洗、统计、分层、归因的全流程工作。不同于单纯的语法练习,实战化SQL数 ...
2026-08-28 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-08-28随着新零售模式的快速普及,零售行业从传统的“货品驱动”全面转向“用户驱动”。门店交易数据、线上消费记录、浏览轨迹、复购频 ...
2026-08-27在数据分析、爬虫采集、接口开发、数据归档等场景中,JSON与CSV是两种使用率最高的数据存储格式。JSON为键值对结构化格式,适配 ...
2026-08-27 很多数据分析师每天都在计算指标、制作报表,但当被问到“什么叫指标数据元”“指标数据标准包含哪些核心维度”“指标数据质 ...
2026-08-27在数据分析工作中,时间序列是最常见的数据类型之一,订单时间、日志时间、交易时段、统计周期等数据均离不开时间处理。原始数据 ...
2026-08-26在数据分析与数据预处理工作中,原始数据普遍存在录入错误、系统故障、偶然极值等问题,极易产生异常数据。异常数据会严重干扰数 ...
2026-08-26 很多数据分析师能熟练写SQL、做透视表,但当被问到“数据是从哪里来的?经过哪些加工才进入数据仓库?ETL具体做了什么?”时 ...
2026-08-26在数理统计与数据分析领域,多因素方差分析与线性回归模型是研究变量关系、因素影响、数据差异规律的两大核心工具。二者均属于经 ...
2026-08-25数据分析的核心价值不在于数据计算与图表制作,而在于清晰、精准、有逻辑地输出结论、支撑业务决策。日常数据分析报告普遍存在结 ...
2026-08-25 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-08-25平均数是数据分析、数理统计与日常运算中最基础、最常用的统计量,核心作用是浓缩一组数据的整体水平、刻画数据集中趋势。在众多 ...
2026-08-24在MySQL数据库中,InnoDB存储引擎作为主流事务型引擎,默认事务隔离级别为可重复读(Repeatable Read,RR),这与SQL Server、Or ...
2026-08-24 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-08-24 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-08-21在数据分析与数据可视化工作中,直方图是展示数据分布特征、离散程度、集中区间的核心图表,能够直观呈现数值数据的频次分布规律 ...
2026-08-20在数据分析领域有一句核心准则:垃圾数据进,垃圾数据出。数据清洗是数据分析、数据建模、数据可视化之前的必经前置工序,也是保 ...
2026-08-20 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-08-20在Python数据分析与数据清洗工作中,Pandas是最核心的数据处理库,DataFrame是结构化数据的标准存储格式。在实时数据采集、循环 ...
2026-08-19