Cox回归列线图(nomogram)的多种绘制方法

获取更多R语言知识,请关注公众号:医学和生信笔记

医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

Cox比例风险模型也是多因素回归模型的一种,在考虑结局时,还加入了时间因素的影响。

列线图(Alignment Diagram),又称诺莫图(Nomogram图),用来把多因素回归分析结果(logistic回归和cox回归)用图形方式表现出来,将多个预测指标进行整合,然后采用带有刻度的线段,按照一定的比例绘制在同一平面上,从而用以表达预测模型中各个变量之间的相互关系。

根据模型中各个影响因素对结局变量的贡献程度(回归系数的大小),给每个影响因素的每个取值水平进行赋分,然后再将各个评分相加得到总评分,最后通过总评分与结局事件发生概率之间的函数转换关系,从而计算出该个体结局事件的预测值。

列线图在生信文章中都快被用烂了,但是大部分都是垃圾,纯粹是为了凑图而已。

今天给大家介绍4种cox回归列线图的绘制方法

cox回归列线图

library(survival)
library(rms)
## 载入需要的程辑包:Hmisc
## 载入需要的程辑包:lattice
## 载入需要的程辑包:Formula
## 载入需要的程辑包:ggplot2
## 
## 载入程辑包:'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
## 载入需要的程辑包:SparseM
## 
## 载入程辑包:'SparseM'
## The following object is masked from 'package:base':
## 
##     backsolve
rm(list = ls())

dim(lung)
## [1] 228  10
str(lung)
## 'data.frame': 228 obs. of  10 variables:
##  $ inst     : num  3 3 3 5 1 12 7 11 1 7 ...
##  $ time     : num  306 455 1010 210 883 ...
##  $ status   : num  2 2 1 2 2 1 2 2 2 2 ...
##  $ age      : num  74 68 56 57 60 74 68 71 53 61 ...
##  $ sex      : num  1 1 1 1 1 1 2 2 1 1 ...
##  $ ph.ecog  : num  1 0 0 1 0 1 2 2 1 2 ...
##  $ ph.karno : num  90 90 90 90 100 50 70 60 70 70 ...
##  $ pat.karno: num  100 90 90 60 90 80 60 80 80 70 ...
##  $ meal.cal : num  1175 1225 NA 1150 NA ...
##  $ wt.loss  : num  NA 15 15 11 0 0 10 1 16 34 ...

方法1

大多数情况下都是使用1代表死亡,0代表删失,这个数据集用2代表死亡。在这里没有影响,但有的R包会报错,需要注意!

dd <- datadist(lung)
options(datadist = "dd")

构建cox比例风险模型:

coxfit <- cph(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno,
              data = lung, x=T,y=T,surv = T
              )

# 构建生存函数,注意你的最大生存时间
surv <- Survival(coxfit) 
surv1 <- function(x) surv(365,x) # 1年OS
surv2 <- function(x) surv(365*2,x) # 2年OS

nom <- nomogram(coxfit,
                fun = list(surv1,surv2),
                lp = T,
                funlabel = c('1-year survival Probability',
                         '2-year survival Probability'),
                maxscale = 100,
                fun.at = c(0.95,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1))

然后就是画图:

plot(nom, 
     lplabel="Linear Predictor",
     xfrac = 0.2# 左侧标签距离坐标轴的距离
     #varname.label = TRUE, 
     tcl = -0.2# 刻度长短和方向 
     lmgp = 0.1# 坐标轴标签距离坐标轴远近
     points.label ='Points'
     total.points.label = 'Total Points',
     cap.labels = FALSE,
     cex.var = 1# 左侧标签字体大小
     cex.axis = 1# 坐标轴字体大小
     col.grid = gray(c(0.80.95))) # 竖线颜色
image-20220511205637972
image-20220511205637972

方法2

会弹出一个窗口。

library(DynNom)

coxfit <- cph(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno,
              data = lung, x=T,y=T,surv = T
              )

DynNom(coxfit,
       DNxlab = "Survival probability",
       KMtitle="Kaplan-Meier plot"
       KMxlab = "Time (Days)"
       KMylab = "Survival probability")
