非線性模型之廣義相加模型(GAM)-原理與應(yīng)用概述
? Essentially, all models are wrong, but some are useful --George?Box
? 本質(zhì)上,所有模型都是錯(cuò)的,但有些是有用的。--喬治·波克斯
? 這句話出自英國(guó)著名的統(tǒng)計(jì)學(xué)家和教授George?Box,他是二十世紀(jì)下半葉的統(tǒng)計(jì)學(xué)大師之一,在實(shí)驗(yàn)設(shè)計(jì)、時(shí)間序列分析、統(tǒng)計(jì)控制和貝葉斯推斷等方面做出了重要貢獻(xiàn)。

他曾說(shuō)過(guò)所有模型都是錯(cuò)的,但有些是有用的。
有三點(diǎn)原因:
真實(shí)世界的復(fù)雜性:現(xiàn)實(shí)世界是復(fù)雜多變的,無(wú)法用一個(gè)簡(jiǎn)單的模型來(lái)捕捉所有的細(xì)節(jié)和變化。模型通常是對(duì)現(xiàn)實(shí)的一種抽象和簡(jiǎn)化,可能無(wú)法完美地反映所有情況。
數(shù)據(jù)的不確定性:模型的構(gòu)建基于對(duì)數(shù)據(jù)的觀察和收集,而數(shù)據(jù)本身往往包含噪聲和不確定性。這些不確定性會(huì)傳播到模型中,導(dǎo)致模型的預(yù)測(cè)或估計(jì)也帶有不確定性。
假設(shè)的限制:模型建立時(shí)通常會(huì)基于某些假設(shè),這些假設(shè)可能不完全符合真實(shí)情況。例如,線性回歸模型假設(shè)變量之間的關(guān)系是線性的,但實(shí)際情況可能更復(fù)雜。這些假設(shè)的限制可能導(dǎo)致模型在某些情況下產(chǎn)生偏差或錯(cuò)誤的預(yù)測(cè)。
? 每當(dāng)我們建立統(tǒng)計(jì)模型時(shí),我們都會(huì)在flexibility(靈活性) 和? interpretabilit(可解釋性)之間進(jìn)行權(quán)衡,在回歸分析中,線性模型易于解釋和使用,很容易理解其參數(shù)的含義,但是,我們通常需要對(duì)比線性關(guān)系所代表的更為復(fù)雜的線性進(jìn)行建模。另一方面機(jī)器學(xué)習(xí)模型,例如隨機(jī)森林,神經(jīng)網(wǎng)絡(luò),可以很好的預(yù)測(cè)復(fù)雜的關(guān)系。問(wèn)題是往往機(jī)器學(xué)習(xí)需要大數(shù)據(jù),其結(jié)果難以解釋,而且很少能對(duì)模型結(jié)果中進(jìn)行統(tǒng)計(jì)推斷。而GAM等非線性模型(Generalized Additive Model)為簡(jiǎn)單的線性回歸折中的方案。

? GAM可以適應(yīng)復(fù)雜的非線性關(guān)系并在這些情況下可以做出很好的預(yù)測(cè),但我們?nèi)匀荒軌蜻M(jìn)行統(tǒng)計(jì)推斷和理解并解釋我們的模型基本結(jié)構(gòu),以及為什么要做出預(yù)測(cè)。GAM讓我們可以靈活地對(duì)非線性關(guān)系進(jìn)行建模。
Generalized
? 廣義是指預(yù)測(cè)變量與因變量之間的關(guān)系可以是非線性的,并且可以通過(guò)非參數(shù)光滑函數(shù)來(lái)建模。光滑函數(shù)可以是任何形狀的曲線,不限于線性、二次或者其他特定形式的函數(shù)。以下為廣義加性模型常見(jiàn)的link函數(shù)。

? 目前大多數(shù)已發(fā)表的文章在建模時(shí)通常采用定量變量為Y進(jìn)行建模。而廣義使得GAM同樣可以探索定性變量為Y時(shí)的概率趨勢(shì)變化
Additive
? 下圖展示了GAM中的柔性平滑實(shí)際上是由許多Basis functions(基函數(shù))的和,每個(gè)基函數(shù)乘上一個(gè)系數(shù),每個(gè)系數(shù)都是模型中的一個(gè)參數(shù)(下圖我們假定所有的基礎(chǔ)函數(shù)相同),這些基函數(shù)組合起來(lái)就成了GAM。



