R語言機器學(xué)習(xí)與臨床預(yù)測模型78--多組ROC曲線比較

R小鹽準(zhǔn)備介紹R語言機器學(xué)習(xí)與預(yù)測模型的學(xué)習(xí)筆記

你想要的R語言學(xué)習(xí)資料都在這里, 快來收藏關(guān)注【科研私家菜】


01 ROC曲線比較

臨床預(yù)測模型可以采用多種算法,每種算法都有優(yōu)缺點递礼,因而當(dāng)我們針對具體問題去判斷選擇那種算法時,必須對不同的預(yù)測模型進(jìn)行重做評估槐雾。

為了簡化這個過程,我們使用caret包來生成并比較不同的模型與性能幅狮。
加載對應(yīng)的包與將訓(xùn)練控制算法設(shè)置為10折交叉驗證,重復(fù)次數(shù)為3

library(ROCR)
library(e1071)
library("pROC")
library(caret)
library("pROC")
control = trainControl(method = "repaetedcv",
   number = 10,
   repeats =3,
   classProbs = TRUE,
   summaryFunction = twoClassSummary)
# 使用glm在訓(xùn)練數(shù)據(jù)集上訓(xùn)練一個分類器
glm.model = train(churn ~ .,
   data= trainset,
   method = "glm",
   metric = "ROC",
   trControl = control)
# 使用svm在訓(xùn)練數(shù)據(jù)集上訓(xùn)練一個分類器
svm.model = train(churn ~ .,
   data= trainset,
   method = "svmRadial",
   metric = "ROC",
   trControl = control)

# 使用rpart函數(shù)查看rpart在訓(xùn)練數(shù)據(jù)集上的運行情況
rpart.model = train(churn ~ .,
   data = trainset,
   method = "svmRadial",
   metric = "ROC",
   trControl = control)

