生存资料Cox回归校准曲线绘制(2)

原始数据参考文章《生存资料Cox回归校准曲线绘制(1)》

方法3:

canshu<- val.surv(fit= model, # 模型
              newdata = veteran, # 测试集
              u=100, # 时间
              evaluate = 10,#设置点的数目以获取校准曲线
              S=Surv(veteran$time,veteran$status) 
)
plot(canshu,
     xlab="Predicted Probability of Surviving 100 Days",
     ylab="Actual Probability of Surviving 100 Days")

 方法4:

#模型预测概率
train_pre <- c((summary(survfit(model, newdata=train), times=100)$surv))
head(train_pre)
#切分四个点
cut <- unique(quantile(c(0, 1, train_pre), seq(0, 1, length = 5), na.rm = TRUE))
cut
#用K-M法估计生存概率
library(rms)
km_surv<- groupkm(train_pre,
                   Srv = Surv(train_df$time,train_df$status),
                   u = 100,
                   cuts = cuts)
km_surv
#简单图
plot(km_surv[,1], km_surv[,4],xlim=c(0,1),ylim=c(0,1))
lines(km_surv[,1], km_surv[,4])
#美化
plot(km_surv[,1], km_surv[,4],
     xlim=c(0,1),ylim=c(0,1),
     xlab = 'Predicted 100-day Survival Probability',
     ylab = 'Observed 100-day Survival Probability',
     main="Calibration curves",
     col="red"
);lines(km_surv[,1], km_surv[,4],col="red")
# 计算误差线范围
errl <- ifelse(km_surv[,"KM"] == 0, 0,  
               km_surv[,"KM"] * exp(1.959964 * (-km_surv[,"std.err"])))
errh <- ifelse(km_surv[,"KM"] == 0, 0, 
               pmin(1, km_surv[,"KM"] * exp(1.959964 * km_surv[,"std.err"])))
# 添加误差线
errbar(x = km_surv[,"x"],
       y = km_surv[,"KM"],
       yminus = errl,yplus = errh,
       add = T,
       pch=16,cex=1,
       asp=1,xaxs='i',yaxs='i',col="red")
# 添加对角线
abline(a = 0,b = 1,col='grey')
#继续添加
#用K-M法估计生存概率
library(rms)
km_surv_1<- groupkm(train_pre,
                  Srv = Surv(train_df$time,train_df$status),
                  u = 200,
                  cuts = cuts)
km_surv_1
lines(km_surv_1[,1], km_surv_1[,4],col="blue")
# 计算误差线范围
errl <- ifelse(km_surv_1[,"KM"] == 0, 0,  
               km_surv_1[,"KM"] * exp(1.959964 * (-km_surv_1[,"std.err"])))
errh <- ifelse(km_surv_1[,"KM"] == 0, 0, 
               pmin(1, km_surv_1[,"KM"] * exp(1.959964 * km_surv_1[,"std.err"])))
# 添加误差线
errbar(x = km_surv_1[,"x"],
       y = km_surv_1[,"KM"],
       yminus = errl,yplus = errh,
       add = T,
       pch=16,cex=1,
       asp=1,xaxs='i',yaxs='i',col="blue")
#添加图例
legend("topleft",legend = c("100 days","200 days"),fill=c("red","blue"))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cox 回归中,ROC 曲线并不是一种普遍使用的评估指标,因为 Cox 回归是一种生存分析模型,通常使用生存曲线和 Concordance Index (C-index)来评估模型的性能。 如果你仍然想要绘制 ROC 曲线,可以按照以下步骤进行: 1. 使用 Cox 回归模型对数据进行拟合,并预测每个个体的风险得分。 2. 根据预测的风险得分对样本进行排序,从高到低排列。 3. 选择一个阈值,将风险得分高于该阈值的个体视为阳性,其他个体视为阴性。 4. 计算真正率(TPR)和假正率(FPR),并将它们用于绘制 ROC 曲线。 以下是 Python 中使用 scikit-learn 库绘制 Cox 回归模型的 ROC 曲线的示例代码: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.linear_model import CoxPHSurvivalAnalysis from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 生成随机数据 X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_classes=2, random_state=42) # 将数据集分成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 拟合 Cox 回归模型 cox = CoxPHSurvivalAnalysis() cox.fit(X_train, y_train) # 预测风险得分 risk_scores = cox.predict(X_test) # 计算 ROC 曲线和 AUC fpr, tpr, thresholds = roc_curve(y_test, risk_scores) roc_auc = auc(fpr, tpr) # 绘制 ROC 曲线 plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show() ``` 请注意,ROC 曲线的解释要比二元分类问题复杂得多,因为在 Cox 回归中,我们不能直接将预测结果与真实结果进行比较,而是需要将个体的风险得分与其他个体进行比较。因此,使用生存曲线和 C-index 更容易解释模型性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值