时间依赖的ROC曲线
- 配合survival ROC包
- 配合lapply函数实现批量绘图
- lappy的结果返回为list,刚好输入do.call
require(plotROC)
## Loading required package: plotROC
## Warning: package 'plotROC' was built under R version 3.6.1
## Loading required package: ggplot2
require(ggplot2)
library(survivalROC)
survT <- rexp(350, 1/5)
cens <- rbinom(350, 1, .1)
M <- -8 * sqrt(survT) + rnorm(350, sd = survT)
### 时间2,5,10
sroc <- lapply(c(2, 5, 10), function(t){
stroc <- survivalROC(Stime = survT, status = cens, marker = M,
predict.time = t, method = "NNE", ## KM法或NNE法
span = .25 * 350^(-.2))
data.frame(TPF = stroc[["TP"]], FPF = stroc[["FP"]],
c = stroc[["cut.values"]],
time = rep(stroc[["predict.time"]], length(stroc[["FP"]])))
})
## 整合到数据框中
sroclong <- do.call(rbind, sroc)
class(sroclong)
## [1] "data.frame"
head(sroclong)
## TPF FPF c time
## 1 1 1.0000000 -Inf 2
## 2 1 0.9970286 -96.21091 2
## 3 1 0.9940573 -89.13315 2
## 4 1 0.9910859 -80.53402 2
## 5 1 0.9881145 -70.53104 2
## 6 1 0.9851431 -67.81392 2
sroclong$time<-factor(sroclong$time)
## 绘制ROC
pROC<-ggplot(sroclong, aes(x = FPF, y = TPF, label = c, color = time)) +
geom_roc(labels = FALSE, stat = "identity") +
style_roc()+
ggsci::scale_color_jco()
pROC

##添加注释
pROC+annotate("text",x = .75, y = .25, ## 注释text的位置
label = paste("AUC of 1 years =", round(calc_auc(pROC)$AUC[1], 2))) +
annotate("text",x = .75, y = .15, ## 注释text的位置)
label=paste("AUC of 3 years =", round(calc_auc(pROC)$AUC[2], 2)))+
annotate("text",x = .75, y = .05, ## 注释text的位置)
label=paste("AUC of 5 years =", round(calc_auc(pROC)$AUC[3], 2)))
