一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线

竞争风险模型就是指在临床事件中出现和它竞争的结局事件,这是事件会导致原有结局的改变,因此叫做竞争风险模型。比如我们想观察患者肿瘤的复发情况,但是患者在观察期突然车祸死亡,或者因其他疾病死亡,这样我们就观察不到复发情况了,这种情况下不能把缺失数据仅仅当做右删失处理,这样的话会造成数据的估值错误。这是我们应该优先选择竞争风险模型来做数据分析,而不是COX回归。我们在既往文章《手把手教你使用R语言做竞争风险模型并绘制列线图》中已经介绍了cmprsk包建立竞争风险模型和绘制列线图,但是cmprsk包功能还是相对简单一点,而且制作列线图的时候还需要对数据进行加权,对新手不怎么友好,许多人做不出来。
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第1张图片
今天我们来介绍一下QHScrnomo包,QHScrnomo是在cmprsk包的基础上将功能呢继续完善,简化流程,可以做出竞争风险模型建模-列线图-校准曲线-K折验证-外部验证-决策曲线等诸多功能,总有一款适合你。
好了,废话不多说,立即开始。导入一个前列腺癌数据

library(QHScrnomo)
bc<-read.csv("E:/r/test/qianliexian.csv",sep=',',header=TRUE)

一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第2张图片
这是一个前列腺癌患者的生存数据(公众号回复:前列腺癌,可以获得数据),一共有9个变量,UNIQID:患者ID,TX:EBRT、PI、RP 水平的前列腺癌的治疗选择,PSA:治疗前 PSA 水平,BX_GLSN_CAT:活检 Gleason 评分总和,CLIN_STG:T1、T2、T3 临床分期,AGE:年龄,RACE_AA:种族,TIME_EVENT:随访时间,以月为单位,EVENT_DOD:结局事件,0 – 生存,1 - 死于前列腺癌,2 - 死于其他原因。
因为我们等下要做数据建模后的外部验证,所以我们把数据分为2部分,一个数据建模,另一个等下用来做外部验证。

set.seed(123)
tr1<- sample(nrow(bc),0.7*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#70%数据集
bc_test<- bc[-tr1,]#30%数据集

在这里插入图片描述
这样数据就建好了,我们使用bc_train建模,bc_test来验证。
先进行数据格式整理

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

建立cox回归模型

prostate.f <- cph(Surv(TIME_EVENT,EVENT_DOD == 1) ~ TX + rcs(PSA,3) +
                    BX_GLSN_CAT + CLIN_STG + rcs(AGE,3) +
                    RACE_AA, data = bc_train,
                  x = TRUE, y= TRUE, surv=TRUE,time.inc = 144)

在cox回归模型的基础上建立竞争风险模型,要标明生存和死亡指标

prostate.crr <- crr.fit(prostate.f,cencode = 0,failcode = 1)

解析模型,可以看到相关系数和可信区间

summary(prostate.crr)

一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第3张图片
对部分指标重命名,这样新的名字就会在列线图出现

prostate.g <- Newlabels(prostate.crr,
                        c(TX = 'Treatment options', 
                          BX_GLSN_CAT = 'Biopsy Gleason Score Sum',
                          CLIN_STG = 'Clinical stage'))

建立列线图并绘图

nomogram.crr(prostate.g,
             failtime = 120,
             lp=FALSE,
             xfrac=0.65,
             fun.at = seq(0.2, 0.45, 0.05),
             funlabel = "Predicted 10-year cumulative incidence")

一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第4张图片
这样列线图就绘制好了,非常简单,作者还很贴心的给出了怎么计算的过程,可以用来回答编辑和审稿人

sas.cmprsk(prostate.crr, time = 120)

一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第5张图片
如果你没有外部验证的数据,你可以使用K折验证计算cindex,我们这里使用10折,10折需要点时间,我们稍微等一下,

bc_train$preds.tenf <- tenf.crr(prostate.crr, time=120, fold = 10)

计算 cindex

with(bc_train, cindex(preds.tenf,
                      ftime = TIME_EVENT,
                      fstatus =EVENT_DOD, type = "crr"))["cindex"]

在这里插入图片描述
Cindex计算好以后我们继续绘制校准曲线

with(bc_train,
     groupci(
       preds.tenf, 
       ftime = TIME_EVENT,
       fstatus =EVENT_DOD, g = 5, u = 120,
       xlab = "Nomogram predicted 10-year cancerspecific mortality",
       ylab = "Observed predicted 10-year cancerspecific mortality")
)

一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第6张图片
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第7张图片
这样列线图校准曲线就k折验证就做好了,cindex0.55,模型不怎么样,我们现在利用外部数据来进行外部验证,
先建模

newfit  <- crr(time,status,x,cencode = 0,failcode = 1)###建模

生成外部数据的验证概率
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第8张图片
计算 cindex,和建模数据集差不多

with(bc_test, cindex(preds.tenf1,
                     ftime = TIME_EVENT,
                     fstatus =EVENT_DOD, type = "crr"))["cindex"]

在这里插入图片描述
最后绘制验证集校准曲线
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第9张图片
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第10张图片
除此之外我们还可以进行单变量的比较和绘制临床决策曲线,这里我就不演示了,感兴趣的可以看我的相关文章。
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第11张图片
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第12张图片
原创不易,需要外部验证部分代码的朋友,请把公众号中的本文章转发朋友圈集10个赞,截图发给我,嫌麻烦的可以在这里下载
https://download.csdn.net/download/dege857/85712760
我把全部代码和QHScrnomo包进行了打包。安装不了QHScrnomo包的可以在我这里把QHScrnomo包下载后在R安装。
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第13张图片
然后找到R包的位置直接点确定就可以了,R包为一个压缩文件,安装好就可以直接用了。
一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线_第14张图片
更多精彩文章请关注公众号:零基础说科研

你可能感兴趣的:(R语言,r语言,数据分析,数据挖掘)