列线图简介
列线图(Alignment Diagram),又称诺莫图(Nomogram图),它是建立在多因素回归分析的基础上,将多个预测指标进行整合,然后采用带有刻度的线段,按照一定的比例绘制在同一平面上,从而用以表达预测模型中各个变量之间的相互关系。它的基本原理,简单的说,就是通过构建多因素回归模型(常用的回归模型,例如Cox回归、Logistic回归等),根据模型中各个影响因素对结局变量的贡献程度(回归系数的大小),给每个影响因素的每个取值水平进行赋分,然后再将各个评分相加得到总评分,最后通过总评分与结局事件发生概率之间的函数转换关系,从而计算出该个体结局事件的预测值。列线图将复杂的回归方程,转变为了可视化的图形,使预测模型的结果更具有可读性,方便对患者进行评估。正是由于列线图这种直观便于理解的特点,使它在医学研究和临床实践中也逐渐得到了越来越多的关注和应用。
列线图案例展示
列线图结果解释
解释:假设有一个患者,治疗方式是Resection,肿瘤大小是3-5,复发部位是Intrahepatic,多处复发是No,复发时间是1-2,复发时AFP是>200,复发时albumin-bilirutinl grade是II, III,抗病毒治疗是Yes。在图上找到各个点,对应上方Point的值,将所有的值相加(本处只是讲解大概的值,具体数值应该在模型中计算:Total Points=0+42+20+0+4+31+22+0=119)。在Total中我们可以看到,119对应的2年和5年的生存率分别约为0.80和0.68(本处是大致值,由于没有具体模型参数,无法给出精确值)。这就进一步说明Nomogram图的内容,本质就是对模型各个参数的一个直观展示。
如何绘制列线图?
方法1:nomogram函数绘制 (适用于rms:psm函数返回的回归结果)
rm(list = ls())
# install.packages("survival")
# install.packages("rms")
library(survival)
library(rms)
#载入并查看数据集
data("lung") #status中1代表活着,2代表死了. sex中male=1,female=2
head(lung)
str(lung)
#关键步骤:按照nomogram要求“打包”数据
ddist <- datadist(lung)
options(datadist="ddist")
#构建COX模型,绘制诺莫图
res.cox <- psm(Surv(time, status) ~ age+sex+ph.ecog+ph.karno+pat.karno, data = lung,dist='lognormal')
surv <- Survival(res.cox) # 构建生存概率函数
# function(x) surv(365, x)#计算1年事件发生概率
# function(x) surv(1825, x)#计算5年事件发生概率
nom.cox <- nomogram(res.cox,
fun=list(function(x) surv(365, x),
function(x) surv(1825, x)),
funlabel=c("1-year Survival Probability", "5-year Survival Probability"),
maxscale=10,
fun.at=c(0.01,seq(0.1,0.9,by=0.2),0.95,0.99))
#maxscale参数指定最高分数,一般设置为100或者10分
#fun.at设置生存率的刻度
plot(nom.cox)
结果如下:这类结果过于简陋!
方法2:regplot函数绘制
regplot包中的regplot()函数可绘制较为美观的nomogram。但是,它目前只接收coxph()、lm()和glm()函数返回的回归对象。
rm(list = ls())
install.packages("regplot")
library(regplot)
library("survival")
library("survminer")
#载入并查看数据集
data("lung")
head(lung)
str(lung)#该数据将所有变量都转换为数值型,包括性别(1,2表示),分期(1,2,3,4表示)等。
#建议将多分类变量字符化,因子化
#如sex,若保持其数值型,图会将sex作为连续性数值展示(会出现0.5,1.5的数值),这有悖于常理.
#因此,为了合乎逻辑,对于多分类变量要注意转化
#lung$sex=as.factor(lung$sex) #直接将数字型因子化,默认从小到大
lung$sex <- as.factor(ifelse(lung$sex==1,"male","female"))#将数值转化为真实属性后再因子化
#构建cox模型
res.cox <- coxph(Surv(time, status) ~ age+sex+ph.ecog+ph.karno+pat.karno, data = lung)
#status中1代表活着,2代表死了. 默认数值较小者为结局,表明该模型以生存为结局事件
#绘制列线图, #因子化分类变量每个协变量用方框表示,数值型变量以连续性坐标轴表示。
nom1<-regplot(res.cox, clickable=TRUE,
points=TRUE, rank="sd",failtime = c(180,365),prfail = T)
#指定标记的样本行
nom2<-regplot(res.cox,observation=lung[3,], clickable=TRUE,
points=TRUE, rank="sd",failtime = c(180,365),droplines=T,prfail = T,
other=(list(bvcol="red",sq="green",obscol="blue")))
#res.cox表示模型,可以是广义线性模型(glm),线性(lm),生存分析(cox比例风险模型)
#observation指定某个患者各协变量的取值映射到相应的得分,并计算总得分
#failtime = c(180,365)计算其在180和365天的累计事件发生概率
#本案例中lung是个生存类数据,status=1代表构建的是生存模型,因此prfail = T
#参考:https://mp.weixin.qq.com/s/WpRnX7YdF-Jv3oQqYaFMVA
如下图,regplot绘图更加美观,可以比较灵活的定义细节。
可任意标记想突出的患者在列线图上的分值分布,及事件发生风险概率!
网络参考
https://mp.weixin.qq.com/s/BWpy3F-nEKXCdVXmY3GYZg
https://mp.weixin.qq.com/s/gpR6IlS4XGaE8xngS7bQrQ
往期回顾
TCGA+biomarker——常见结果展示
TCGA+biomarker——Sample基线表
TCGA+biomarker——单因素Cox回归
TCGA+biomarker——多因素Cox回归
TCGA+biomarker——Cox回归森林图
更多内容可关注公共号“YJY技能修炼”~~~