廣義相加模型(GAM)及R實現

當解釋變量與效應變量間關係不明確時,通常可以使用廣義相加模型來檢測比變量間是否具有非線性關係。

廣義相加模型通過光滑樣條函數 、核函數或者局部迴歸光滑函數,對變量進行擬合。GAM採用模型中的每個預測變量並將其分成多個部分(由'結'​​分隔),然後將多項式函數分別擬合到每個部分。GAM的遠離是最小化殘差(擬合優度)同時最大化簡約性(最低可能自由度)。迴歸模型中部分或全部的自變量採用平滑函數,降低線性設定帶來的模型風險,對模型的假定不嚴,如不需要假定自變量線性相關於因變量(線性或非線性都可以),並且解決logistic迴歸當解釋變量個數較多時容易引起維度災難(Curse of dimensionality)。

R中的實現主要有兩個包:gam和mgcv,前者爲舊版本的包,後者爲新版本。兩個包的基本建模過程是相似的(兩個函數都是gam ;要小心同時加載兩個庫),但幕後計算方法不同,優化和模型的參數也不同。當在同一數據集上使用相同的模型結構時,預計結果會略有不同。

具體解釋可參見:https://blog.csdn.net/textboy/article/details/47277131

這裏以mgcv包爲例

1.構建基礎模型

gam(y~s(x,k = , bs =)) / gam(y~te(x,k = , bs =))

k: sets up the dimensionality of the smoothing matrix for each term. Penalized regression smoothers. Using a substantially increased k to see if there is pattern in the residuals that could potentially be explained by increasing k. Default任意數字(normally 10 degree of freedom)。

bs: See smooth terms for the full list. tp – DEFAULT, thin plate regression spline,cr – penalized cubic regression spline三次樣條, cs – shrinkage version of cr,cc – cyclic cubic regression spline, ps – P-spline,cp – cyclic p-spline, ad – adaptive smoothing, fs – factor smooth interaction.

s: smooth s(covariate, edf); te: tensor product smooth
 

install.packages('mgcv')
library(mgcv)
mode<-gam(y~s(x,df),family="",data)

2. 在基礎模型構建後,最重要的是確定模型自由度。確定自由度有幾種方式:

1)基於生物學知識和專家經驗;2)赤池信息準則(AIC),根據AIC最小確定自由度;3)根據殘差獨立原則,最小化殘差自相關確定自由度;4)廣義交叉驗證

3.構建模型

4.模型比較與評價

在R中,GAM的比較與評價可以用aov(model1,model2,test="Chisq")或者AIC(model1,model2)來比較。通過比較選出最優模型後,可通過觀察模型中非參數平滑函數的自由度改變對解釋變量的影響大小來評判模型是否穩健,又稱敏感性分析。

5.模型參數的解釋

以下面例子爲例:

library(mgcv)      #加載mgcv軟件包,因爲gam函數在這個包裏
Data <- read.delim("Rice_insect.txt")     #讀取txt數據,存到Data變量中
Data <- as.matrix(Data)     #轉爲矩陣形式
#查看Data數據:Data,查看第2列:Data[,2],第2行:Data[2,]<br>
Adult<-Data[,2]
Day<-Data[,3]
Precipitation<-Data[,4]<br>
result1 <- gam(log(Adult) ~ s(Day))     #此時,Adult爲相應變量,Day爲解釋變量
summary(result1) 

結果爲

 

Day的影響水平p-value=0.473,解釋能力爲14.3%,說明影響不明顯。

其中,edf爲自由度,理論上,當自由度接近1時,表示是線性關係;當自由度比1大,則表示爲曲線關係。

result2 <- gam(log(Adult) ~ s(Precipitation))
summary(result2)

此時p-value爲0.0774,說明該因子在P<0.05水平下影響顯著。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章