• 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
    • 1
    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

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

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

    构建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))
    • 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))) # 竖线颜色
    • 1
    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")
    • 1
    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
    • 1
    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")
    • 1
    2022051121063564
    2022051121063564

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

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

    本文由 mdnice 多平台发布

  • 相关阅读:
    cube开源一站式云原生机器学习平台--volcano 多机分布式计算
    丹麦技术大学首创将量子计算应用于能源系统潮流建模
    在vite初始化的项目中安装scss,及scss的使用
    Docker 学习笔记(十):Centos7 中 Docker 部署 Redis 集群,打包 SpringBoot 微服务
    高并发服务优化篇:详解一次由读写锁引起的内存泄漏
    为什么说想到Python中的装饰器是天才
    Excel 线性回归函数 LINEST
    怎么强制粘贴密码进去
    点餐小程序实战教程01需求分析
    智能垃圾设备监测系统
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/126601816