R语言优雅的进行广义可加模型泊松回归分析

泊松回归(Poisson regression)是以结局变量为计数结果时的一种回归分析。泊松回归在我们的生活中应用非常广泛,例如:1分钟内过马路人数,1天内火车站的旅客流动数,1天内的银行取钱人数,一周内的销售经营数据等等都可以使用泊松回归进行分析。

既往已经有文章《R语言进行泊松回归》初步的介绍了泊松回归,本期介绍下如何使用tidygam包来优雅的进行泊松回归,tidygam包主要是通过mgcv包来进行分析,通过对tidygam包对mgcv包的数据转换后,上手难度大大降低,可以轻松优雅的进行泊松回归分析。

咱们先导入R包和数据,数据使用的是tidygam自带的gest数据

r 复制代码
library(tidygam)
library(mgcv)
library(dplyr)
library(ggplot2)
data("gest")
theme_set(theme_light())

这个数据是一个10、11和12个月婴儿的手势数量的数据,这个数据表包含了来自孟加拉、中国和英国背景的60名婴儿所做的三种手势的计数。我解释一下变量名:dyad是ID标识的意思,background:表明来自哪个国家,months:月份,只有10,11,12共3个月,gesture手势的类型,count:手势的计数,这个是 结局变量

先生成gam模型

r 复制代码
gs <- gam(
  count ~ s(months, k = 3),
  data = gest,
  family = poisson
)

这个模型gam是mgcv包生成的,解析模型,表明月数和手势计数是相关的

生成预测值

r 复制代码
gs_pred <- predict_gam(gs)

绘图,一定要用series标明绘制哪个变量

r 复制代码
gs_pred %>%
  plot(series = "months")

R包介绍,这个时候生成的Y周是count的对数值,因此我们还需要转换一下

r 复制代码
predict_gam(gs, tran_fun = exp) %>%
  plot(series = "months")

如果咱们想了解不同国家的分类,可以再gam函数中设定

r 复制代码
gs_by <- gam(
  count ~ s(months, by = background, k = 3),
  data = gest,
  family = poisson
)

解析模型,表明不同的国家婴儿,手势计数都是和月份相关

r 复制代码
summary(gs_by)

接下来咱们可以绘制分类图形,需要再comparison处指明根据哪个变量分类

r 复制代码
gs_by %>%
  predict_gam(length_out = 20, series = "months", tran_fun = exp) %>%
  plot(comparison = "background")

R包指出,虽然使用plot函数绘图,但是它的本质上是一个ggplot2绘制的图片,所以咱们可以使用ggplot的方法修改它

r 复制代码
gs_by %>%
  predict_gam(length_out = 20, series = "months", tran_fun = exp) %>%
  plot(comparison = "background") +
  scale_color_brewer(type = "qual") + scale_fill_brewer(type = "qual")

咱们如果考虑有2个非连续的变量,可以再模型里面定义

r 复制代码
gs_by_2 <- gam(
  count ~ s(months, by = background, k = 3) +
    s(months, by = gesture, k = 3),
  data = gest,
  family = poisson
)

解析模型,这里虽然有变量交叉,但是这种做法并不是交互效应,应该理解为亚组更加准确

r 复制代码
summary(gs_by_2)

绘图

r 复制代码
gs_by_2 %>%
  predict_gam(length_out = 20, series = "months", tran_fun = exp) %>%
  plot(comparison = "gesture") +
  scale_color_brewer(type = "qual") + scale_fill_brewer(type = "qual") +
  facet_grid(~ background)

如果咱们想了解background和gesture的交互关系,要先生成一个交互变量

r 复制代码
gest <- gest %>%
  mutate(back_gest = interaction(background, gesture))

然后咱们使用这个交互变量进行模型分类

r 复制代码
gs_i <- gam(
  count ~ s(months, by = back_gest, k = 3),
  data = gest,
  family = poisson
)
summary(gs_i)

绘图,

r 复制代码
predict_gam(
  gs_i, tran_fun = exp,
  separate = list(back_gest = c("background", "gesture"))
) %>%
  plot(series = "months", comparison = "gesture") +
  facet_grid(~ background)

这样一个亚组交互图形就生成好啦。

相关推荐
青春不败 177-3266-05205 小时前
基于R语言的贝叶斯网络模型
r语言·贝叶斯·生态学·统计学·结构方程·混合效应
小书房13 小时前
Kotlin的内联函数
java·开发语言·kotlin·inline·内联函数
生物信息与育种14 小时前
全基因组重测序及群体遗传与进化分析技术服务指南
人工智能·深度学习·算法·数据分析·r语言
l1t14 小时前
在aarch64机器上安装使用R语言的季节调整包
开发语言·r语言
机器学习之心15 小时前
IGWO-Transformer模型回归+SHAP分析+新数据预测+多输出!深度学习可解释分析(附MATLAB代码)
深度学习·回归·transformer·shap分析·igwo
zhangphil16 小时前
Android Page3与Flow分页查媒体数据库展示宫格图片列表,Kotlin
android·kotlin
知识分享小能手16 小时前
R语言入门学习教程,从入门到精通,R语言分布式数据可视化(6)
学习·信息可视化·r语言
电科一班林耿超16 小时前
机器学习大师课 第 3 课:多特征回归与机器学习头号敌人 —— 过拟合
人工智能·算法·回归·线性回归
胡致和1 天前
配置变更后,弹窗为什么飞到了最左边?
kotlin
zhangphil2 天前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin