R语言:绘制timeROC、multiROC

文献中常见的ROC曲线有两种,一种是多时间点ROC(timeROC),是不同时间点下的ROC,最常见的为1、3、5年,如图1;一种是多指标ROC(multiROC),是不同变量的ROC,如图2中的风险评分risk score、年龄age、性别gender。

R语言:绘制timeROC、multiROC
R语言:绘制timeROC、multiROC

第一步:安装和加载包

# 安装包
install.packages("survival")
install.packages("timeROC")
# 加载包
library(timeROC)
library(survival)

第二步:加载数据并查看


# 加载数据
load("timeROC示例数据.rdata")
View(data1)
str(data1)
R语言:绘制timeROC、multiROC

首先,使用view函数来看一下用来计算timeROC的示例数据,如图所示,行名为样本名,所需要的列包括生存状态、生存时间以及要计算timeROC的变量(这里是risk score,也可以是基因表达量、性别、年龄等等)。

R语言:绘制timeROC、multiROC

然后,使用str函数看一下示例数据的结构,是一个有342行、3列的数据框,生存状态、生存时间、要计算timeROC的变量(risk score)都是数值型。

第三步:构建ROC

## 构建timeROC
ROC <- timeROC(T=data1$os_time, #生存时间
               delta=data1$os_status,   #生存状态
               marker=data1$risk_score, #计算timeROC的变量
               cause=1,                #阳性结局指标数值(1表示死亡)
               weighting="marginal",   #计算方法,默认为marginal
               times=c(1, 3, 5),       #时间点,选取1年,3年和5年的生存率
               iid=TRUE)
ROC
R语言:绘制timeROC、multiROC

可以看到,如图所示,1、3、5年对应的阴性结局数、阳性结局数、删失数、曲线下面积、标准差都已经计算出来了,下面我们就可以开始绘制曲线了。

第四步: 绘制timeROC

## 绘制timeROC
pdf("timeROC曲线.pdf",width = 12,height = 8)
plot(ROC,
     time=1, col="red", lty=1,lwd=2, title = "")   #time是时间点,col是线条颜色、lty为图例线条类型、lwd为图例线条宽度
plot(ROC,
     time=3, col="blue", add=TRUE, lty=1,lwd=2)    #add指是否添加在上一张图中
plot(ROC,
     time=5, col="orange", add=TRUE, lty=1,lwd=2)
## 添加图例
legend("bottomright",#图例画在右下角
       c(paste0("AUC at 1 year: ",round(ROC[["AUC"]][1],2)), #提取1年AUC构建图例标签
         paste0("AUC at 3 year: ",round(ROC[["AUC"]][2],2)), #提取3年AUC构建图例标签
         paste0("AUC at 5 year: ",round(ROC[["AUC"]][3],2))),#提取5年AUC构建图例标签
       col=c("red",
             "blue",
             "orange"), #设置1,3,5年AUC图例标签的图例颜色,注意与曲线保持对应
       lty=1,  
       lwd=2,  
       bty = "n" #o表示用框框把图例部分框起来,为默认。n表示不画框框
       )
dev.off()
R语言:绘制timeROC、multiROC

运行完上述代码之后,打开文件夹下新出现的timeROC曲线.pdf文件。

第五步:加载multiROC示例数据,并完成构建ROC

load("multiROC示例数据.rdata")
View(data2)
str(data2)

## 构建risk score的ROC曲线
ROC.risk <- timeROC(T=data2$os_time,
                    delta=data2$os_status,   
                    marker=data2$risk_score,   
                    cause=1,                
                    weighting="marginal",   
                    times=1,  #绘制1年处的ROC曲线
                    iid=TRUE)
## 构建gender的ROC曲线
ROC.gender <- timeROC(T=data2$os_time,
                      delta=data2$os_status,   
                      marker=data2$gender,   
                      cause=1,                
                      weighting="marginal",   
                      times=1,   
                      iid=TRUE)
## 构建age的ROC曲线
ROC.age <- timeROC(T=data2$os_time,
                   delta=data2$os_status,   
                   marker=data2$age,   
                   cause=1,                
                   weighting="marginal",   
                   times=1,   
                   iid=TRUE)
#这里设置的时间点是1年,如果你想计算3年、5年的,可以修改参数times

## 绘制multiROC曲线
pdf("multiROC曲线.pdf",width = 12,height = 8)
plot(ROC.risk, time = 1, col="red", lwd=2, title = "")  #time是时间点,与构建ROC时的times参数保持一致
plot(ROC.age, time =1, col="blue", lwd=2, add = T)
plot(ROC.gender, time = 1, col="purple", lwd=2, add = T)
legend("bottomright",
       c(paste0("risk score: ",round(ROC.risk[["AUC"]][2],2)),
         paste0("age: ",round(ROC.age[["AUC"]][2],2)),
         paste0("gender: ",round(ROC.gender[["AUC"]][2],2))),
       col=c("red",
             "blue",
             "purple"),
       lty=1,
       lwd=2,
       bty = "n")  
dev.off()
R语言:绘制timeROC、multiROC

    特别申明:本文为转载文章,转载自生信大碗,不代表贪吃的夜猫子立场,如若转载,请注明出处:https://mp.weixin.qq.com/s/SpoqEAXocnA4cwdIDKK4hg

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    xujunzju管理者
    上一篇 2024年5月19日 19:13
    下一篇 2024年5月21日 13:00

    相关推荐

    发表回复

    登录后才能评论
    联系我们
    邮箱:
    xujunzju@gmail.com
    公众号:
    xujunzju6174
    捐赠本站
    捐赠本站
    分享本页
    返回顶部