时间依赖的ROC曲线

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)))