自己研究了一会,稍微有一点启发,但是还有很多没搞明白。
代码如下。
rm(list = ls()) # 清理环境
# 安装需要的包
install.packages('timeROC')
install.packages('timereg')
install.packages('survivalROC')
library(timeROC)
library(survival)
library(survivalROC)
# 使用 mayo 数据
data(mayo)
head(mayo)
# 建立生存曲线的时间依赖ROC 曲线
sroc <- survivalROC(Stime = mayo$time,
status = mayo$censor,
marker = mayo$mayoscore5,
predict.time = 1825,
method = 'KM',
)
# 计算最佳界值
cut.op <- sroc$cut.values[which.max(sroc$TP-sroc$FP)];cut.op
# 画出 ROC 曲线
plot(sroc$FP,sroc$TP,type = 'l',
xlim = c(0,1),
ylim = c(0,1),
xlab=paste("FP","\n","AUC=",round(sroc$AUC,4)),
ylab="TP",
main="5-year survival ROC",col="red")
abline(0,1) # 加个斜线
legend("bottomright",c("percentage"),col="red",lty=c(1,1)) # 加标签
计算得到的最佳界值是6.225668,也就是说,mayoscore5 这个指标以6.225668划分成两组,低于6.225668组和高于6.225668组的生存曲线差异最大。
然后用另一种 方法找最佳界值,并画两组生存曲线
# 这个方法用 survminer 包
library(survminer)
# 这种方法找最佳界值 a
a <- surv_cutpoint(mayo,
time = "time",
event = "censor",
variables = "mayoscore5",
minprop = 0.1,
progressbar = T);a
sur.cat <- surv_categorize(a)
head(sur.cat)
# 绘制两组生存曲线
fit1 <- survfit(Surv(time,censor)~mayoscore5,data = sur.cat)
ggsurvplot(
fit1,
data = sur.cat,
conf.int = F,
pval = T
)
发现用这种方法找到的界值和前面那种方法不一样,这次的界值是6.627459。前面的界值是6.225668。
画出来的生存曲线也不同。
图一:6.225668为界值的生存曲线。
图二:6.627459为界值的生存曲线。