数据cutoff值确定的两种方法:survminer包与ROC曲线
创作时间:
作者:
@小白创作中心
数据cutoff值确定的两种方法:survminer包与ROC曲线
引用
CSDN
1.
https://blog.csdn.net/hx2024/article/details/136984288
在数据分析和统计建模中,确定数据的cutoff值是一个常见的需求,特别是在生存分析和诊断测试中。本文将介绍两种常用的方法:使用survminer包中的surv_cutpoint函数和基于ROC曲线的方法。通过具体的数据分析示例,我们将展示如何使用这两种方法确定最佳cutoff值,并解释为什么它们得到的结果是一致的。
方法①:使用survminer包
survminer包提供了一个方便的函数surv_cutpoint,用于确定连续变量的最佳分界点。这个函数使用从“maxstat”R软件包中最大限度选择的等级统计数据,一次确定一个或多个连续变量的最佳分界点。这是一种以结果为导向的方法,提供了与结果(此处为存活率)关系最密切的分界点值。
示例数据分析
##采用包自带的示例数据##
rm(list = ls())
library(survival)
library(survminer)
data(myeloma)
head(myeloma)
?surv_cutpoint#查看函数
res.cut <- surv_cutpoint(myeloma,
time = "time", #生存时间
event = "event", #生存结局
variables = c("DEPDC1", "WHSC1", "CRIM1"))
summary(res.cut) #查看数据最佳截断点及统计量
#cutpoint statistic
#DEPDC1 279.8 4.275452
#WHSC1 3205.6 3.361330
#CRIM1 82.3 1.968317
#数据分布
plot(res.cut, "DEPDC1", palette = "npg")
Categorize variables
这里根据cutoff值分为高低分组
res.cat <- surv_categorize(res.cut)
#head(res.cat)
#生存曲线绘制#
fit <- survfit(Surv(time, event) ~DEPDC1, data = res.cat)#拟合生存分析
绘制生存曲线并显示P值
ggsurvplot(fit,
data = res.cat,
risk.table = TRUE,
pval = T)
方法②:ROC曲线绘制的最佳cutoff
这种方法可以在没有生存数据的时候进行使用,然后分析组间差异。连续性变量的组间差异分析_连续变量和连续变量差异性分析-CSDN博客
ROC及曲线面积汇总学习_roc csdn-CSDN博客
rm(list = ls())
library(pROC)
library(survival)
library(survminer)
#roc截断值确定属于是检验诊断效能
data(myeloma)##这里为了方便展示也是用这个数据进行测试
dat <- myeloma[,c(4,8)]#[1] "event" "DEPDC1"
roc1 <- roc(event ~ DEPDC1, data = dat)
#Setting levels: control = 0, case = 1
#Setting direction: controls < cases
attributes(roc1)#查看结果包含内容
roc1$auc#
#Area under the curve: 0.6272
ci.auc(roc1)
#95% CI: 0.5491-0.7053 (DeLong)
#求约登指数
roc.result <- data.frame(threshold = roc1$thresholds,
sensitivity = roc1$sensitivities,
specificity = roc1$specificities)
View(roc.result)
roc.result$youden <- roc.result$sensitivity + roc.result$specificity - 1
head(roc.result)
which.max(roc.result$youden)#找出约登指数最大的一行
roc.result[160,]##查看cutoff值
#threshold sensitivity specificity youden
#160 281.9 0.5714286 0.7096774 0.281106
##计算出CI值和cutoff点,然后进行标注
table(dat$DEPDC1 > 281.9)
#根据截断值划分分组#
myeloma$DEPDC11 <- ifelse(myeloma$DEPDC1 > 281.9,"high", "low")
绘制生存曲线
fit <- survfit(Surv(time, event) ~DEPDC11, data = myeloma)#拟合生存分析
#绘制生存曲线并显示P值
ggsurvplot(fit,
data = myeloma,
risk.table = TRUE,
pval = T)
结果一致性分析
surv_cutpoint()和ROC曲线都是用于确定最佳截断值的方法,它们之间存在一致性的原因如下:
- 目标相同:surv_cutpoint()和ROC曲线都旨在找到一个截断值,使得在该值之上或之下的预测结果能够最好地与实际观测结果相匹配。
- 基于模型性能:两种方法都是基于模型的性能来确定最佳截断值。surv_cutpoint()通过评估生存曲线的差异来选择最佳截断值,而ROC曲线通过计算真阳性率和假阳性率来评估分类模型的性能。
- 最大化敏感性和特异性:无论是surv_cutpoint()还是ROC曲线,都追求在预测中最大化敏感性和特异性。敏感性指的是正确识别阳性样本的能力,特异性指的是正确识别阴性样本的能力。
- 统计学原理:surv_cutpoint()和ROC曲线都基于统计学原理进行计算。surv_cutpoint()使用Kaplan-Meier估计和log-rank检验来评估生存曲线的差异,而ROC曲线使用真阳性率和假阳性率的比值来评估分类模型的性能。
综上所述,surv_cutpoint()确定的最佳截断值与ROC确定的最佳截断值是一致的,因为它们都追求在预测中最大化敏感性和特异性,并基于统计学原理来评估模型的性能。
其他方法
除了上述两种方法,还可以使用OptimalCutpoints包和cutpointr包来确定最佳cutoff值。这些包提供了更全面的功能和更多的统计方法,可以根据具体需求选择合适的方法。
截断值确定全能-cutoff package - 知乎 (zhihu.com)
热门推荐
金钻如何养殖(金钻的养殖方法和注意事项)
金钻浇水指南(春夏秋冬)
武汉315问题车展车型投诉前五名出炉,想买的注意一点
不怕没灵感!55个值得收藏的 Midjourney 生成图片关键词
【编译原理】NFA的确定化和最小化
硬件工程师的专业指南:如何选择最佳主机散热器及其作用详解
原材料管理全攻略:如何通过高效工具优化采购、库存和生产流程
如何查看电脑硬盘位数量?三种实用检查方法详解
无线打印机网络设置指南(简单步骤教你轻松配置无线打印机网络连接)
如何在项目过程管理环节中高效分配资源?
如何在期权市场中运用看涨策略?这种策略的风险和收益如何平衡?
什么是看涨期权?它在投资组合中的作用有哪些?
挪威将社交媒体最低年龄限制提高至15岁以保护儿童
“高棉的微笑”,世界七大奇迹之一,一生值得来一次的地方
澳大利亚薪酬领先职业概览
房屋租赁纠纷如何明确责任
国标铝型材在家具制造中的创新应用
黄山:世界文化与自然双重遗产的瑰宝
蒲地蓝消炎片功效和作用
车险报案的流程和注意事项有哪些?这些因素对理赔效率有何影响?
远离肺结节,从这三个生活习惯开始
“红楼”演出一票难求,“西游”消费持续升温——江苏如何打好名著经济牌?
北京人使用火的证据:揭示史前文明的重要物证
iPhone使用技巧:五大设置提升续航与性能
激光治疗眼睛的方法有哪些?如何选择适合的激光眼科治疗技术?
这家肿瘤医院提供0元心理援助:每个需求都值得被看见
浪琴康卡斯月相表调校指南:原理与技巧详解
青岛极地海洋世界游玩攻略,青岛极地海洋世界门票游玩攻略?
多维元素片21什么时候吃?医生的专业建议来了
如何提高标定精度 opencv