生存资料Cox回归DCA曲线绘制(1)

1、基本概念:决策曲线分析(DCA),一种评估预测模型和诊断模型的方法。横坐标:阈概率,超过阈值为阳性。纵坐标:净获益率(Standard Net Benefit):利减去弊之后。两条虛线,水平线表示所有样本都是阴性,所有人都没干预,净获益一直0。斜线代表所有样本都是阳性,所有人都接受了干预,净获益随阈值变化。若模型曲线在越接近两条曲线,越无意义,越靠近右上角表明越有价值。

2、R语言实现方法:

library(ggDCA)
#生成模拟生存资料
set.seed(1)
#创建一个包含50个观察值和2个预测变量的数据框
data <- data.frame(
  x1 = rnorm(50),
  x2 = sample(c("A", "B"), 50, replace = TRUE))
#创建随机截尾时间截点并将其加入数据集
data$time<-pmin(rexp(50,rate=0.05),10)
#创建失败指标,并以70%的概率对其进行剪除
data$status<-ifelse(runif(50)<0.7,0,1)
#将分类变量x2编码为数值变量
data$x2 <- as.numeric(factor(data$x2))
#将数据集分成训练集和测试集,其中70%用作训练集
train.idx <- sample(1:nrow(data), round(nrow(data) * 0.7))
train.data <- data[train.idx, ]
test.data <- data[-train.idx, ]
#构建Cox回归模型
library(survival)
cox_1<-coxph(Surv(time,status)~x1+x2,data)
cox_2<-coxph(Surv(time,status)~x1,data)
cox_3<-coxph(Surv(time,status)~x2,data)
#绘制多个模型DCA曲线
d1 <- dca(cox_1,cox_2,cox_3)
ggplot(d1)
#绘制不同时间点的DCA曲线
t <- c(3,6,9)
d <- dca(cox_1,cox_2,cox_3,
         times = t)
#按照时间点分面
library(ggsci)
ggplot(d,linetype = F)+
  scale_color_manual(values = c("red", "blue", "green","black","pink"))+
  theme_bw()+
  facet_wrap(~time)

 

 

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 更容易解释模型性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值