R语言|广义相加模型(GAM)

转自个人微信公粽号【易学统计】的统计学习笔记:R软件:广义相加模型(GAM)

01解决何种问题

前面一期和大家分享如何运用样条回归处理遇到的非线性问题,但这适合处理单个因变量Y对应一个自变量X的问题,而现实情况是,我们常常要处理多个自变量和一个因变量之间的关系,除此以外,虽然通过做散点图能发现非线性关系,但很难归属它的形式,广义线性模型中的多项式回归,由于其不好解释的系数,降低了模型实用性。

因此本章分享的广义相加模型提供了一种优选方案,它可以研究多个自变量与一个因变量之间关系,同时不需要预先知晓因变量和自变量的关系,而使用非线性平滑项来拟合模型。

02GAM模型说明

广义相加模型(GAM:Generalized Additive Model),它模型公式如下:有p个自变量,其中X1与y是线性关系,其他变量与y是非线性关系,我们可以对每个变量与y拟合不同关系,对X2可以拟合局部回归,X3采用光滑样条,不必采用统一的关系,而最终结果‘加’在一起就可以了。


公式1.png
  1. 该函数有两个组成部分,β0+β1X1部分属于参数部分,后半部分属于非参数平滑部分,因此该模型又称为半参数模型。参数部分等同于线性项或广义线性项,非参数平滑部分,则是广义相加模型的关键部分。模型的左侧与广义线性模型一样,可以是因变量本身,也可以是对因变量进行变换后的结果。

  2. 什么是非参数平滑项?
    经样条函数变化后的自变量也被称作非参数平滑项,常见的样条函数如:光滑样条(可参见前述内容)、自然样条和局部样条等。总结起来,为了尽可能多地捕捉回归模型中的非线性因素对因变量的影响,我们采用样条函数来灵活地将自变量拟合为平滑的曲线;同时又相对不那么“灵活”,能有效防止过度拟合。

  3. 关于样条函数,需要确定多少个节点合适?怎么选取合适的函数?
    节点的个数直接和函数中自由度df挂钩,函数中的自由度df=节点数+4,通常可以通过1)AIC,根据AIC最小确定自由度;2)广义交叉验证;3)根据残差独立原则,最小化残差自相关确定自由度。

3.1 AIC法:GAM的比较可以用aov(model1,model2,test="Chisq")或者AIC(model1,model2)来比较。通过比较选出最优节点数量。该法还可以通过观察模型中非参数平滑函数的自由度改变对解释变量的影响大小来评判模型是否稳健。
3.2 广义交叉验证(GCV:Generalized Cross Validation)。这种方法的基本思路是,a)取出一部分数据;b)用某一数量的节点使样条拟合剩下的这些数据;c)用样条拟合之前取出的数据;d)重复a)~c),直到每个观察值都被取出过一次,计算整个交叉验证过程的均方根误差(RMSE:Root Mean Square Error);e)针对不同数量的节点重复a)~d),最后选择最小RMSE时的节点数量。一般可以分成10份重复此过程
3.3样条函数是具有m-1个连续导数的m阶分段多项式,例如三次样条函数指的就是具有连续性、且一阶和二阶连续的三阶分段多项式。在实际研究中,我们一般使用三次样条函数;除此之外,也可选择自然三次样条函数(增加了三次样条函数在边界区域的平滑性)、薄板样条函数(可同时平滑多个变量,因此一般在研究多个变量的交互作用时使用)等。

03R代码及解读

第一部分:结局是连续变量

library(ISLR)
library(splines)
library(gam)
data(Wage)
gam2 <- gam(wage ~ s(age,5) + s(year,4) +  education,data=Wage)
gam3 <- gam(wage ~ s(age,5) + year+ education,data=Wage)
plot(gam2,se=T,col=c('blue'))
###
gam5 <- gam(wage ~ s(age,5) + lo(year,span=0.7) +  education,data=Wage)
1.jpg
2.jpg

结果说明:
1)采用summary(gam2),查看模型结果,该结果分为参数部分和非参数部分,其中非参数中的year变量,p值大于0.05,说明该变量不适合做非线性拟合,而education这个变量没有做非线性拟合,因为在非参数部分没有其结果。将year这个变量采用线性回归拟合,其拟合结果是显著的,感兴趣的小伙伴可以跑下模型。
2)采用plot()可以将模型画出来,图一的图横坐标为自变量X,纵坐标为因变量Y,表示随着年龄的变量,收入是先增长,然后降低的。图二中间的图意思是随着年份的增加,收入一直呈增长状态,中间有两年下降了,图三则是随着教育程度的升高,收入越来越高。其他的图解释以此类推。
3)s()是样条函数,括号里面的数字是定义的自由度,除了使用回归样条,还能使用局部样条lo()函数,得到的结果与上面的结果十分类似。

第二部分:结局是分类变量

当Y是分类变量时,GAM同样适用。比如:

gam4 <- gam(I(wage>250) ~ ns(age,5) + year + education,data=Wage,family = binomial)
plot(gam4,se=T,col=c('blue'))
3.jpg

结果说明:
1)采用I(),将wage变量处理成二分类变量,模型的写法和第一部分稍有变化。
2)采用plot()可以将模型画出来,上图横坐标为自变量X,纵坐标表示概率,这个跟第一部分不太一样,小伙伴注意区分,上图第一个表的解释是:随着年龄的增加,收入超过250的可能性先增加后降低,其他的图解释以此类推。
各位小伙伴儿,码了这么多字,期望能够帮助各位更好的理解和使用这些模型。

04总结

GAM模型存在的缺点:
1.由于模型是可加的,这在很大程度上限制了模型的灵活性,变量间的相互作用常被忽略,虽然模型本身可以考察交互作用。
2.由于是基于非线性的模型,因此GAM模型的系数依然难以准确解释和描述。
如果您觉得有用,请点赞,转发哦~

更多统计小知识,请关看 公粽号 易学统计

更多阅读
R语言:多水平统计模型
R语言:广义估计方程(GEE)
R语言|两因素重复测量方差分析
R语言|基于Cox模型pec包深度验证
R语言|中位生存时间列线图绘制
R语言|Cox模型校准度曲线绘制
R语言|中位生存时间列线图绘制
基于Lasso回归筛选变量构建Cox模型并绘制Nomogram
R语言Logistic回归模型验证及Nomogram绘制
如何进行高维变量筛选和特征选择(一)?Lasso回归

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容