保姆级教程!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年对应的阳性结局数、阴性结局数、删失数、曲线下面积、标准差都已经计算出来了,下面我们就可以开始绘制曲线了。
图54.绘制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()
今天的分享到这里就结束了,如果本篇推文对你有帮助的话,就给小碗一个免费的赞吧!