大家好,我是阿琛。在日常的临床工作以及研究中,对于某个疾病,无论是肿瘤研究,还是非肿瘤研究,我们常听到患者提出这样的问题,“我的检查结果是这样的,那么最终患病的概率有多少,生存情况又是怎样的呢”。当然,生信分析,作为医学研究的三大主线之一,亦是如此,最终的结局无外乎两种,一是发病率是多少,二是预后生存情况如何。 当我们通过数据挖掘,或者模型构建,发现了一种新的Biomarker,或者风险模型,除了通过ROC曲线或者生存分析评估其对疾病进展或者预后的独立预测能力以外,另一种很重要的手段就是该分子变量与其他已有的临床病理特征结合,综合预测患病率或生存率模型的重要能力。如果我们能提前预测病人病情的进展情况,那么有时候将会做出不同的临床决定,使整个过程更偏向个性化治疗。Nomogram图,又称为列线图,是基于多因素分析的结果,将多个预测指标进行整合,根据一定的比例分配,以图形的形式将各个变量之间对结局预测之间相互关系进行可视化展示。下面,阿琛带大家一起学习一下基于Logistic回归和Cox回归分析的列线图的绘制过程。1. 引用R包 #install.packages('rms') library(rms) #引用rms包
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)。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')
fit <- lrm(Status~Age + Gender + BMI + Education + Alcohol, data=rt, x=T, y=T) #利用lrm()函数对模型进行拟合 fit #查看模型拟合结果 在模型中,纳入所有的变量构建了Logistic模型,结果展示了每个变量在模型中的系数以及P值,而且模型的C指数为0.839,展示出模型良好的预测能力。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相对应,即可获得不同患者的患病可能性,并且可以提前对高危的患者进行针对性的干预。与Logistic回归的列线图一致,首先便是数据的读取与整理过程。library(rms) library(foreign) library(survival)
setwd('C:\Users\000\Desktop\09_Nomogram') #设置工作目录 rt2 <- read.table('Cox.txt',header=T,sep=' ') #读取数据 head(rt2) #查看数据集rt2
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')
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)
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”来获得本文的代码与数据来进一步巩固学习。
|