R语言mgcv包详解:广义可加模型(GAM)从入门到实践
创作时间:
作者:
@小白创作中心
R语言mgcv包详解:广义可加模型(GAM)从入门到实践
引用
1
来源
1.
https://www.bilibili.com/read/cv33493959/
广义可加模型(GAM)最早由 Hastie 等人提出,是广义线性模型(GLM)的一种非参数扩展形式,与其他统计学模型相比有很多独特的优点,如能够灵活处理 解释变量与响应变量之间的非线性关系;没有规定预测变量的形式,连续型变量和离散型变量均适用;有多种连接函数可选,因此能够对多种数据分布类型(如正态分布、 泊松分布、二项分布等)的响应变量进行处理,应用范围更广。GAM 是最常用的一种描述变量间非线性关系的模型,常用于分析生物与环境之间的关系, 其一般表达式为:
式中,𝑔()为连接函数,𝑓𝑖 为解释变量的平滑函数,𝑌为响应变量,𝑥𝑖 为解释变量, 𝛼截距项,n 为解释变量的数量,ε为残差。
R语言中常用于实现GAM模型的包为mgcv。其主要参数如下:
- formula: GAM的公式,指定了响应变量和解释变量之间的关系。可以使用s()函数来指定光滑项。
- family: 指定模型的分布族。例如,gaussian表示高斯分布,binomial表示二项分布,poisson表示泊松分布等。
- data: 包含数据的data.frame对象。如果未指定,gam将使用当前的环境中的数据。
- weights: 用于加权回归的权重向量。
- subset: 用于指定用于模型拟合的数据子集。
- na.action: 指定如何处理缺失值。默认情况下,gam会删除包含缺失值的观测。
- offset: 偏移向量,用于在模型中添加一个线性项,但不对其进行惩罚。
- method: 指定用于选择光滑参数的方法。例如,GCV.Cp表示使用广义交叉验证。
- optimizer: 指定优化算法。"outer"表示使用外部循环优化光滑参数和线性参数,"newton"表示使用牛顿方法。
- control: 一个包含控制拟合过程参数的列表。例如,可以设置收敛标准和迭代次数。
- scale: 用于对响应变量进行缩放的比例因子。默认为0,表示自动选择。
- select: 逻辑值,指示是否自动选择光滑参数。如果为TRUE,gam将尝试找到最佳的光滑参数。
- knots: 用于指定样条结点的位置。
- sp: 光滑参数的初始值。
- min.sp: 光滑参数的最小值。
- H: 用于指定先验光滑度的矩阵。
- gamma: 用于控制光滑样条惩罚的强度。
- fit: 逻辑值,指示是否立即拟合模型。如果为FALSE,将返回一个未拟合的模型对象。
- paraPen: 用于指定线性项的先验惩罚。
- G: 用于指定分组变量,以便为不同的组拟合不同的光滑参数。
- in.out: 用于指定内部和外部光滑参数的分组。
- drop.unused.levels: 逻辑值,指示是否从模型中删除未使用的因子水平。
- drop.intercept: 逻辑值,指示是否从模型中删除截距项。
- nei: 用于指定邻居矩阵,用于空间光滑。
- discrete: 逻辑值,指示是否将某些变量视为离散变量。
接下来,通过一系列代码示例详细介绍mgcv包的使用方法:
模拟数据(部分)
library(mgcv)
set.seed(2)
dat <- gamSim(1,n=400,dist="normal",scale=2)
拟合GAM模型
b <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3),data=dat)
summary(b)
plot(b,pages=1)
gam.check(b)
自定义光滑参数
G <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3),data=dat,sp=c(0.001,0.01,0.1,1))
plot(G)
使用REML方法
b <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3),data=dat,method="REML")
plot(b)
添加交互项
b <- gam(y ~ te(x0,x1) + s(x2) + s(x3),data=dat)
AIC(b)
平滑ANOVA分解
b <- gam(y ~ s(x0) + s(x1) + s(x2) + ti(x1,x2),data=dat)
AIC(b)
大数据集处理
set.seed(0)
dat <- gamSim(1,n=20000,scale=15)
b6 <- gam(y ~ s(x0,bs="cr",k=100) + s(x1,bs="cr",k=100) + s(x2,bs="cr",k=100) + s(x3,bs="cr",k=100),data=dat,knots=list(x0=seq(0,1,length=100),x1=seq(0,1,length=100),x2=seq(0,1,length=100),x3=seq(0,1,length=100)))
vis.gam(b6,view=c("x0","x1"),plot.type="contour")
b7 <- gam(y ~ s(x0,bs="cr",k=100) + s(x1,bs="cr",k=100) + s(x2,bs="cr",k=100) + s(x3,bs="cr",k=100),data=dat,xt=c(100,100,100,100),seed=123)
vis.gam(b7,view=c("x0","x1"),plot.type="contour")
这些代码片段展示了如何使用mgcv包中的gam函数来拟合各种类型的GAM模型,包括2D平滑、大数据集的处理、用户定义的结点以及不同的可视化技术。通过这些例子,可以学习如何使用mgcv来处理和分析数据,以及如何诊断和调整GAM模型。
热门推荐
Word制作个人简历:从页面设置到内容填写的完整指南
力量训练对女性减脂与体型塑造的双重作用
摩托车时速的合理控制方法是什么?怎样提高骑行安全性?
社保查询个人账户缴费明细怎样下载保存
如何缓解失眠
尽头牙与智齿之间究竟存在哪些区别?深入探讨这两种牙齿的特性与功能。
右侧颞叶枕叶片状低密度影怎么回事
本科毕业生如何准备考军校?
房奴必看!房贷利率从5%降到3.7%的三个实操办法,省下十年血汗钱
焦虑症如何确诊
影响中国人1500年的奇文:一千字·一夜成·至今还在世间流传
如何查询房产抵押登记信息
质量工程师职业规划:精益求精,倡导质量文化
高胆固醇患者的汤料中可以加入鸡蛋吗
羊水深度与指数:孕期保健的重要指标
老股民血泪史:高开巨阴线与黄昏十字星洗盘陷阱识别指南,日均1元破除信息差
学好音乐基础知识的方法
结婚送礼全攻略:从传统到创意,教你挑选让新人爱不释手的礼物
技术经理的岗位职责是什么?
技术经理必备的六大技能
港股通碎股交易规则(关于碎股交易港股通投资者只可以卖出而不能买入)
木作合同中的甲醛约定:关键细节不可忽视
转轮除湿机:吸湿剂转子技术的基本原理和吸湿剂与冷却除湿机同时使用的效果
胃部不适?饮食、压力、细菌三大元凶及解决方案揭秘!
董卿:一个家往上走的10条靠谱建议
Excel表格中年龄比率计算的完整指南
期货交易入门:如何理解"一手"交易规则及其市场影响?
心理韧性:个人抵御压力的关键
国有企业监事职责培训:提升监督能力 保障企业健康发展
环境数字治理:大数据助力精准治污