文献中常见的ROC曲线有两种,一种是多时间点ROC(timeROC),是不同时间点下的ROC,最常见的为1、3、5年,如图1;一种是多指标ROC(multiROC),是不同变量的ROC,如图2中的风险评分risk score、年龄age、性别gender。
第一步:安装和加载包
# 安装包
install.packages("survival")
install.packages("timeROC")
# 加载包
library(timeROC)
library(survival)
第二步:加载数据并查看
# 加载数据
load("timeROC示例数据.rdata")
View(data1)
str(data1)
首先,使用view函数来看一下用来计算timeROC的示例数据,如图所示,行名为样本名,所需要的列包括生存状态、生存时间以及要计算timeROC的变量(这里是risk score,也可以是基因表达量、性别、年龄等等)。
然后,使用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
可以看到,如图所示,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()
运行完上述代码之后,打开文件夹下新出现的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()
特别申明:本文为转载文章,转载自生信大碗,不代表贪吃的夜猫子立场,如若转载,请注明出处:https://mp.weixin.qq.com/s/SpoqEAXocnA4cwdIDKK4hg