R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

惰性流沙
• 阅读 372

原文链接:http://tecdat.cn/?p=23509 

原文出处:拓端数据部落公众号

最近我们被客户要求撰写关于GAMs的研究报告,包括一些图形和统计输出。

我们在研究工作中使用广义加性模型(GAMs)。mgcv软件包是一套优秀的软件,可以为非常大的数据集指定、拟合和可视化GAMs。

这篇文章介绍一下广义加性模型(GAMs)目前可以实现的功能。

我们需要加载mgcv

library('mgcv')

受欢迎的例子数据集

dat中的数据在GAM相关的研究中得到了很好的研究,包含了一些协变量--标记为x0到x3--这些协变量在不同程度上与因变量有非线性关系。

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

我们想通过使用样条来逼近协变量和因变量之间的真实关系来尝试拟合这些关系。为了拟合一个加性模型,我们使用

 gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), dat,  "REML")

mgcv提供了一个summary()方法,用来提取关于拟合GAM的信息。

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

check()函数,用于检查模型中的每个光滑函数是否使用了足够数量的基函数。你可能没有直接使用check()——会输出其他诊断结果,也会产生四个模型诊断图。

绘制光滑函数

为了将估计的GAMs可视化,mgcv提供了plot.gam()方法和vis.gam()函数,从对象中产生类似ggplot2的图。为了使GAM模型中的四个估计光滑函数可视化,我们将使用

plot(mod)

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

结果是绘制mod GAM中每一个光滑函数

使用plot函数在绘图设备上绘制多个面板,并将各个绘图排成一行。

提取光滑函数数据

用于处理mod中表示的基础光滑函数,如果你想提取用于构建该图的大部分数据,你可以使用smooth()函数。

smooth(mod, "x1")

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

诊断图

由check()产生的诊断图

check(mod)

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

结果是一个包含四个诊断图的数组,包括模型残差的Q-Q图(左上)和直方图(左下),残差与线性预测器的图(右上),以及观察值与拟合值的图。

这四张图中的每一张都是通过用户可访问的函数生成的,函数实现了一个特定的图。例如,qqplot(mod)产生上图左上方的Q-Q图。

qqplot(mod)

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

qqplot(mod)的结果是一个残差的Q-Q图,其中的参考量值是通过模拟拟合模型的数据而得到。

还可以处理目前可用的许多更专业的光滑函数。例如,二维光滑函数


plot(mod)

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

二维光滑函数的默认绘制方式是使用plot()。

和因子光滑函数交互项,相当于光滑曲线的随机斜率和截距,被画在一个面板上,颜色被用来区分不同的随机光滑函数


## 模拟数据
f0 <- function(x) 2 * sin(pi * x)
f1 <- function(x, a=2, b=-1) exp(a * x)+b
f2 <- function(x) 0.2 * x^11 * (10 * (1 - x))^6 + 10 * (10 * x)^3 * (1 - x)^10
f <- f0(x0) + f1(x1, a[fac], b[fac]) + f2(x2)
fac <- factor(fac)
y <- f + rnorm(n) * 2


plot(mod)

R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

含有因子-光滑函数交互项的更复杂的GAM的结果,bs = 'fs'。

还能做什么?

可以处理mgcv可以估计的大多数光滑函数,包括带有因子和连续副变量的按变量光滑函数、随机效应光滑函数(bs = 're')、二维张量积光滑函数,以及带有参数项的模型。

参考文献

Augustin, N. H., Sauleau, E.-A., and Wood, S. N. (2012). On quantile quantile plots for generalized linear models. Computational statistics & data analysis 56, 2404–2409. doi:10.1016/j.csda.2012.01.026.


R语言广义相加(加性)模型(GAMs)与光滑函数可视化|附代码数据

最受欢迎的见解

1.R语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型分析案例

5.R语言混合效应逻辑回归Logistic模型分析肺癌

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

8.python用线性回归预测股票价格

9.R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
PhoneGap设置Icon
参考:http://cordova.apache.org/docs/en/latest/config\_ref/images.html通过config.xml中的<icon标签来设置Icon<iconsrc"res/ios/icon.png"platform"ios"width"57"height"57"densi
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
惰性流沙
惰性流沙
Lv1
君不见高堂明镜悲白发,朝如青丝暮成雪。
文章
4
粉丝
0
获赞
0