保姆级教程!5分钟学会绘制timeROC、multiROC(附示

2023-10-23  本文已影响0人  生信大碗

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

图1 图2

那么,如何用R来绘制呢?给小碗5分钟时间,一定教会你!(私信领取示例数据)

1.打开R,安装并加载需要的包:

#安装包

install.packages("survival")

install.packages("timeROC")

#加载包

library(survival)

library(timeROC)

2.加载timeROC示例数据:

#加载数据

load("timeROC示例数据.rdata")

view(data1)

str(data1)

 

图3

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

图4

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

3.构建timeROC:

##构建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

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

图5

4.绘制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()

运行完上述代码之后,打开文件夹下新出现的timeROC曲线.pdf文件,你是不是也获得了和图1一样精美的timeROC呢?

学完了timeROC,那么换汤不换药的multiROC就很简单了!继续看下去吧!

5.加载multiROC示例数据:

load("multiROC示例数据.rdata")

view(data2)

str(data2)

 

图6

使用view函数来看一下用来计算multiROC的示例数据,如图6所示,行名为样本名,所需要的列依旧包括生存状态、生存时间,除此之外,因为是多指标ROC,所以有多个变量——risk score、性别、年龄。

使用str函数看一下示例数据的结构,是一个有342行、5列的数据框,而且生存状态、生存时间、各变量都是数值型。

6.分别构建各个变量的ROC(这里设置的时间点是1年,如果你想计算3年、5年的,可以修改参数times):

##构建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)

7.最后运行下面的代码就可以得到像前面图2一样的multiROC了:

##绘制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()

今天的分享到这里就结束了,如果本篇推文对你有帮助的话,就给小碗一个免费的赞吧!

上一篇下一篇

猜你喜欢

热点阅读