廣義線性模型二(Generalized Linear Models吐句,GLM)

在上一篇廣義線性模型一(Generalized Linear Models洽糟,GLM) - 簡書 (jianshu.com)臭家,我們大致了解了glm的應(yīng)用范圍呵恢,并從三個方面探索模型構(gòu)建:

1种蘸、如何使用glm構(gòu)建logistics回歸
2墓赴、如何提取模型中的參數(shù)
3竞膳、不同模型之間如何比較

接下來,我們繼續(xù)從四個方面談一談logistics回歸:

1诫硕、模型可視化(列線圖)
2坦辟、使用構(gòu)建的模型預(yù)測結(jié)局
3、評價模型的效能
區(qū)分度(discrimination ability):C指數(shù)章办、ROC曲線锉走、NRI、IDI
一致性(calibration ability):校準曲線
4藕届、臨床效能分析(Decision Curve Analysis):DCA, 生存曲線

【參考】rms.pdf (r-project.org)


以上四個方面并不能完全分開來講挪蹭,因此我將可以使用同一R代碼的部分一起講解,如下:列線圖的構(gòu)建和校準曲線休偶、DCA放在一起梁厉,預(yù)測結(jié)局變量及ROC放在一起。

一踏兜、列線圖及校準曲線

在上一篇文章中词顾,構(gòu)建logistic回歸我們使用了glm()函數(shù),構(gòu)建方式如下:
fit.reduced <- glm(ynaffair ~ age + yearsmarried + religiousness + rating, data=Affairs, family=binomial())
當(dāng)我們要對其進行可視化時碱妆,就像我在cox回歸模型的展示中說的肉盹,想要使用rms繪制列線圖,就只能使用rms來構(gòu)建模型

survival包和rms包都生成原材料比如都養(yǎng)豬疹尾,同時rms還做香腸上忍,rms還只用自己家的豬。害,所以沒辦法绿渣,你家豬再優(yōu)質(zhì)因痛,想吃香腸就只能去找rms包
survival包學(xué)習(xí)筆記——cox回歸(一) - 簡書 (jianshu.com)

列線圖

繼續(xù)上一篇構(gòu)建的模型,我們來繪制列線圖

library(rms)
ddist <- datadist(Affairs)
options(datadist='ddist')
fit.reduced1 <- lrm(ynaffair ~ age + yearsmarried + religiousness + 
                      rating, data=Affairs,x = T,y = T)
summary(fit.reduced1 )
nomo <- nomogram(fit.reduced1,
                 lp = F,                                #是否為線性
                 fun = plogis,                          #系數(shù)轉(zhuǎn)換的具體過程
                 fun.at = c(0.1,0.2,0.3,0.5,0.7,0.9),   #最后一行的分段
                 funlabel = "離婚率" )                   #最后一行的名字
plot(nomo)

image.png

這里我們每次使用只需要更改數(shù)據(jù)集的名字即可啦它抱!


校準曲線

一致性分析:校準曲線

首先繪制校準曲線,校準曲線所依賴的模型是上步rms::lrm()構(gòu)建的模型朴艰,因此繪制完列線圖可以直接繪制校準曲線观蓄。

library(rms)
ddist <- datadist(Affairs)
options(datadist='ddist')
fit.reduced1 <- lrm(ynaffair ~ age + yearsmarried + religiousness + 
                      rating, data=Affairs,x = T,y = T)
summary(fit.reduced1 )


calb <- calibrate(fit.reduced1, 
                  cmethod='hare',    #logistic回歸使用的方法
                  method='boot',    #使用抽樣的辦法,抽樣1000次
                  B=1000)
plot(calb,xlim=c(0,1.0),ylim=c(0,1.0))

image.png

二祠墅、模型預(yù)測及ROC曲線繪制

模型已經(jīng)擬合好了侮穿,那么他是否可以根據(jù)我們的變量來預(yù)測結(jié)局呢?

結(jié)局預(yù)測

那是當(dāng)然毁嗦,使用函數(shù)predict

S3 method for class 'glm'

predict(object, newdata = NULL, type = c("link", "response", "terms"), se.fit = FALSE, dispersion = NULL, terms = NULL, na.action = na.pass, ...)

S3 method for class 'lm'

predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, interval = c("none", "confidence", "prediction"), level = 0.95, type = c("response", "terms"), terms = NULL, na.action = na.pass, pred.var = res.var/weights, weights = 1, ...)

參數(shù)介紹

fit: 這里fit就是剛剛擬合的函數(shù)亲茅,
newdata: 可以是多種多樣的
1、可以是原來的數(shù)據(jù),預(yù)測后可以用來繪制ROC曲線
2克锣、可以是新的數(shù)據(jù)茵肃,來計算敏感性、特異性
3袭祟、可以是自己生成的數(shù)據(jù)验残,來展示某一變量的影響情況
type: 預(yù)測數(shù)據(jù)的類型
1、response巾乳,fit是線性模型時您没,返回值是規(guī)范化后的連續(xù)值; fit是二分類模型時,返回值是發(fā)生結(jié)局變量的可能性(probabilities)
2胆绊、term: 返回一個矩陣氨鹏,里面包含這個模型中的每個參數(shù)項的預(yù)測值,每一項之和或者其他運算得到返回值(formular中的y值)

實戰(zhàn)

這三個參數(shù)辑舷,已經(jīng)夠我們使用的了喻犁,接下來我們實戰(zhàn)看一下

library(rms)
library(xlsx)
library(tidyverse)

