美文网首页
保姆级教程!5分钟学会绘制timeROC、multiROC(附示

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

作者: 生信大碗 | 来源:发表于2023-10-23 22:52 被阅读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()

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

    相关文章

      网友评论

          本文标题:保姆级教程!5分钟学会绘制timeROC、multiROC(附示

          本文链接:https://www.haomeiwen.com/subject/puwjidtx.html