vlambda博客
学习文章列表

基于R语言绘制列线图(Nomogram)

列线图简介

列线图(Alignment Diagram)也被称作诺莫图(Nomgram),是一种图形化展示临床预测模型的手段。在医学研究和临床实践中,研究者往往采用Cox回归、logistics回归等模型建立多因素回归模型对某些问题进行预测。根据各个影响因素对预测结果的影响(各个影响因素在回归模型中对应的系数),每个影响因素都能够得到对应的带有刻度值的线段对其取值进行赋分,这些线段以及表示所有因素得分总分和预测事件发生概率值映射关系的线段便构成了列线图。

列线图绘制

在列线图的绘制过程中,需要使用到rmssurvival两个包,其中rms包用于提供回归模型,survival包用于提供数据。如果你在之前没有安装过这两个包,需要在RStudio的控制台(console)中分别输入:  

install.packages("rms")

install.packages("survival")

绘制列线图的代码如下:

library(rms)library(survival)
# 方便引用cancer中的数据,在attch(cancer)之后可以通过age代替cancer$ageattach(cancer)
# lrm 表示调用logistics回归函数,构建多因素回归模型# ~左边也就是status表示因变量# ~右边表示自变量,自变量之间通过+连接mod = lrm(status~age+sex+ph.ecog+ph.karno+pat.karno+meal.cal+wt.loss)
# 指定各变量在列线图上的名称,这里只更改了age和sexlabel(age) = "年龄"label(sex) = "性别"
# 按照nomogram()函数的需求打包数据dd <- datadist(cancer)options(datadist = 'dd')
# 生成列线图nom <- nomogram(mod, lp=T, lp.at = seq(-3,4,by=0.5), fun=function(x) 1/(1+exp(-x)), funlabel = 'Predicted probability', fun.at = c(0.05,seq(0.1,0.9,by=0.1),0.95))
# 显示列线图plot(nom)


survival包中提供了一个有关肺癌患者生存率的数据集,数据集包括以下10个字段:

字段 含义
inst Institution code
time

Survival time in days

status

censoring status 1=censored, 2=dead

age

Age in years

sex

Male=1 Female=2

ph.ecog

ECOG performance score as rated by the physician. 0=asymptomatic, 1= symptomatic but completely ambulatory, 2= in bed <50% of the day, 3= in bed > 50% of the day but not bedbound, 4 = bedbound

ph.karno

Karnofsky performance score (bad=0-good=100) rated by physician

pat.karno

Karnofsky performance score as rated by patient

meal.cal

Calories consumed at meals

wt.loss

Weight loss in last six months

在本文中,使用status作为因变量,使用age、sex、ph.ecog、ph.karno、pat.karno、meal.cal以及wt.loss作为自变量,最终得到的列线图如下所示:

上述代码在实际使用中为了使用自己的数据,可以使用xlsx包从excel文件加载数据。