R语言绘制生存分析模型的时间依赖(相关)性roc曲线和时间依赖(相关)性cindex曲线

roc曲线和cindex曲线属于一致性的指标。后台有粉丝问怎么绘制cox回归中的时间相关性roc曲线和时间相关性cindex曲线,今天来演示一下。
在这里插入图片描述
在这里插入图片描述
我们先导入数据和R包

library(survival)
library("survminer")
library(foreign)
bc <- read.spss("E:/r/test/Breast cancer survival agec.sav",
                use.value.labels=F, to.data.frame=T)
bc <- na.omit(bc)
names(bc)

在这里插入图片描述
这是我们常用的乳腺癌数据,(公众号回复:乳腺癌,可以获得该数据),age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
有部分变量为分类变量,我们先把它转换成因子

bc$histgrad<-as.factor(bc$histgrad)
bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)

我们先建立3个cox归回方程,随便建的

f1<-coxph(Surv(time,status)~er+histgrad+pr+age+ln_yesno,bc,x=TRUE,y=TRUE)
f2<-coxph(Surv(time,status)~er+histgrad+ln_yesno,bc,x=TRUE,y=TRUE)
f3<-coxph(Surv(time,status)~ln_yesno,bc,x=TRUE,y=TRUE)

很多R包可以做时间相关性ROC,本次我们介绍riskRegression包,如大家感兴趣下次可以介绍一下其他的包

library(riskRegression)

假设我们想了解f1的时间相关性roc, 这里要注意一下formula=Surv(time,status)~1等于是不含权重的,如果把1改成协变量等于进行加权

A3<- riskRegression::Score(list("f1"=f1),
                           formula=Surv(time,status)~1,
                           data=bc,
                           metrics="auc",
                           null.model=F,
                           times=seq(3,132,1))
plotAUC(A3)

在这里插入图片描述
这样图形就生成了,非常简单,我们还可以把数据提取出来放到ggplot上绘图

auc<-plotAUC(A3)
ggplot()+geom_line(data=auc, aes(times,AUC),linetype=1,size=1,alpha = 0.6,colour="red")+
  geom_ribbon(data=auc, aes(times,ymin = lower, ymax = upper),alpha = 0.1,fill="red")+
  geom_hline(yintercept=1, linetype=2,size=1)+theme_classic()+ 
  labs(title = "时间相关性ROC", x="times", y="AUC")

在这里插入图片描述
假设我们想了解f1和f2的时间相关性roc

A3<- riskRegression::Score(list("f1"=f1,"f2"=f2),
                           formula=Surv(time,status)~1,
                           data=bc,
                           metrics="AUC",
                           null.model=F,
                           times=seq(3,132,1))
auc<-plotAUC(A3)
ggplot()+geom_line(data=auc, aes(times,AUC,group=model,col=model))+
  geom_ribbon(data=auc, aes(times,ymin = lower, ymax = upper,fill=model),alpha = 0.1)+
  geom_hline(yintercept=1, linetype=2,size=1)+theme_classic()+ 
  labs(title = "时间相关性ROC", x="times", y="AUC")

在这里插入图片描述
下面来介绍一下时间先关性cindex,这个需要使用到pec包,先画f1的

library(pec)
A1<-pec::cindex(list("f1"=f1),
                formula=Surv(time,status)~er+histgrad+pr+age+ln_yesno,
                data=bc,
                eval.times=seq(3,132,1))
plot(A1)

在这里插入图片描述
假设想了解f1、f、f3先关性cindex

A1<-pec::cindex(("f1"=f1,"f2"=f2,"f3"=f3),
                formula=Surv(time,status)~er+histgrad+pr+age+ln_yesno,
                data=bc,
                eval.times=seq(3,132,1))
plot(A1)

在这里插入图片描述
还可以在颜色,标签等进行更改,我这里就不弄了。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,我们需要准备数据。假设我们有一个二分类问题的数据集,其中包含时间戳和标签(0或1)列。我们可以使用以下代码读取数据集: ```r data <- read.csv("data.csv") ``` 接下来,我们需要将数据集按时间戳排序,并将其分成训练集和测试集。我们可以使用以下代码执行此操作: ```r data <- data[order(data$time),] # 按时间戳排序 train <- data[1:800,] # 前800个样本作为训练集 test <- data[801:nrow(data),] # 后200个样本作为测试集 ``` 接下来,我们需要使用训练集训练分类器,并使用测试集计算时间依赖ROC曲线。我们可以使用以下代码执行此操作: ```r library(pROC) # 训练分类器 model <- glm(label ~., data=train, family=binomial) # 计算时间依赖ROC曲线 roc_list <- vector("list", nrow(test)) for(i in 1:nrow(test)){ # 获取当前时间点之前的数据 temp <- data[1:i,] # 训练分类器 temp_model <- glm(label ~., data=temp, family=binomial) # 计算ROC曲线 roc_list[[i]] <- roc(test$label[i], predict(temp_model, newdata=test[i,])) } # 绘制时间依赖ROC曲线 plot(roc_list[[1]], col="red", type="S", ylim=c(0,1), main="时间依赖ROC曲线") for(i in 2:nrow(test)){ lines(roc_list[[i]], col="red") } ``` 这段代码将训练一个逻辑回归分类器,并使用测试集计算时间依赖ROC曲线。我们使用pROC包中的roc函数计算ROC曲线,并使用plot函数绘制时间依赖ROC曲线。 最后,我们可以使用以下代码输出时间依赖ROC曲线的AUC值: ```r # 计算时间依赖AUC值 auc_list <- sapply(roc_list, function(x) x$auc) time_auc <- cummax(auc_list) cat("时间依赖AUC值:", max(time_auc), "\n") ``` 这段代码使用sapply函数计算每个时间点的AUC值,并使用cummax函数计算时间依赖AUC值。最后,我们使用cat函数输出时间依赖AUC值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值