列线图什么鬼?听说它能把logistic结果变得更易看懂?!

更新时间:2023-07-14 03:09:20 阅读: 评论:0

列线图什么⿁?听说它能把logistic结果变得更易看懂?!
作者:麦⼦
转载请注明:解螺旋·临床医⽣科研成长平台
诺莫图(Nomogram)⼜称列线图(Alignment Chart),是把数学公式画成图的表达⽅法,我好像只能解释到这了……
不管了,先看个例⼦,来⾃Lancet Neurol. 2017 Jul;16(7):532-540.
这是收集了900多例轻度外伤性脑损伤(mTBI)患者的⼏个临床信息,如图第⼆⾏开始,包括教育程度、精神健康状况、饮酒史等等,⼀直到Total Points以上。结局指标为6个⽉后是否完全康复(GOSE评分≤7为不完全,GOSE=8为完全)。
然后做个logistic回归,建⽴模型,通过这⼏个指标预测不完全康复的风险。⼀般我们做logistic也就是想看看哪⼏个指标对结局影响⽐较⼤,但具体到患者个⼈来说,我有个⾼风险指标,但我怎么知道发⽣结局事件的风险是多少呢?
这时就可以通过这种图来计算,取得那⼏个指定的临床信息(⾃变量)后,从该⾃变量的坐标轴向顶部的points轴作⼀条垂直线,得到对应的point,第个⾃变量的point相加得到总分,在下⽅的total points上找到对应的值,向下边的linear predictor(线性预测值)再作⼀条垂直线,即得到发⽣结局事件的风险,更有临床应⽤的价值。
这个线性预测跟我们熟悉的风险概率不太⼀样,但其实可以转换的。
纪念斯隆凯特琳癌症研究所好像特别推崇这种⽅法,建⽴了好⼏种癌症的预测模型,⽽这种表达⽅式也渐渐在各⼤期刊流⾏起来。想学不?正好这⾥有⼀篇新鲜教程,由浙⼤医学院和克利夫兰医学基⾦会的⽼师们合作发表(Ann Transl
Med. 2017 May; 5(10): 211.),⼀起来研习⼀下吧。
载⼊所需要的包
library(rms)
这个包还需预先载⼊Hmisc、survival、Formula、ggplot2,如果系统没有⾃动载⼊,还请⾃⾏⼿动安装并载⼊。
构建⽰例数据
这段⼤概看⼀下知道数据是怎么来的就⾏了,反正你的实验数据是不需要构建的。
接下来看看⽣成的表格,数据结构是这个样⼦(显⽰部分):
背景填充年龄和乳酸⽔平为连续变量,性别为⼆元变量,卒中为分类变量,有四个level,分别为No、Mild、Moderate(未展⽰)、Severe。结局指标y为⼆元变量,1表⽰死亡。接下来⽤logistic回归,通过三个⾃变量预测死亡风险。
打包数据
ddist <- datadist(data)
options(datadist = 'ddist')
因为我们不仅是要做logistic回归,还要做列线图,这⼀步是专为列线图⽽设的。⽤datadist()定义各变量的分布,再把它们包到options()中。运⾏ddist可以看到输出结果:
包含各变量的描述信息,范围。⼀会作图就会默默地使⽤这些值。
什么万千
Logistic回归硬盘损坏
mod <- lrm(y~shock+lac*x+age,data)
“~”前⾯是结局,后⾯是⾃变量,各⾃变量⽤+相连。乳酸⼀项需要根据性别分层,所以乳酸和性别⽤*号,后⾯的data是⽤到的数据集。
设置列线图参数
nom <- nomogram(mod,
lp=T,
lp.at = q(-3,4,by=0.5),
fun=function(x) 1/(1+exp(-x)),
funlabel = 'Risk of Death',
fun.at = c(0.05,q(0.1,0.9,by=0.1),0.95),
conf.int = c(0.1,0.7))
第⼀⾏mod就是刚才logistic回归的模型名称。Lp选择True或Fal,是否显⽰线性预测坐标(linear predictor),lp.at则是设置其坐标轴的范围,此处就是从-3到4,每个刻度为0.5。
fun是要⾃⼰设⼀个函数,对lp进⾏转换,并建⽴⼀个新坐标轴。此处就⽤logit变换的反函数,将lp转换为我们熟悉的风险概率-。function(x) 1/(1+exp(-x))这⼀串,即使⽤function()构建⼀个⾃定义函数,括号中的x从lp的范围中取值,代⼊1/(1+exp(-x))中运算。
fun.at则是给新的坐标轴设置范围。本例中,lp的最⼩值是-3,对应的死亡风险是0.0474,所以起始值要⼤于这个值才能显⽰,不落在其范围内的都是不会显⽰的。
funlabel则是给上⾯转换好的新坐标轴起个名字,Risk of Death。其实有了这条坐标轴,上⾯lp那⾥也可以设为F,不显⽰了。但即使不显⽰,lp.at还是要设置,否则光设后⾯的fun.at似乎是⽆效的。
conf.int展⽰每个⾃变量坐标轴上各刻度的置信区间,这⾥显⽰两层置信区间,即0.1和0.7。默认是F,即不显⽰。其实好多⽂章都不显⽰,你可以多学⼀招。
出图
plot(nom,
lplabel = 'Linear Predictor',
fun.side = c(1,1,1,1,3,1,3,1,1,1,1),
label.every = 3,
conf.space = c(0.1,0.5),
不良青年
which='shock')
⽤plot()作图。nom是刚才定义的所有参数对象的名字,lplabel是lp坐标轴的名称,如果刚才lp选了F,这⾏也可以不要了。
fun.side是设置新坐标轴“Risk of Death”的坐标刻度显⽰在哪⼀边,1表⽰下⽅,3为上⽅。不写则默认下⽅,但当空间⽐较窄,刻度密集时,可以把⼏个刻度放到上⾯。刚才fun.at设了⼏个刻度,这⾥的fun.side就要设⼏个值。数不清的话,可以把fun.at那⼀⾏单独选中运⾏⼀次,然后运⾏length(fun.at)查看。
刚生完孩子吃什么好label.every也是这个意思,刻度每3个显⽰1个,拒绝密恐。
conf.space是设置刚才那些置信区间条在两条坐标轴之间的位置,两轴之间的距离为1,现在设成0.1~0.5之间,虽然设了看起来不精确,但不设会压成⼀团。
久久网视频
终于看到图了!
是不是⽐那个Lancet Neurology的例⼦还丰富⼀些^_^
黄芪红枣枸杞茶
列线图不仅能画出logistic模型,我们常⽤的cox模型、⽣存模型等等都可绘制,有兴趣的同学可参考原教程,应该能触类旁通了~
参考⽂献:
1.Early predictors of outcome after mild traumatic brain injury (UPFRONT): an obrvational cohort study
黄沙石2.Drawing Nomograms with R: applications to categorical outcome and survival data

本文发布于:2023-07-14 03:09:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1080656.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   坐标轴   设置   范围   风险   临床   模型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图