写在前面在临床预测模型的研究中仅仅报告”模型的 AUC 为 0.85”是远远不够的。一个完整的模型评估需要从判别力Discrimination、校准度Calibration和临床实用性Clinical Utility三个维度进行全面考量。审稿人也越来越倾向于看到多角度的模型评估证据。clinpubr 提供了一站式的模型评估工具涵盖分类模型比较、时间依赖性 ROC、C-Index 计算和变量重要性可视化。本文将通过实战案例带你完成从模型拟合到全面评估的全流程。适用场景预测模型开发、模型比较研究、临床决策支持系统评估等。library(clinpubr)library(dplyr)library(survival)library(ggplot2)评估维度概览数据准备我们使用 NCCTG 肺癌数据集拟合三个复杂度递增的 Logistic 回归模型data(cancer, packagesurvival)cancer$dead- cancer$status2cancer$event- ifelse(cancer$status2,1,0)cancer_clean- cancer %% mutate(sexfactor(sex, labelsc(Male,Female)))%% na.omit()# 拟合三个复杂度递增的模型cancer_clean$pred_model1- predict( glm(dead ~ age sex ph.karno, datacancer_clean, familybinomial), typeresponse)cancer_clean$pred_model2- predict( glm(dead ~ age sex ph.karno pat.karno, datacancer_clean, familybinomial), typeresponse)cancer_clean$pred_model3- predict( glm(dead ~ age sex ph.karno wt.loss, datacancer_clean, familybinomial), typeresponse)knitr::kable(head(cancer_clean[, c(dead,pred_model1,pred_model2,pred_model3)]), caption模型预测值 vs 实际结局前 6 行)Table: 模型预测值 vs 实际结局前6行||dead|pred_model1|pred_model2|pred_model3||:--|:-----|-----------:|-----------:|-----------:||2|TRUE|0.7868731|0.7661243|0.7858287||4|TRUE|0.7436147|0.8215218|0.7434448||6|FALSE|0.9260244|0.8954047|0.9273628||7|TRUE|0.7052554|0.7566565|0.7049340||8|TRUE|0.7704063|0.7279677|0.7724185||9|TRUE|0.8207969|0.8021612|0.8203195|模型比较classif_model_compare() 使用多个指标AUC、准确率、灵敏度、特异度、PPV、NPV、PRAUC、Brier Score进行全面的模型比较并自动生成 ROC、PR、校准和 DCA 图model_comparison- classif_model_compare( datacancer_clean, target_vardead, model_namesc(pred_model1,pred_model2,pred_model3), save_outputFALSE )AssumingTRUEis[Event]andFALSEis[non-Event]knitr::kable(model_comparison$metric_table, caption模型性能比较)Table: 模型性能比较||Model|AUC|AUC_lower|AUC_upper|PRAUC|Accuracy|Sensitivity|Specificity|Pos Pred Value|Neg Pred Value|F1|Kappa|Brier|cutoff|Youden|HosLem||:--|:-----------|-----:|---------:|---------:|-----:|--------:|-----------:|-----------:|--------------:|--------------:|-----:|-----:|-----:|------:|------:|------:||3|pred_model3|0.684|0.594|0.774|0.820|0.581|0.50|0.787|0.857|0.381|0.632|0.217|0.185|0.777|0.287|0.985||1|pred_model1|0.684|0.594|0.774|0.817|0.557|0.45|0.830|0.871|0.371|0.593|0.203|0.185|0.786|0.280|0.967||2|pred_model2|0.684|0.590|0.777|0.821|0.605|0.55|0.745|0.846|0.393|0.667|0.232|0.182|0.765|0.295|0.353|可视化ROC 曲线——展示不同阈值下的灵敏度与特异度权衡model_comparison$roc_plotPR 曲线——对不平衡数据更灵敏的性能评估model_comparison$pr_plot校准图——评估预测概率与实际概率的一致性model_comparison$calibration_plot决策曲线分析DCA——评估不同阈值下的临床净获益model_comparison$dca_plot时间依赖性 ROC 分析对于生存结局时间依赖性 ROC 考虑了事件发生的时间。首先我们拟合 Cox 比例风险模型并获取风险评分library(survival)# 拟合 Cox 模型用于生存预测cox_model- coxph(Surv(time, event)~ age sex ph.karno, datacancer_clean)cancer_clean$risk_score- predict(cox_model,typerisk)现在我们可以在特定时间点评估模型time_roc_result- time_roc_plot( datacancer_clean, event_varevent, time_vartime, marker_varrisk_score, timesc(200,365), time_unitdays, save_plotFALSE )time_roc_result$time_rocTime-dependent-Roc curve estimated using IPCW(n167, without competing risks). Cases Survivors Censored AUC(%)t20048111867.32t36587493160.85Method usedforestimating IPCW:marginal Total computationtime:0secs.$plotC-IndexC-index一致性指数衡量生存模型的判别能力。解读标准0.5 无判别力0.7-0.8 可接受0.8 优秀。c_index- calc_cindex(cancer_clean,time,event,risk_score)警告信息: In calc_cindex(cancer_clean,time,event,risk_score):C-index islessthan0.5, possibly indicating a reversed relationship. Reversed to1- C-index.c_index C Index0.6243374变量重要性变量重要性列表可以从随机森林、梯度提升机等不同模型中获取。这里我们假设从某个模型中获得了变量重要性评分importance_scores- c( Age0.25, Sex0.15, Karnofsky0.30, WeightLoss0.12, Calories0.08, PatKarnofsky0.10)importance_plot(ximportance_scores, x_labVariable Importance)仅展示排名前 N 的变量并自定义样式importance_plot(ximportance_scores, x_labVariable Importance)importance_plot( ximportance_scores, x_labRelative Importance, top_n4, colorsteelblue)小结核心函数classif_model_compare()全面的模型比较含 ROC、PR、校准和 DCA 图time_roc_plot()生存结局的时间依赖性 ROC 分析calc_cindex()计算生存模型的一致性指数importance_plot()可视化变量重要性模型评估清单判别力AUC二分类或 C-index生存模型临床阈值处的灵敏度/特异度校准度校准图、Brier 评分临床实用性决策曲线分析相关阈值处的净获益外部验证在独立人群中的表现安装 clinpubrinstall.packages(“clinpubr”, dependencies TRUE)
企业数字化 ERP 产品动态
相关推荐
ComfyUI 文生图节点连线排查:从模型加载到保存图片 你兴致勃勃地在 ComfyUI 里搭好工作流,点了 Queue Prompt,结果要么右下角弹出“Prompt has no outputs”的提示,要么界面一片空白,什么也没生成。这种“点了没反应”的情况,十有八九不是模型坏了,也不是 ComfyUI 崩溃了,而是节点之间的连线出了问题——ComfyUI 不知道应… · 2026/11/5 6:48:32
K210部署20类视觉模型:从YOLO训练到kmodel量化落地 简介:面向K210边缘计算入门与实战的20类分类模型工程,基于Maix Dock开发板与MaixPy环境,借助NNCase将YOLO的tflite模型转换为板端可运行的kmodel,适合希望打通模型转换、部署与推理验证链路的开发者与学习者。压缩包共20个文件&am… · 2026/11/5 8:22:05
Web截图流式传输全链路实战:从Canvas到Nginx的7层穿透 1. 这不是“传个图”那么简单:截图流传递背后的真实战场很多人看到“截图文件流传递给后端”这个标题,第一反应是:“不就是前端截个屏,用 FormData 丢过去,后端接住存个文件吗?”——我去年在某跨平台系统重… · 2026/11/5 8:22:05
JMeter自动化测试结果输出工具类ReportCsv使用指南 1. 自动化结果输出工具类使用指南在自动化测试领域,结果收集与报告生成是验证测试有效性的关键环节。传统的JMeter结果树虽然直观,但在跨计划、多场景的测试中往往显得力不从心。ReportCsv工具类正是为解决这一问题而生,它允许测试工程师将不… · 2026/11/5 8:22:05
Edge浏览器书签栏多列显示实现方案 1. 项目概述:为什么Edge收藏夹默认不支持多列?这事儿真不是偷懒“EDGE浏览器的收藏夹实现多列显示”——这句话刚看到时,我第一反应是:这需求太真实了。不是因为炫技,而是因为每天打开Edge,点开书签栏那一排… · 2026/11/5 8:22:05
基于豆包大模型的自动化测试用例生成实践 1. 项目背景与核心价值去年在参与一个金融系统的自动化测试项目时,我深刻体会到手工编写测试用例的效率瓶颈。每次需求变更后,测试团队需要花费大量时间维护用例库,这直接影响了迭代速度。当时我就在思考:能否用AI技术自动生成测试… · 2026/11/5 8:22:05
10A太阳能充电控制器开源图纸:PWM直充与三段式充电调试 简介:面向电子爱好者与嵌入式开发者的10A太阳能充电控制器开源方案,包含完整原理图与固件源码,适用于中小型光伏系统的学习、复刻与二次开发。压缩包共390个文件、约1.99MB,以c/h源码与工程配置为主,辅以sch原理图、pc… · 2026/11/5 8:21:05
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38