2022051120530012
2022051120530012

方法3

library(regplot)

coxfit <- cph(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno,
              data = lung, x=T,y=T,surv = T
              )

regplot(coxfit,
        plots = c("violin""boxes"), ##连续性变量形状,可选"no plot" "density" "boxes" "ecdf" "bars" "boxplot" "violin" "bean" "spikes";分类变量的形状,可选"no plot" "boxes" "bars" "spikes"
        observation = lung[1,], #用哪行观测,或者T F
        center = T# 对齐变量
        subticks = T,
        droplines = T,#是否画竖线
        title = "nomogram",
        points = T# 截距项显示为0-100
        odds = T# 是否显示OR值
        showP = T# 是否显示变量的显著性标记
        rank = "sd"# 根据sd给变量排序
        interval="confidence"# 展示可信区间
        clickable = F # 是否可以交互
        )
## Regression  coxfit cph formula:
## Surv(time, status) `~` age + sex + ph.ecog + ph.karno + pat.karno
## CI: 0.931(4.82,57.5)
## [[1]]
##   pat.karno Points
## 1        30     61
## 2        50     49
## 3        70     37
## 4        90     25
## 
## [[2]]
##   ph.karno Points
## 1       50      1
## 2       60     11
## 3       70     20
## 4       80     29
## 5       90     39
## 6      100     48
## 
## [[3]]
##   ph.ecog Points
## 1     0.0      0
## 2     0.5     17
## 3     1.0     33
## 4     1.5     50
## 5     2.0     67
## 6     2.5     83
## 7     3.0    100
## 
## [[4]]
##   sex Points
## 1 1.0     45
## 2 1.4     31
## 3 1.8     18
## 
## [[5]]
##   age Points
## 1  35     13
## 2  45     20
## 3  55     26
## 4  65     33
## 5  75     40
## 6  85     47
## 
## [[6]]
##    Total Points Pr( time < 267 )
## 1            60           0.0889
## 2            80           0.1225
## 3           100           0.1676
## 4           120           0.2271
## 5           140           0.3034
## 6           160           0.3981
## 7           180           0.5097
## 8           200           0.6324
## 9           220           0.7546
## 10          240           0.8609
## 11          260           0.9373
image-20220511205802208
image-20220511205802208

方法4

library(VRPM)
library(survival)

cox_fit <- coxph(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno,
              data = lung,model = T)

colplot(cox_fit,coloroptions = 3,filename = "cox.png")
2022051121063564
2022051121063564

获取更多R语言知识,请关注公众号:医学和生信笔记

医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

本文由 mdnice 多平台发布

  • 8
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cox回归是一种常用于生存分析的统计方法,用于研究事件发生时间与影响因素之间的关系。R语言是一种广泛使用的统计分析工具,它可以用于绘制Cox回归列线图。 要绘制Cox回归列线图,首先需要使用R中的survival包来进行生存分析和Cox回归分析。survival包提供了用于处理生存数据的函数,其中包括进行Cox回归的函数。 在进行Cox回归分析之后,我们可以得到每个影响因素的估计系数以及相应的标准误差。根据这些结果,我们可以计算出每个影响因素的风险比(Hazard Ratio)以及相应的置信区间。 接下来,我们可以使用R中的ggplot2包来绘制列线图。ggplot2是一个功能强大的绘图工具,它提供了灵活的图形语法,可以使图形的绘制变得更加简洁和美观。 在绘制Cox回归列线图时,我们可以将每个影响因素的风险比绘制为柱状图,并在柱状图上添加误差线表示置信区间的范围。此外,我们还可以使用颜色或其他图形属性来区分不同的影响因素。 最后,我们可以添加标题、轴标签和图例等细节,使图形更加清晰易懂。通过观察列线图,我们可以直观地了解每个影响因素对事件发生时间的影响程度,以及它们的置信区间。 总之,使用R语言中的survival包进行Cox回归分析,然后利用ggplot2包绘制列线图,可以帮助我们更好地理解影响因素对事件发生时间的影响。这样的图形可以为研究者提供直观、清晰的结果展示,进一步助力生存分析的解释和模型解读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值