广义可加模型( generalized additional model,GAM)是对传统广义线性模型的非参数拓展,可有效处理解释变量与效应变量间复杂的非线性关系. 它有许多优点:能直接处理响应变量与多个解释变量之间的非线性关系;能应用非参数的方法检测数据结构,并找出其中的规律,从而得到更好的预测结果;以数据而不是模型“说话”; 不需要假定数据分布等;因而更适用于生态学,特别是调查数据。近年来,广义可加模型在生态学中已经得到了广泛使用.
GAM 是广义线性模型(generalized linear mod-el,GLM)的半参数扩展(Hastie et al.,1990),其假设函数是相加的,函数的组成成分是光滑函数(smoothfunctions),基本模型如下:
G[E(Y)]=b 0+f1 (x 1 )+…+f m (X m )
式中:E(Y)为应变量的数学期望值;G[]为连接函数,连接函数的选择依赖于应变量的分布形式;b 0 为截距;f 1 …f m 为 m 个环境变量 X 的平滑函数,通常使用光滑样条函数(smoothing spline function)拟合,因子的重要性可以通过平滑函数的自由度来简单判断:自由度高表明因子重要性高。
可以进行广义可加模型的R包有很多种,我们今天使用介绍VGAM包来进行拟合广义可加模型,VGAM包是个功能非常强大的R包。继续使用我们的臭氧数据,从既往文章中我们得知,臭氧和高度呈非线性关系。
首先加载R包和导入我们的数据
library(foreign)
library(VGAM)
library(viridis)
library(car)
be <- read.spss("E:/r/test/ozone.sav",
use.value.labels=F, to.data.frame=T)
数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height(ibh)反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的。
假设我们想知道臭氧浓度和高度的相关性,直接进行模型拟合,df表示光滑样条的灵活度,
mgam<-vgam(ozon~dpg+s(ibh,df=3),data=be,family=uninormal(),model=T)
解析模型和查看系数,VGAM包可以生成两个截距,一个是我们通常说的截距,另外一个是基于方差的自然对数值
summary(mgam)
coef(mgam)
我们可以使用car包的linearHypothesis函数对模型进行参数假设检验
绘制图形
纵轴表示平滑函数值,括号中的数字表示估计自由度df,虚线表示可信区间上下限。
我们可以使用viridis包的viridis函数对线条进行修改
par(mfrow=c(1,2))
plot(mgam,se=T,locl=viridis(4)[1],scol=viridis(4)[2])
由上图看出,臭氧浓度和高度关系并不是越高越浓,而是在一定高度内臭氧浓度最高。
更多精彩文章请关注公众号:零基础说科研