仅分类/逻辑

问题描述

我目前正试图使用​​GAM纯粹基于ESPN的评论数据来计算预期目标模型的粗略估算。但是,所有数据都是分类变量或逻辑向量,因此我不确定是否有一种平滑方法,还是应该只使用因子名称。

这是我的变量:

  • shot_where(因子):射击位置(例如盒子右侧)
  • assist_class(因子):助攻类型(传中,传球,传球)
  • follow_corner(逻辑):镜头是否跟随角球
  • shot_with(系数):右脚,左边食物,标头
  • follow_set_piece(逻辑):镜头是否跟随固定块

我想我应该只将公式用作变量名。

    model <- bam(is_goal ~ shot_where + assist_class + follow_set_piece + shot_where + follow_corner + shot_where:shot_with,family = "binomial",method = "REML")

shot_where和shot_with将合并这两个变量之间的所有交互。

但是,我被告知我也可以使用以下结构对因子变量进行平滑处理。

    model <- bam(is_goal ~ s(shot_where,bs = 'fs') + s(assist_class,bs = 'fs') + as.logical(follow_set_piece) +
              as.logical(follow_corner) + s(shot_with,bs = 'fs'),data = model_data,method = "REML")

这对于创建模型很有用,但是我想确保这是构建模型的正确方法。我尚未看到有关在GAM模型中仅使用因子/逻辑变量的任何信息,因此我认为值得提出。

解决方法

如果您仅具有分类协变量,则说明您是否使用gam()bam()或其他方法来拟合模型。

使用s()这样的基础将因子变量传递给fs时的操作

s(f,bs = 'fs')`

正在为因子f的每个级别创建一个随机拦截

这里根本没有进行任何平滑处理;该模型只是利用具有随机效应的贝叶斯平滑视图的等效性。

鉴于从混合效果模型的意义上讲,没有一个协变量可以合理地视为随机变量,那么做您正在做的事情的唯一理由可能是计算技巧。

您的第一个模型只是一个简单的GLM(请注意公式中的错字,因为shot_where在公式中重复了两次。)

我不清楚您为什么使用bam()来拟合此模型;您正在浪费bam()通过使用method = 'REML'提供的计算效率;对于'fREML'模型,应为bam()。但是,由于在第一个模型中没有进行平滑度选择,因此最好使用glm()来拟合该模型。如果问题出在大样本量上,那么有几个可以将GLM适应大数据的软件包,例如 biglm 及其bigglm()函数。

在第二个模型中,没有进行任何平滑处理,但是存在惩罚,这会将随机截距的估计值缩小到零。使用 lme4 软件包或TMB和 glmmTMB 软件包以适合GLMM,可以在大数据上获得更好的性能。

,

这不仅仅是关于R的理论问题,但让我提供一个简短的答案。本质上,您可以估计的最灵活的模型是将变量用作因子的模型。它还会产生一个易于解释的模型-每个系数都为您提供参考水平和虚拟回归器所代表的水平之间的y期望差异。

平滑的样条线试图进行适当的偏差-方差折衷。如果分类变量中有大量数据且类别相对较少,则将代表类别的所有虚拟回归变量包括在内就不会造成效率的真正损失,并且偏差也将尽可能小。在某种程度上,平滑样条曲线模型不同于将一切都视为因素的模型,它很可能会引起偏差,而效率却没有相应提高。如果是我,我会坚持将所有分类变量都视为因素的模型。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...