竞争风险模型就是指在临床事件中出现和它竞争的结局事件,这是事件会导致原有结局的改变,因此叫做竞争风险模型。比如我们想观察患者肿瘤的复发情况,但是患者在观察期突然车祸死亡,或者因其他疾病死亡,这样我们就观察不到复发情况了,这种情况下不能把缺失数据仅仅当做右删失处理,这样的话会造成数据的估值错误。这是我们应该优先选择竞争风险模型来做数据分析,而不是COX回归。我们在既往文章《手把手教你使用R语言做竞争风险模型并绘制列线图》中已经介绍了cmprsk包建立竞争风险模型和绘制列线图,但是cmprsk包功能还是相对简单一点,而且制作列线图的时候还需要对数据进行加权,对新手不怎么友好,许多人做不出来。
今天我们来介绍一下QHScrnomo包,QHScrnomo是在cmprsk包的基础上将功能呢继续完善,简化流程,可以做出竞争风险模型建模-列线图-校准曲线-K折验证-外部验证-决策曲线等诸多功能,总有一款适合你。
好了,废话不多说,立即开始。导入一个前列腺癌数据
library(QHScrnomo)
bc<-read.csv("E:/r/test/qianliexian.csv",sep=',',header=TRUE)
这是一个前列腺癌患者的生存数据(公众号回复:前列腺癌,可以获得数据),一共有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)
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")
这样列线图就绘制好了,非常简单,作者还很贴心的给出了怎么计算的过程,可以用来回答编辑和审稿人
sas.cmprsk(prostate.crr, time = 120)
如果你没有外部验证的数据,你可以使用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"]
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")
)
这样列线图校准曲线就k折验证就做好了,cindex0.55,模型不怎么样,我们现在利用外部数据来进行外部验证,
先建模
newfit <- crr(time,status,x,cencode = 0,failcode = 1)###建模
生成外部数据的验证概率
计算 cindex,和建模数据集差不多
with(bc_test, cindex(preds.tenf1,
ftime = TIME_EVENT,
fstatus =EVENT_DOD, type = "crr"))["cindex"]
最后绘制验证集校准曲线
除此之外我们还可以进行单变量的比较和绘制临床决策曲线,这里我就不演示了,感兴趣的可以看我的相关文章。
原创不易,需要外部验证部分代码的朋友,请把公众号中的本文章转发朋友圈集10个赞,截图发给我,嫌麻烦的可以在这里下载
https://download.csdn.net/download/dege857/85712760
我把全部代码和QHScrnomo包进行了打包。安装不了QHScrnomo包的可以在我这里把QHScrnomo包下载后在R安装。
然后找到R包的位置直接点确定就可以了,R包为一个压缩文件,安装好就可以直接用了。
更多精彩文章请关注公众号:零基础说科研