载入必要的R包
rm(list=ls())
library(tibble)
library(dplyr)
library(tidyr)
library(survivalROC)
载入数据
clinical<-data.table::fread(file ="risk.txt",data.table = F)
head(clinical)[1:5,1:5]
## 将第一列变成行名
clinical <- clinical %>%
column_to_rownames("sample")
处理时间
### 将生存时间转化成年(之前已经为年了,所以除以1。如果为天则除以365。月则除以12)
clinical$futime=clinical$futime/1
predict_time1=3
predict_time2=5
绘制3年的ROC曲线
Auc_Text=c()
you_roc=survivalROC(Stime=clinical$futime, status=clinical$fustat, marker = clinical$riskScore, predict.time =predict_time1, method="KM")
plot(you_roc$FP, you_roc$TP, type="l", xlim=c(0,1), ylim=c(0,1),col="#DAA520",
xlab="False positive rate",
ylab="True positive rate",
lwd = 3, cex.main=1.5, cex.lab=1.3, cex.axis=1.3, font=1.3)
Auc_Text=c(Auc_Text,paste0("riskScore"," (AUC=",sprintf("%.3f",you_roc$AUC),")"))
abline(0,1)
legend("bottomright",Auc_Text,lwd=2,bty="n",col="#DAA520")
#dev.off()
### 利用ROC曲线计算最佳cutoff
cutoff_3year<-you_roc$cut.values[which.max(you_roc$TP-you_roc$FP)]
cutoff_3year
绘制5年的ROC曲线
Auc_Text=c()
you_roc=survivalROC(Stime=clinical$futime, status=clinical$fustat, marker = clinical$riskScore, predict.time =predict_time2, method="KM")
plot(you_roc$FP, you_roc$TP, type="l", xlim=c(0,1), ylim=c(0,1),col="#EE3B3B",
xlab="False positive rate",
ylab="True positive rate",
lwd = 3, cex.main=1.5, cex.lab=1.3, cex.axis=1.3, font=1.3)
Auc_Text=c(Auc_Text,paste0("riskScore"," (AUC=",sprintf("%.3f",you_roc$AUC),")"))
abline(0,1)
legend("bottomright",Auc_Text,lwd=2,bty="n",col="#EE3B3B")
#dev.off()
#利用ROC曲线计算最佳cutoff
cutoff_5year<-you_roc$cut.values[which.max(you_roc$TP-you_roc$FP)]
cutoff_5year
那么当构建riskscore的元素为分期、性别、亚型等分类变量时,又应该怎么用ROC曲线寻找riskscore的最佳cutoff呢?且听下回分解。
更多详细可见:https://mp.weixin.qq.com/s/0wZTazrIl2EQ1__9gNdywQ
在数据处理时,常需要对数值型数据进行归类,如我们收集收入时往往需要给出最直观的变量来告知我们这个值的收入是高、低还是中等。cut函数可实现这一目的。
如果希望加一列来将income分类为 low,medium以及high,标准为income<=3000定义为low, 3000<income<=8000为medium, income>8000为high,运用cut函数,命令如下: