拓端tecdat|R语言中生存分析模型与时间依赖性ROC曲线可视化

本文主要是介绍拓端tecdat|R语言中生存分析模型与时间依赖性ROC曲线可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近我们被客户要求撰写关于生存分析模型的研究报告,包括一些图形和统计输出。

视频:R语言生存分析原理与晚期肺癌患者分析案例

R语言生存分析Survival analysis原理与晚期肺癌患者分析案例

人们通常使用接收者操作特征曲线(ROC)进行二元结果逻辑回归。但是,流行病学研究中感兴趣的结果通常是事件发生时间。使用随时间变化的时间依赖性ROC可以更全面地描述这种情况下的预测模型。

时间依赖性ROC定义

令 Mi为用于死亡率预测的基线(时间0)标量标记。 当随时间推移观察到结果时,其预测性能取决于评估时间 t。直观地说,在零时间测量的标记值应该变得不那么相关。因此,ROC测得的预测性能(区分)是时间t的函数 。 

累积病例

累积病例/动态ROC定义了在时间t 处的阈值c处的 灵敏度和特异性,  如下所示。

累积灵敏度将在时间t之前死亡的视为分母(疾病),而将标记值高于 c 的作为真实阳性(疾病阳性)。动态特异性将在时间t仍然活着作为分母(健康),并将标记值小于或等于 c 的那些作为真实阴性(健康中的阴性)。将阈值 c 从最小值更改为最大值会在时间t处显示整个ROC曲线 。

新发病例

新发病例ROC1在时间t 处以阈值 c定义灵敏度和特异性,  如下所示。

累积灵敏度将在时间t处死亡的人  视为分母(疾病),而将标记值高于 Ç 的人视为真实阳性(疾病阳性)。

数据准备

我们以数据 包中的dataset3survival为例。事件发生的时间就是死亡的时间。Kaplan-Meier图如下。

## 变成data_frame
data <- as_data_frame(data)
## 绘图
plot(survfit(Surv(futime, fustat) ~ 1,data = data)

可视化结果:

在数据集中超过720天没有发生任何事件。


## 拟合cox模型
coxph(formula = Surv(futime, fustat) ~ pspline(age, df = 4) + 
##获得线性预测值predict(coxph1, type = "lp")

累积病例

实现了累积病例


## 定义一个辅助函数,以在不同的时间进行评估
ROC_hlp <- function(t) {survivalROC(Stime        status        marker        predict.time = t,method       = "NNE",span = 0.25 * nrow(ovarian)^(-0.20))
}
## 每180天评估一次
ROC_data <- data_frame(t = 180 * c(1,2,3,4,5,6)) %>%mutate(survivalROC = map(t, survivalROC_helper),## 提取AUCauc = map_dbl(survivalROC, magrittr::extract2, "AUC"),## 在data_frame中放相关的值df_survivalROC = map(survivalROC, function(obj) {## 绘图ggplot(mapping = aes(x = FP, y = TP)) +geom_point() +geom_line() +facet_wrap( ~ t) +

可视化结果:

180天的ROC看起来是最好的。因为到此刻为止几乎没有事件。在最后观察到的事件(t≥720)之后,AUC稳定在0.856。这种表现并没有衰退,因为高风险分数的人死了。

新发病例

实现新发病例


## 定义一个辅助函数,以在不同的时间进行评估## 每180天评估一次## 提取AUCauc = map_dbl(risksetROC, magrittr::extract2, "AUC"),## 在data_frame中放相关的值df_risksetROC = map(risksetROC, function(obj) {## 标记栏marker <- c(-Inf, obj[["marker"]], Inf)## 绘图ggplot(mapping = aes(x = FP, y = TP)) +geom_point() +geom_line() +geom_label(data = risksetROC_data %>% dplyr::select(t,auc) %>% unique,facet_wrap( ~ t) +

可视化结果:

这种差异在后期更为明显。最值得注意的是,只有在每个时间点处于风险集中的个体才能提供数据。所以数据点少了。表现的衰退更为明显,也许是因为在那些存活时间足够长的人中,时间零点的风险分没有那么重要。一旦没有事件,ROC基本上就会趋于平缓。

结论

总之,我们研究了时间依赖的ROC及其R实现。累积病例ROC可能与风险 (累积发生率)预测模型的概念更兼容 。新发病例ROC可用于检查时间零标记在预测后续事件时的相关性。

参考

  1. Heagerty,Patrick J. and Zheng,Yingye,  Survival Model Predictive Accuracy and ROC Curves,Biometrics,61(1),92-105(2005). doi:10.1111 / j.0006-341X.2005.030814.x.


这篇关于拓端tecdat|R语言中生存分析模型与时间依赖性ROC曲线可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1