关于数据cutoff值确定多种方法(自备)

2024-03-24 13:44

本文主要是介绍关于数据cutoff值确定多种方法(自备),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

方法①survminer 包

方法②ROC曲线绘制的最佳cutoff

其他

方法①survminer 包

使用从“maxstat”R软件包中最大限度选择的等级统计数据,一次确定一个或多个连续变量的最佳分界点。这是一种以结果为导向的方法,提供了与结果(此处为存活率)关系最密切的分界点值。 surv_cutpoint():使用“maxstat”确定每个变量的最佳切割点。

surv _ categorize():根据surv_cutpoint()返回的切割点划分每个变量值。

示例数据分析

##采用包自带的示例数据##
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")

# 3. 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)

感谢木舟笔记:Q&A | R做生存分析如何取最佳cutoff(截断) - 知乎 (zhihu.com)


方法②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 < casesattributes(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曲线都是用于确定最佳截断值的方法,它们之间存在一致性的原因如下:

  1. 目标相同:surv_cutpoint()和ROC曲线都旨在找到一个截断值,使得在该值之上或之下的预测结果能够最好地与实际观测结果相匹配。

  2. 基于模型性能:两种方法都是基于模型的性能来确定最佳截断值。surv_cutpoint()通过评估生存曲线的差异来选择最佳截断值,而ROC曲线通过计算真阳性率和假阳性率来评估分类模型的性能。

  3. 最大化敏感性和特异性:无论是surv_cutpoint()还是ROC曲线,都追求在预测中最大化敏感性和特异性。敏感性指的是正确识别阳性样本的能力,特异性指的是正确识别阴性样本的能力。

  4. 统计学原理:surv_cutpoint()和ROC曲线都基于统计学原理进行计算。surv_cutpoint()使用Kaplan-Meier估计和log-rank检验来评估生存曲线的差异,而ROC曲线使用真阳性率和假阳性率的比值来评估分类模型的性能。

综上所述,surv_cutpoint()确定的最佳截断值与ROC确定的最佳截断值是一致的,因为它们都追求在预测中最大化敏感性和特异性,并基于统计学原理来评估模型的性能。


其他

使用OptimalCutpoints包,cutpointr包

截断值确定全能-cutoff package - 知乎 (zhihu.com)

这篇关于关于数据cutoff值确定多种方法(自备)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841764

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查