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

文献中常见的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()

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容