热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

r多元有序logistic回归_R语言Logistic回归模型深度验证以及Nomogram绘制

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

01

研究背景

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

02

案例研究

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

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

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

03

R代码及解读

library(rms) ###加载rms包###建立数据集y 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 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 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 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 

 str(dt) ##查看每个变量结构'data.frame': 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 ECG1 0 28 0 02 1 42 1 03 0 46 0 14 0  45   1   1

       第一步,构建模型。

#设定环境参数#ddist options(datadist='ddist')###logistic f $y~.,data=dt)   summary(f)   ##也能用此函数看具体模型情况,模型的系数,置信区间等

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

### nomogrampar(mgp=c(1.6,0.6,0),mar=c(2,2,2,2))  ##设置画布nomogram 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)

b4caab282b0fb4052050e24ef1b93eaa.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 "logit"))P1 'response') ##关键的一步来了。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 

ef1032039f1b7f81c79c0aff629e7eb6.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

参考文献

  1. 王炳顺等. 医学统计学与SAS应用(修订版). 上海交通大学出版社。

  2. 薛毅等.统计建模与R软件.清华大学出版社

作者介绍:医疗大数据统计分析师一枚,擅长R语言。

更多阅读:

如何进行变量筛选和特征选择(三)?交叉验证

如何进行变量筛选和特征选择(二)?最优子集回归

如何进行高维变量筛选和特征选择(一)?Lasso回归

31f5eb7fdaa4bc6ebb3f0d1a4c9c57a1.pngbing

3d0e07d7135c8c26c9ef763af9bdb519.png




推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
爱娟一辈子-_709
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有