fit <- glm(HPD與否~.,data = data,family = binomial())
summary(fit)
image
a <- predict(fit,newdata = data,type = "terms",se.fit = T)
b <- predict(fit,newdata = data,type = "response")
type="terms"

term="response"

計算C指數(shù)及ROC曲線繪制

區(qū)分度——C指數(shù)

rms包計算C指數(shù)

library(rms)
ddist <- datadist(Affairs)  #將數(shù)據(jù)組裝
options(datadist='ddist')
fit.reduced1 <- lrm(ynaffair ~ age + yearsmarried + religiousness + 
                      rating, data=Affairs,x = T,y = T)
 #相對于基礎(chǔ)包中的glm,這里多了 x 和 y 參數(shù)
fit.reduced1 
image.png

ROCR包繪制ROC曲線

這里使用ROCR必須依賴rms得到的fit何缓,同列線圖

library(rms)
ddist <- datadist(Affairs)  #將數(shù)據(jù)組裝
options(datadist='ddist')
fit.reduced1 <- lrm(ynaffair ~ age + yearsmarried + religiousness + 
                      rating, data=Affairs,x = T,y = T)


Affairs$predvalue<-predict(fit.reduced1)
#這里已經(jīng)在前文中包裝了相關(guān)的數(shù)據(jù)肢础,所以無需賦值newdata,type
library(ROCR)
pred <- prediction(Affairs$predvalue, Affairs$ynaffair) 
 #結(jié)局變量必須是二分類變量(0碌廓,1)传轰,否則結(jié)果會報錯
perf<- performance(pred,"tpr","fpr")
plot(perf)
abline(0,1)
auc <- performance(pred,"auc")
auc@y.values #auc即是C-statistics
perf
AUC
ROC

ROCR得到perf后,使用plot(perf)繪制的ROC曲線較簡單谷婆,接下來我們使用pROC優(yōu)化ROC曲線

pROC包

輸入變量只需要predict得到的預(yù)測值和準確值

library(pROC)
pdf(file = 'roc.pdf',width = 5,height = 5)
plot.roc(Affairs$ynaffair~Affairs$predvalue,    #輸入變量慨蛙,實際變量~預(yù)測變量
         data = Affairs,
         axes=T, ## 是否顯示xy軸
         legacy.axes=T, ## TRUE為1-specificity,FLASE為specificity
         main="ROC for HPD與否", ## Title
         
         col= "black", ## 曲線顏色
         lty=1, ## 曲線形狀
         lwd=3, ## 曲線粗細
         identity=T, ## 是否顯示對角線
         identity.col="black", ## 對角線顏色
         identity.lty=2, ## 對角線形狀
         identity.lwd=2, ## 對角線粗細
         
         print.thres=TRUE, ## 是否輸出cut-off值
         print.thres.best.method="youden",
         print.thres.pch=20, ## cut-off點的形狀
         print.thres.col="black", ## cut-off點和文本的顏色
         print.thres.cex=1.2, ## 文本放大的倍數(shù)(比起原始值) 
         #print.thres.pattern="%.3f", ## cut-off文本的格式
         #print.thres.pattern.cex=1.2,
         
         print.auc=T, ## 是否顯示AUC
         ci=T, ## 是否顯示CI
         print.auc.pattern="AUC = 0.704", ## 展示AUC的格式
         print.auc.x=0.4, ## AUC值的X位置
         print.auc.y=0.15, ## AUC值的Y位置
         print.auc.cex=1.2, ## AUC值的放大倍數(shù)
         print.auc.col='black', ## ACU值的顏色
         auc.polygon=TRUE, ## 是否將ROC下面積上色
         auc.polygon.col='white', 
         auc.polygon.density=NULL,
         auc.polygon.lty=2,
         auc.polygon.angle=45,
         auc.polygon.border='black',
         
         max.auc.polygon=TRUE,
         max.auc.polygon.col='white',
         max.auc.polygon.lty=2
)
dev.off()
ROC曲線

最后

由于篇幅的問題,剩余的內(nèi)容繼續(xù)在下一篇中分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纪挎,一起剝皮案震驚了整個濱河市期贫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌异袄,老刑警劉巖通砍,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烤蜕,居然都是意外死亡封孙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門讽营,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虎忌,“玉大人,你說我怎么就攤上這事橱鹏∧ご溃” “怎么了堪藐?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挑围。 經(jīng)常有香客問我庶橱,道長,這世上最難降的妖魔是什么贪惹? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮寂嘉,結(jié)果婚禮上奏瞬,老公的妹妹穿的比我還像新娘。我一直安慰自己泉孩,他們只是感情好硼端,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寓搬,像睡著了一般珍昨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上句喷,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天镣典,我揣著相機與錄音,去河邊找鬼唾琼。 笑死兄春,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锡溯。 我是一名探鬼主播赶舆,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祭饭!你這毒婦竟也來了芜茵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤倡蝙,失蹤者是張志新(化名)和其女友劉穎九串,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悠咱,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蒸辆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了析既。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬贡。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眼坏,靈堂內(nèi)的尸體忽然破棺而出拂玻,到底是詐尸還是另有隱情酸些,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布檐蚜,位于F島的核電站魄懂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闯第。R本人自食惡果不足惜市栗,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咳短。 院中可真熱鬧填帽,春花似錦、人聲如沸咙好。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勾效。三九已至嘹悼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間层宫,已是汗流浹背杨伙。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卒密,地道東北人缀台。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像哮奇,于是被迫代替她去往敵國和親膛腐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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