? 在建模時(shí),我們通常需要制定自由度參數(shù),而這個(gè)參數(shù)就是通過(guò)平滑參數(shù)(k)或lambda(sp)值來(lái)控制模型的擬合程度,在未指定的情況下,SAS軟件的GAM/GAMPL和R的mgcv包中會(huì)根據(jù)優(yōu)化此平滑參數(shù),從而確定最佳的參數(shù)。


? 但隨著自由度的增加,曲線的形狀越來(lái)越復(fù)雜,越復(fù)雜的曲線我們?cè)诫y總結(jié)出趨勢(shì),而太過(guò)于簡(jiǎn)單的模型,又無(wú)法發(fā)現(xiàn)數(shù)據(jù)的規(guī)律,所以往往自由度的確定需要我們對(duì)數(shù)據(jù)進(jìn)行探索,以下為R和SAS分別構(gòu)建因變量為正態(tài)分布和二項(xiàng)分布時(shí)的基礎(chǔ)代碼。(SAS 僅能擬合二分類因變量,且無(wú)法建立帶混合效應(yīng)的GAM模型,對(duì)于多分類目前僅有R支持建模,且R還可以建立混合效應(yīng)的GAM模型)。
R code:
MODEL1 <- gam(data=hb2,sleep~s(high),method="REML")
MODEL2 <- gam(list(dc015~s(high),
????????????????? ~s(high),
????????????????? ~s(high),
???????????? data=hb,family=multinom(K=3),type="response")
SAS code:
proc gam data=diabetes;
model logCP = spline(Age) spline(BaseDeficit);
run;
proc gam data=hb plots=components(clm commonaxes);
class? Marriage(ref=first) residence(ref=first) gender(ref=first);
model da007_1 (event='1') = spline(high ,df=5) param(Marriage residence gender) / dist=binomial;
run;
? 其結(jié)果由參數(shù)部分和非參數(shù)部分組成,以下為SAS的:




以下為R的:



? 在R中g(shù)am.check可在控制臺(tái)和繪圖中提供多個(gè)輸出,首先報(bào)告了模型是否完全收斂,R找到了最佳的模型擬合參數(shù),當(dāng)我模型中參數(shù)太多而數(shù)據(jù)不足時(shí),可能會(huì)發(fā)生這種情況(在許多未收斂模型中都存在此問(wèn)題),如果模型未收斂,則結(jié)果可能不正確陷入局部最優(yōu)解。
? 該表顯示了對(duì)模型殘差模式的統(tǒng)計(jì)量檢驗(yàn),殘差的分布應(yīng)該是隨機(jī)的,每行報(bào)告了一個(gè)平滑項(xiàng)的檢驗(yàn)結(jié)果(見(jiàn)最后一行),當(dāng)我們的自由度(R=k SAS=df)遠(yuǎn)離k’+1時(shí)說(shuō)明我們的基函數(shù)數(shù)量太少,這只是一個(gè)近似測(cè)試,最終結(jié)果還是需要我們進(jìn)行可視化,除了查看P值(>0.05表示通過(guò)測(cè)試)以外,還要比較k和edf值(越接近越好)。所以在報(bào)告時(shí)我們應(yīng)報(bào)告不同k與edf值的比較,以告訴審稿人我們是如何確定我們的自由度的。

Explaining predictions by terms
library(broom)
predict(gam.hb,type="terms")[1,]
? 下圖輸出了我們模型的每個(gè)變量對(duì)預(yù)測(cè)概率的貢獻(xiàn),主要是使得我們能夠得到平滑項(xiàng)的貢獻(xiàn)大小。
我們還可以得到轉(zhuǎn)換后截距項(xiàng)的預(yù)測(cè)概率
#截距的預(yù)測(cè)概率
plogis(sum(predict(gam.hb,type="terms")[1, ])+coef(gam.hb)[1])
? 即X為0且其他變量為平均水平下時(shí),Y的建模概率為18.7%。
GAM建模過(guò)程中有許多細(xì)節(jié)需要提及,例如SAS的PROC GAM、PROC GAMPL以及R的gam(),bam()到底有什么區(qū)別?估計(jì)方法中“REML”又是什么?其結(jié)果如何解讀?模型的評(píng)價(jià)標(biāo)準(zhǔn)有哪些?如何抉擇?;定量變量和定性變量為因變量時(shí)結(jié)果又有什么不同?為什么GAM模型圖中的Y軸與我們建模時(shí)的Y的尺度不一致?后續(xù)推文我們會(huì)一一解答。
程序編寫(xiě):想不出吸睛好名字
文字編輯:想不出吸睛好名字
審閱:老陳
關(guān)注微信公眾號(hào),獲取更多相關(guān)內(nèi)容!
