Cox回归列线图(Nomogram)制作详细教程

列线图是一种直观有效地展示Cox回归结果的一种方法。最有价值的是进行结局的预测,同时可以通过直线的长度来表示不同变量对结局的影响,以及变量的不同取值对结局的影响。正如下图中所示。

Cox回归列线图(Nomogram)制作详细教程
举例来说,一个男性胰腺癌患者,年龄是40岁,术中进行放疗,肿瘤位置再胰脏头部,胰胆管浸润为CH0,有腹膜转移,TNM分期在IV期。 根据上述条件,判断每个变量的得分,年龄40岁,points得分是10分,男性points得分是4分,依次累计各个变量的得分,得到Total points,然后就有对应3月、6月和1年的生存概率。复杂的模型公式变成了直观的图片,不仅仅医生可以看懂,病人家属也可以进行估测了。同时,可以看到术中有术中放疗和无术中放料其得分相差特别大,35分蹦到了80分。

  1. # 请先安装好各个相关包再运行代码
  2.  
  3.   # install.packages("VIM")
  4.  
  5.   library(foreign) # 读取spss格式数据
  6.  
  7.   library(survival)
  8.  
  9.   library(rms)
  10.  
  11.   library(VIM) # 包中aggr()函数,判断数据缺失情况
  12.  
  13.   if (!require("VIM")) {
  14.  
  15.   install.packages("VIM", repos="https://cran.rstudio.com/")
  16.  
  17.   library("VIM")
  18.  
  19.   }
  20.  
  21.   par(family = "STXihei") # 指定绘制图片中的字体
  22.  
  23.   # 数据来自张文彤《SPSS统计分析高级教程》
  24.  
  25.   url <- 'http://online.hyconresearch.com:4096/spss20/spss20advdata.zip'
  26.  
  27.   # 书中数据下载地址
  28.  
  29.   file <- basename(url)
  30.  
  31.   # 获取文件名 spss20advdata.zip
  32.  
  33.   if (!file.exists(file)) download.file(url, file)
  34.  
  35.   # 判断工作目录下是否有spss20advdata.zip文件,如果不存在则执行下载数据命令
  36.  
  37.   unzip(file) # 解压缩zip文件
  38.  
  39.   pancer <- read.spss('part4/pancer.sav') # 读取文件
  40.  
  41.   pancer <- as.data.frame(pancer)
  42.  
  43.   # Cox回归所需数据类型为数据框格式,将其转换为数据框格式
  44.  
  45.   aggr(pancer,prop=T,numbers=T)
  46.  
  47.   # 判断pancer各个变量的数据缺失情况,出现红色即有缺失,绘制列线图不允许缺失值存在
  48.  
  49.   pancer$censor <- ifelse(pancer$censor=='死亡',1,0)
  50.  
  51.   # Cox回归结局变量需为数值变量
  52.  
  53.   pancer$Gender <- as.factor(ifelse(pancer$sex=='男',"Male","Female"))
  54.  
  55.   # 更改变量名称以及变量取值
  56.  
  57.   pancer$Gendr <- relevel(pancer$Gender,ref='Female') # 设置参考组
  58.  
  59.   dd<-datadist(pancer)
  60.  
  61.   options(datadist='dd')
  62.  
  63.   coxm <- cph(Surv(time,censor==1)~age+Gender+trt+bui+ch+p+stage,x=T,y=T,data=pancer,surv=T)
  64.  
  65.   # 建立Cox回归方程
  66.  
  67.   surv <- Survival(coxm) # 建立生存函数
  68.  
  69.   surv1 <- function(x)surv(1*3,lp=x)
  70.  
  71.   surv2 <- function(x)surv(1*6,lp=x)
  72.  
  73.   surv3 <- function(x)surv(1*12,lp=x)
  74.  
  75.   plot(nomogram(coxm,fun=list(surv1,surv2,surv3),lp= F,funlabel=c('3-Month Survival','6-Month survival','12-Month survival'),maxscale=100,fun.at=c('0.9','0.85','0.80','0.70','0.6','0.5','0.4','0.3','0.2','0.1')),xfrac=.45)

maxscale 参数指定最高分数,一般设置为100或者10分

fun.at 设置生存率的刻度

xfrac 设置数值轴与最左边标签的距离,可以调节下数值观察下图片变化情况

列线图绘制常见问题

1. 如何筛选变量?

答: 与多变量统计分析变量筛选方法一样。列线图绘制纳入的变量即为coxm方程中的变量。

2. 如何更改图中变量名以及的变量值的名称,比如“sex”的"男"和"女"。

答: 列线图中出现的名称,即变量名和变量值名称,修改变量名和变量值名即可修改列线图中的名称。

3. 如何更改多分类变量的参考组

答:参考 pancer$Gendr <- relevel(pancer$Gender,ref='Female')

发表评论

匿名网友

拖动滑块以完成验证
加载中...