# 使用不同的已經(jīng)訓(xùn)練好的數(shù)據(jù)分類預(yù)測:
glm.probs = predict(glm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
svm.probs = predict(svm.model,testset[,!names(testset) %in% c("churn")],type = "prob")
rpart.probs = predict(rpart.model,testset[,!names(testset) %in% c("churn")],type = "prob")

生成每個模型的ROC曲線

glm.ROC = roc(response = testset[,c("churn")],
  predictor = glm.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(glm.ROC,type = "S",col = "red")
svm.ROC = roc(response = testset[,c("churn")],
  predictor = svm.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(svm.ROC,add = TRUE,col = "green")
rpart.ROC = roc(response = testset[,c("churn")],
  predictor = rpart.probs$yes,
  levels = levels(testset[,c("churn")]))
plot(rpart.ROC,add = TRUE,col = "blue")


將不同的分類模型的ROC曲線繪制在同一個圖中進(jìn)行比較株灸,設(shè)置訓(xùn)練過程的控制參數(shù)為重復(fù)三次的10折交叉驗證崇摄,模型性能的評估參數(shù)為twoClassSummary,然后在使用glm,svm,rpart,三種不同的方法建立分類模型。

從圖中可以看出慌烧,svm對訓(xùn)練集的預(yù)測結(jié)果(未調(diào)優(yōu))是三種分類算法里最好的逐抑。

效果如下:


02 多模型性能差異比較

可以通過重采樣的方法得對每一個匹配模型的統(tǒng)計信息,包括ROC曲線屹蚊,靈敏度與特異度厕氨,然后基于這些統(tǒng)計信息來比較不同模型的性能差異进每。
利用提前準(zhǔn)備好的glm分類模型,svm分類模型命斧,rpart分類模型:
使用resample函數(shù)生成各個模型的統(tǒng)計信息田晚,再調(diào)用summary函數(shù)輸出三個模型在ROC、靈敏度及特異性上的統(tǒng)計信息国葬。
使用dotplot方法處理重采樣結(jié)果來觀測不同模型ROC差異贤徒,最后,采用箱線圖在同一張圖上對ROC汇四、靈敏度及特異方面的差別進(jìn)行比較接奈。

cv.values = resamples(list(glm = glm.model,svm =svm.model,rpart = rpart.model))
> summary(cv.values)
Call:
summary.resamples(object = cv.values)
Models: glm, svm, rpart 
Number of resamples: 30 
ROC 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.7597790 0.7927740 0.8040455 0.8106454 0.8347961 0.8760824 0
svm 0.8191998 0.8786439 0.8945208 0.8947360 0.9196775 0.9562556 0
rpart 0.6064540 0.7150320 0.7608241 0.7556544 0.8086731 0.8554750 0
Sens 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.08823529 0.1764706 0.2058824 0.2124930 0.2516807 0.3235294 0
svm 0.44117647 0.5294118 0.5882353 0.5956863 0.6470588 0.7941176 0
rpart 0.20000000 0.4117647 0.4705882 0.4787955 0.5514706 0.7352941 0
Spec 
  Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
glm 0.9393939 0.9645119 0.9721581 0.9702721 0.9796954 0.9898477 0
svm 0.9494949 0.9695431 0.9771574 0.9755004 0.9847716 0.9898990 0
rpart 0.9492386 0.9746193 0.9796954 0.9780359 0.9848485 1.0000000 0

# 使用dotplot函數(shù)繪制重采樣在ROC曲線度量中的結(jié)果
dotplot(cv.values,metric = "ROC")
# 使用箱線圖繪制重采樣結(jié)果
bwplot(cv.values,layout=c(3,1))

效果如下:



03 時間依賴性ROC曲線繪制

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

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

## 定義一個輔助函數(shù),以在不同的時間進(jìn)行評估
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中放相關(guān)的值
      df_survivalROC = map(survivalROC, function(obj) {
      
## 繪圖
 ggplot(mapping = aes(x = FP, y = TP)) +
  geom_point() +
  geom_line() +
   facet_wrap( ~ t) +

## 定義一個輔助函數(shù)通孽,以在不同的時間進(jìn)行評估
 
## 每180天評估一次
 
      ## 提取AUC
      auc = map_dbl(risksetROC, magrittr::extract2, "AUC"),
      ## 在data_frame中放相關(guān)的值
      df_risksetROC = map(risksetROC, function(obj) {
        ## 標(biāo)記欄
        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) +

關(guān)注R小鹽序宦,關(guān)注科研私家菜(VX_GZH: SciPrivate),有問題請聯(lián)系R小鹽背苦。讓我們一起來學(xué)習(xí) R語言機器學(xué)習(xí)與臨床預(yù)測模型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互捌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糠惫,更是在濱河造成了極大的恐慌疫剃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼讽,死亡現(xiàn)場離奇詭異巢价,居然都是意外死亡,警方通過查閱死者的電腦和手機固阁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門壤躲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人备燃,你說我怎么就攤上這事碉克。” “怎么了并齐?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵漏麦,是天一觀的道長。 經(jīng)常有香客問我况褪,道長撕贞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任测垛,我火速辦了婚禮捏膨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己号涯,他們只是感情好目胡,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著链快,像睡著了一般誉己。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上久又,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天巫延,我揣著相機與錄音,去河邊找鬼地消。 笑死炉峰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脉执。 我是一名探鬼主播疼阔,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼半夷!你這毒婦竟也來了婆廊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤巫橄,失蹤者是張志新(化名)和其女友劉穎淘邻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湘换,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡宾舅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彩倚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筹我。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帆离,靈堂內(nèi)的尸體忽然破棺而出蔬蕊,到底是詐尸還是另有隱情,我是刑警寧澤哥谷,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布岸夯,位于F島的核電站,受9級特大地震影響们妥,放射性物質(zhì)發(fā)生泄漏猜扮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一王悍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧餐曼,春花似錦压储、人聲如沸鲜漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孕似。三九已至,卻和暖如春刮刑,著一層夾襖步出監(jiān)牢的瞬間喉祭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工雷绢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泛烙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓翘紊,卻偏偏與公主長得像蔽氨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帆疟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容