1. 程式人生 > 程式設計 >詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

R語言簡介

R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、原始碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。

人們通常使用接收者操作特徵曲線(ROC)進行二元結果邏輯迴歸。但是,流行病學研究中感興趣的結果通常是事件發生時間。使用隨時間變化的時間依賴性ROC可以更全面地描述這種情況下的預測模型。

時間依賴性ROC定義

令 Mi為用於死亡率預測的基線(時間0)標量標記。 當隨時間推移觀察到結果時,其預測效能取決於評估時間 t。直觀地說,在零時間測量的標記值應該變得不那麼相關。因此,ROC測得的預測效能(區分)是時間t的函式 。

累積病例

累積病例/動態ROC定義了在時間t

處的閾值c處的 靈敏度和特異性, 如下所示。

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

累積靈敏度將在時間t之前死亡的視為分母(疾病),而將標記值高於 c 的作為真實陽性(疾病陽性)。動態特異性將在時間t仍然活著作為分母(健康),並將標記值小於或等於 c 的那些作為真實陰性(健康中的陰性)。將閾值 c 從最小值更改為最大值會在時間t處顯示整個ROC曲線 。

新發病例

新發病例ROC1在時間t 處以閾值 c定義靈敏度和特異性, 如下所示。

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

累積靈敏度將在時間t處死亡的人 視為分母(疾病),而將標記值高於 Ç 的人視為真實陽性(疾病陽性)。

資料準備

我們以資料 包中的dataset3survival為例。事件發生的時間就是死亡的時間。Kaplan-Meierhttp://www.cppcns.com

圖如下。

## 變成data_frame
data <- as_data_frame(data)
## 繪圖
plot(survfit(Surv(futime,fustat) ~ 1,data = data)

視覺化結果:

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

在資料集中超過720天沒有發生任何事件。

## 擬合cox模型
coxph(formula = Surv(futime,fustat) ~ pspline(age,df = 4) + 
##獲得線性預測值
 predict(coxph1,type = "lp")

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

累積病例

實現了累積病例

## 定義一個輔助函式,以在不同的時間進行評估
ROC_hlp <- function(t) {
  survivalROC(Stime    
        status    
        marker    
        predict.time = t,method    = "NNEhttp://www.cppcns.com
",程式設計客棧 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(survivhttp://www.cppcns.comalROC,function(obj) { ## 繪圖 ggplot(mappihttp://www.cppcns.comng = aes(x = FP,y = TP)) + geom_point() + geom_line() + facet_wrap( ~ t) +

視覺化結果:

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

180天的ROC看起來是最好的。因為到此刻為止幾乎沒有事件。在最後觀察到的事件(t≥720)之後,AUC穩定在0.856。這種表現並沒有衰退,因為高風險分數的人死了。

新發病例

實現新發病例

## 定義一個輔助函式,以在不同的時間進行評估
 
## 每180天評估一次
 
      ## 提取AUC
      auc = map_dbl(risksetROC,## 在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) +

視覺化結果:

詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化

這種差異在後期更為明顯。最值得注意的是,只有在每個時間點處於風險集中的個體才能提供資料。所以資料點少了。表現的衰退更為明顯,也許是因為在那些存活時間足夠長的人中,時間零點的風險分沒有那麼重要。一旦沒有事件,ROC基本上就會趨於平緩。

結論

總之,我們研究了時間依賴的ROC及其R實現。累積病例ROC可能與風險 (累積發生率)預測模型的概念更相容 。新發病例ROC可用於檢查時間零標記在預測後續事件時的相關性。

參考

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.

到此這篇關於詳解R語言中生存分析模型與時間依賴性ROC曲線視覺化的文章就介紹到這了,更多相關R語言生存分析曲線視覺化內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!