热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

r语言结构方程模型可视化_R语言Logistic回归模型深度验证以及Nomogram绘制

01研究背景本章将常用的基于R语言实现二元Logistic回归模型临床预测模型的构建和验证,以及诺曼图的绘制记录下来,更为复杂的生存分析中的Cox回归将

98fba0badc4f0fb241dd702a1174ecff.png

01 研究背景

本章将常用的基于R语言实现二元Logistic回归模型临床预测模型的构建和验证,以及诺曼图的绘制记录下来,更为复杂的生存分析中的Cox回归将在后续章节介绍。临床预测模型的思路总结如下:①明确临床问题,确定科学假设。②查找文献,确定预测模型的研究思路。③确定模型中结局变量。④确定模型中的预测因子。⑤构建模型,计算模型预测值。⑥模型区分度评估。⑦模型校准度评估。⑧临床实用型DCA评估。

02 案例研究

本文采用的数据是上海交大出版<医学统计学及SAS应用>第十一章数据。预测因子有性别、年龄和高血压等级,结局变量为是否患病。本文研究目的探讨患病的危险因素构建并验证模型。因数据量少且只有一个数据集,故只用此数据集建模,并验证,若有更多外部数据,最好拿外部数据来验证模型。

临床研究一般有提供多个危险因素,首先做单因素的筛选,具体筛选方法,见公众号之前的文章。筛选完的危险因素用来构建预测模型。

具体分析步骤是,①基于这些变量构建模型。②绘制Nomogram图。③计算模型ROC曲线面积(区分度)和绘制校准曲线并检验(校准度,U检验),该步骤用神包rms一步实现。接下来直接上代码。

03 R代码及解读

library(rms) ###加载rms包#
##建立数据集
y <- c(0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,1,0,1)
age <- c(28,42,46,45,34,44,48,45,38,45,49,45,41,46,49,46,44,48,52,48,45,50,53,57,46,52,54,57,47,52,55,59,50,54,57,60,51,55,46,63,51,59,48,35,53,59,57,37,55,32,60,43,59,37,30,47,60,38,34,48,32,38,36,49,33,42,38,58,35,43,39,59,39,43,42,60,40,44)
sex <- c(0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1)
ECG <- c(0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,2,1,0,0,2,2,0,0,2,2,0,1,2,2,0,1,0,2,0,1,0,2,1,1,0,2,1,1,0,2,1,1,0,2,1,1,0,2,1,1)
dt <- data.frame(y,age,sex,ECG) ##把数据集设置成数据框结构

str(dt) ##查看每个变量结构
&#39;data.frame&#39;: 78 obs. of 4 variables:$ y : num 0 1 0 0 0 1 1 1 0 0 ...$ age: num 28 42 46 45 34 44 48 45 38 45 ...$ sex: num 0 1 0 1 0 1 0 1 0 1 ...$ ECG: num 0 0 1 1 0 0 1 1 0 0 ...head(dt) ##查看数据框前几行y age sex ECG
1 0 28 0 0
2 1 42 1 0
3 0 46 0 1
4 0 45 1 1

第一步,构建模型。

#设定环境参数#
ddist <- datadist(dt)
options(datadist=&#39;ddist&#39;)
###logistic
f <- lrm(dt$y~.,data=dt) ##注意此处使用lrm()函数构建二元LR
summary(f) ##也能用此函数看具体模型情况,模型的系数,置信区间等

第二步:绘制nomogram图,注意该函数里面的参数设置。

### nomogram
par(mgp=c(1.6,0.6,0),mar=c(2,2,2,2)) ##设置画布
nomogram <- nomogram(f,fun=function(x)1/(1+exp(-x)), ##逻辑回归计算公式fun.at = c(0.001,0.01,0.05,seq(0.1,0.9,by=0.1),0.95,0.99,0.999),#风险轴刻度funlabel = "Risk of Death", #风险轴便签lp=F, ##是否显示系数轴conf.int = F, ##每个得分的置信度区间,用横线表示,横线越长置信度越abbrev = F#是否用简称代表因子变量)
plot(nomogram)

f3f5bcc26ca486302b3a5895fe61b1f6.png

该图的使用,本质上这是将逻辑回归模型可视化展示,方便临床快速判断。假设有个病人年龄45岁,性别为男,高血压正常,Nomogram用法是在age变量上找到其值为45的刻度,然后画垂线投影到最上方的points刻度尺上,找到找到对应的分值为50分,同理找到sex为1的分值约为37分,ECG为0对应分值为0,将这三个因素的points值加起来总分87。下一步在下面的Total Points刻度尺上找到87,向下方的Risk of Death做垂线,87对应的值在0.4和0.5之间,约为0.48,说明该患者患病风险预测概率值为48%。

重头戏来了,第三步:利用rms包对该模型进行验证。

##模型验证
##以原数据集为验证集
f.glm <- glm(y~.,data=dt,family = binomial(link = "logit"))
P1 <- predict(f.glm,type = &#39;response&#39;) ##获得预测概率值
##关键的一步来了。
val.prob(P1,y) ##这个函数前面放概率值,后面芳结局变量Dxy C (ROC) R2 D 5.675676e-01 7.837838e-01 3.164825e-01 2.578779e-01 D:Chi-sq D:p U U:Chi-sq 2.111448e+01 NA -2.564103e-02 -3.552714e-13 U:p Q Brier Intercept 1.000000e+00 2.835189e-01 1.885480e-01 -4.335689e-09 Slope Emax E90 Eavg 9.999998e-01 1.157412e-01 6.085456e-02 3.492462e-02 S:z S:p
-2.762507e-03 9.977958e-01

76686f71f6d0af96eb4f6f455f1d729e.png

该函数可以一次性得到模型验证的多个指标和P值,并绘制出校准曲线,功能很强大了。

首先看代码中返回的结果,Emax是模型与理想模型的最大偏移量,Eavg是模型与理想模型的最小偏移量,这两个值越小越好,越小则说明模型与理想模型越接近。U是指Unreliability test 即U检验,用来判断构建的模型是否能通过校准度检验,其对应的P值在最下面,S:p,当S:p>0.05说明通过校准度检验。C(ROC)是ROC面积,该面积和C-index指数本质上是一样的,只不过一个对应LR,一个对应COX。

通过R计算的结果可看到,本模型通过校准度检验,p=0.998>0.05,Roc面积为0.784具有良好的区分能力,总体来说,该模型的预测能力是很优秀的~~。

04 总结

本文介绍了Logistic回归模型的深度验证和Nomogram的绘制及应用。需要注意的是:一个预测模型的好坏除了内部验证,还要看外部验证,即它的外推性是否好。本文由于数据量少,也没有获取外部验证集,仅用原始数据集作为训练集和验证集。

05 更多阅读

文章在公粽号:易学统计

文章里的干货更多哟

欢迎交流,欢迎提问



推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 阅读本文大约需要3分钟。微信8.0版本的发布带来了许多令人振奋的新功能,如烟花特效和改进的悬浮窗,引发了用户的热烈反响。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
author-avatar
dtd3795290
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有