R语言实现Cox回归的K折交叉验证(1)

K折交叉验证:将数据分成K份,K-1份作为训练集,剩余一份作为测试集。可以检验预测模型在新训练集上的预测效果,减少过拟合。

基本方法:

#使用10折验证结果
###方法1
library(survival)
library(riskRegression)
help(package="survival")
library(caret)
library(magrittr)
lung<-na.omit(lung)
str(lung)
lung$status<-ifelse(lung$status==2,1,0)
colnames(lung)
#设置随机种子,使数据分割可重复
set.seed(1)
#设定K和times,生成times*K个新数据
folds <-createMultiFolds(y=lung$status,
                         k=10,
                         times=2)#times参数指的分区数,通俗移动的来说就是2次k折验证
auc_value_test<-as.numeric()
auc_value_train<-as.numeric()
auc_aver<-as.numeric()
cindex_results_train <-as.numeric()
cindex_results_test <-as.numeric()
c_aver<-as.numeric()
#2次k折验证,每次10个结果,共计20个结果
for(i in 1:20){
  train<-lung[ folds[[i]],] 
  test<-lung[-folds[[i]],] 
  model<-coxph(Surv(time,status)~.,
               data=train,x=T)
  #AUC
  mod1<-Score(list(model1=model),
             formula=Surv(time,status)~1,
             data=test,
             metrics="auc",
             times=200)
  mod2<-Score(list(model1=model),
              formula=Surv(time,status)~1,
              data=train,
              metrics="auc",
              times=200)
  aver=(mod1$AUC$score$AUC+mod2$AUC$score$AUC)/2
  auc_aver<-append(auc_aver,as.numeric(aver))
  auc_value_test<-append(auc_value_test,as.numeric(mod1$AUC$score$AUC))
  auc_value_train<-append(auc_value_train,as.numeric(mod2$AUC$score$AUC))
  #C指数
  Cin<-concordance(model,newdata=test)[["concordance"]]
  cindex_results_test<- append(cindex_results_test,as.numeric(Cin))
  Cin_train<-concordance(model,newdata=train)[["concordance"]]
  cindex_results_train<- append(cindex_results_train,as.numeric(Cin_train))
  Aver_c=(Cin+Cin_train)/2
  c_aver=append(c_aver,as.numeric(Aver_c))
}
summary(auc_value_train)
summary(auc_value_test)
summary(auc_aver)
summary(cindex_results_train)
summary(cindex_results_test)
summary(c_aver)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值