ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R语言Logistic回归模型深度验证以及Nomogram绘制

2021-11-06 18:05:01  阅读:271  来源: 互联网

标签:45 校准 ## Nomogram 模型 验证 Logistic 绘制


R语言Logistic回归模型深度验证以及Nomogram绘制

小易学统计 小易学统计 互联网医疗统计师|自立,爱家人 15 人 赞同了该文章

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)  ##查看每个变量结构
'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 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='ddist')
###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)

该图的使用,本质上这是将逻辑回归模型可视化展示,方便临床快速判断。假设有个病人年龄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 = '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 

该函数可以一次性得到模型验证的多个指标和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 更多阅读

文章在公粽号:易学统计

文章里的干货更多哟

欢迎交流,欢迎提问

发布于 2020-07-19 逻辑回归 R(编程语言) 验证 ​ 赞同 15​ 4 条评论 ​ 分享 ​ 喜欢 ​ 收藏 ​ 申请转载 ​

标签:45,校准,##,Nomogram,模型,验证,Logistic,绘制
来源: https://blog.csdn.net/weixin_43156127/article/details/121182740

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有