乐趣区

关于算法:R语言中生存分析模型的时间依赖性ROC曲线可视化

原文链接:http://tecdat.cn/?p=20650 

人们通常应用接收者操作特色曲线(ROC)进行二元后果逻辑回归。然而,流行病学钻研中感兴趣的后果通常是事件产生工夫。应用随工夫变动的工夫相干 ROC 能够更全面地形容这种状况下的预测模型。

工夫相干的 ROC 定义

令 Mi 为用于死亡率预测的基线(工夫 0)标量标记。当随时间推移察看到后果时,其预测性能取决于评估工夫 _t_。直观地说,在零工夫测量的标记值应该变得不那么相干。因而,ROC 测得的预测性能(辨别)是工夫_t_的函数。

累积病例

累积病例 / 动静 ROC 定义了在工夫_t_ 处的阈值_c_处的 灵敏度和特异性,如下所示。

累积灵敏度将在工夫_t_之前死亡的视为分母(疾病),而将标记值高于 _c_ 的作为实在阳性(疾病阳性)。动静特异性将在工夫_t_依然活着作为分母(衰弱),并将标记值小于或等于 _c_ 的那些作为实在阴性(衰弱中的阴性)。将阈值 _c_ 从最小值更改为最大值会在工夫_t_处显示整个 ROC 曲线。

新发病例

新发病例 ROC1 在工夫_t_ 处以阈值 _c_定义灵敏度和特异性,如下所示。

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

数据筹备

咱们以 数据  包中的 ovarian dataset3 survival 为例。事件产生的工夫就是死亡的工夫。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),
           ## 提取 AUC
           auc = 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 天评估一次
 
            ## 提取 AUC
           auc = 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 基本上就会趋于平缓。

论断

总之,咱们钻研了工夫依赖的 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.
    • *

最受欢迎的见解

1.R 语言绘制生存曲线预计 | 生存剖析 | 如何 R 作生存曲线图

2.R 语言生存剖析可视化剖析

3.R 语言如何在生存剖析与 Cox 回归中计算 IDI,NRI 指标

4.r 语言中应用 Bioconductor 剖析芯片数据

5.R 语言生存剖析数据分析可视化案例

6.r 语言 ggplot2 误差棒图疾速指南

7.R 语言绘制性能富集泡泡图

8.R 语言如何找到患者数据中具备差别的指标?(PLS—DA 剖析)

9.R 语言中的生存剖析 Survival analysis 早期肺癌患者 4 例

退出移动版