分享

Nomogram图不会画?看了这篇,小白也能轻松看懂搞定

 夏夜悠凉 2020-06-16

一文教会你轻松学会Nomogram图的绘制

大家好,我是阿琛。在日常的临床工作以及研究中,对于某个疾病,无论是肿瘤研究,还是非肿瘤研究,我们常听到患者提出这样的问题,“我的检查结果是这样的,那么最终患病的概率有多少,生存情况又是怎样的呢”。当然,生信分析,作为医学研究的三大主线之一,亦是如此最终的结局无外乎两种,是发病率是多少二是预后生存情况如
当我们通过数据挖掘,或者模型构建,发现了一种新的Biomarker,或者风险模型,除了通过ROC曲线或者生存分析评估其对疾病进展或者预后的独立预测能力以外,另一种很重要的手段就是该分子变量与其他已有的临床病理特征结合,综合预测患病率或生存率模型的重要能力。如果我们能提前预测病人病情的进展情况,那么有时候将会做出不同的临床决定,使整个过程更偏向个性化治疗。

Nomogram图,又称为列线图,是基于多因素分析的结果,将多个预测指标进行整合,根据一定的比例分配,以图形的形式将各个变量之间对结局预测之间相互关系进行可视化展示。下面,阿琛带大家一起学习一下基于Logistic回归和Cox回归分析的列线图的绘制过程

基于Logistic回归的列线图

1. 引用R包

#install.packages('rms')library(rms) #引用rms包
2. 读取文件
setwd('C:\Users\000\Desktop\09_Nomogram')   #设置工作目录rt <- read.table('Log.txt',header=T,sep='  ')   #读取数据head(rt)   #查看数据集rt

▲ 在该数据集中,主要包含了年龄(Age),性别(Gender),BMI值,教育水平(Education),饮酒史(Alcohol)5个自变量,以及1个结局变量(Status)。

3. 设置变量参数
首先,根据分组情况,对所有的变量添加标签
rt$Age <- factor(rt$Age,labels=c('<60','>=60'))rt$Gender <- factor(rt$Gender,labels=c('No','Yes'))rt$BMI <- factor(rt$BMI,labels=c('0','1','2'))rt$Education <- factor(rt$Education,labels=c('Primary','Secondary','Higher'))rt$Alcohol <- factor(rt$Alcohol,labels=c('No','Yes'))随后,使用datadist()函数将数据打包ddist <- datadist(rt) #使用函数datadist()将数据打包options(datadist = 'ddist')

4. 构建Logistic模型
fit <- lrm(Status~Age + Gender + BMI + Education + Alcohol, data=rt, x=T, y=T)#利用lrm()函数对模型进行拟合fit   #查看模型拟合结果

结果如下:
在模型中,纳入所有的变量构建了Logistic模型,结果展示了每个变量在模型中的系数以及P值,而且模型的C指数为0.839,展示出模型良好的预测能力。

5.构建Nomogram及可视化
使用nomogram()函数构建模型
nom<- nomogram(fit, fun=plogis, fun.at=c(0.0001,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.9999), lp=F, funlabel='Risk of hypertension') #构建Nomogram图plot(nom) #输出Nomogram图

结果如下:
通过将每个指标对应的Points相加,与Total points相对应,即可获得不同患者的患病可能性,并且可以提前对高危的患者进行针对性的干预。

基于Cox回归的列线图

与Logistic回归的列线图一致,首先便是数据的读取与整理过程。
1.引用R包
library(rms)library(foreign)library(survival)

2.读取文件
setwd('C:\Users\000\Desktop\09_Nomogram') #设置工作目录rt2 <- read.table('Cox.txt',header=T,sep=' ') #读取数据head(rt2) #查看数据集rt2


3.设置变量参数
rt2$gender <- factor(rt2$gender,labels=c('F', 'M'))rt2$stage <- factor(rt2$stage,labels=c('Stage1', 'Stage2', 'Stage3', 'Stage4'))rt2$T <- factor(rt2$T,labels=c('T1', 'T2', 'T3', 'T4'))rt2$M <- factor(rt2$M,labels=c('M0', 'M1'))rt2$N <- factor(rt2$N,labels=c('N0', 'N1', 'N2', 'N3'))rt2$risk <- factor(rt2$risk,labels=c('low', 'high'))
ddist <- datadist(rt2) #使用函数datadist()将数据打包options(datadist='ddist')

4.构建Cox回归模型
f <- cph(Surv(futime, fustat) ~gender + stage +T + M + N + risk, x=T, y=T, surv=T, data=rt2, time.inc=1)surv <- Survival(f)


5.构建Nomogram及可视化
nom2 <- nomogram(f,                fun=list(function(x) surv(1, x), function(x) surv(2, x), function(x) surv(3, x)),                lp=F,                funlabel=c('1-year survival', '2-year survival', '3-year survival'),                maxscale=100,fun.at=c(0.99, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3,0.2,0.1,0.05))   #构建Nomogram图plot(nom2)   #输出Nomogram图

结果如下:
在模型中,共纳入了6个变量,通过整合,预测患者1年,2年以及3年的预后生存情况。

Nomogram图的绘制就到此结束了,又点亮了一颗技能之星⭐

大家可以使用自己的数据进行尝试,当然也可以通过回复“阿琛09”来获得本文的代码与数据来进一步巩固学习。
欢迎大家关注解螺旋生信频道-挑圈联靠公号~



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多