基于R语言绘制列线图(Nomogram)
列线图简介
列线图(Alignment Diagram)也被称作诺莫图(Nomgram),是一种图形化展示临床预测模型的手段。在医学研究和临床实践中,研究者往往采用Cox回归、logistics回归等模型建立多因素回归模型对某些问题进行预测。根据各个影响因素对预测结果的影响(各个影响因素在回归模型中对应的系数),每个影响因素都能够得到对应的带有刻度值的线段对其取值进行赋分,这些线段以及表示所有因素得分总分和预测事件发生概率值映射关系的线段便构成了列线图。
列线图绘制
在列线图的绘制过程中,需要使用到rms和survival两个包,其中rms包用于提供回归模型,survival包用于提供数据。如果你在之前没有安装过这两个包,需要在RStudio的控制台(console)中分别输入:
install.packages("rms")
install.packages("survival")
绘制列线图的代码如下:
library(rms)
library(survival)
# 方便引用cancer中的数据,在attch(cancer)之后可以通过age代替cancer$age
attach(cancer)
# lrm 表示调用logistics回归函数,构建多因素回归模型
# ~左边也就是status表示因变量
# ~右边表示自变量,自变量之间通过+连接
mod = lrm(status~age+sex+ph.ecog+ph.karno+pat.karno+meal.cal+wt.loss)
# 指定各变量在列线图上的名称,这里只更改了age和sex
label(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文件加载数据。