如何在mgcv GAM模型中调整平滑


14

我试图弄清楚如何在mgcv:gam模型中控制平滑参数。

我有一个二项式变量,我想主要将其建模为固定网格上x和y坐标的函数,以及一些其他影响较小的变量。过去,我使用locfit包和(x,y)值构建了一个相当不错的局部回归模型。

但是,我想尝试将其他变量合并到模型中,看起来通用加性模型(GAM)很有可能。看完gam和mgcv软件包后,它们都具有GAM功能,我选择了后者,因为邮件列表线程中的许多注释似乎都推荐它。缺点是它似乎不支持像黄土或locfit这样的局部回归平滑器。

首先,我只想尝试仅使用(x,y)坐标来复制locfit模型。我尝试使用常规和张量积平滑:

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

但是,绘制来自模型的预测,与locfit模型相比,它们要平滑得多。因此,我一直在尝试调整模型,使其不会过度平滑。我曾尝试过调整参数sp和k,但是我不清楚它们如何影响平滑度。在locfit中,nn参数控制所使用邻域的跨度,较小的值允许较少的平滑和更多的“摆动”,这有助于捕获网格上二项式结果的概率快速变化的某些区域。我将如何设置gam模型以使其表现相似?

Answers:


22

k参数有效地设置了每个项的平滑矩阵的维数。gam()正在使用GCV或UBRE分数来选择最佳的平滑度,但是它只能在平滑矩阵的维数内工作。默认情况下,te()平滑具有k = 5^22d曲面。我忘记了它的用途,s()因此请检查文件。mgcv的作者Simon Wood的当前建议是,如果模型选择的平滑度等于或接近所使用的值所施加的维数极限k,则应增加k并重新拟合模型以查看是否从高维平滑矩阵中选择更复杂的模型。

但是,我不知道locfit的工作原理,但是您确实需要一些东西来阻止您安装过于复杂的表面(GCV和UBRE,或者如果选择使用它们则无法使用(RE)ML [您不能像set scale = -1],正试图这样做),这是数据所不支持的。换句话说,您可以拟合数据的非常局部的特征,但是您是否拟合所收集数据样本中的噪声,或者拟合概率分布的均值?假设您已经对基础维进行了整理(上面),则gam() 可能会告诉您有关可以从数据中估算出什么的信息。

另一件事要注意的是,当前使用的平滑器是全局的,这意味着所选的平滑度会应用于整个平滑范围。自适应平滑器可以在响应快速变化的数据部分中使用分配的平滑度“容差”。gam()具有使用自适应平滑器的功能。

看到?smooth.terms?adaptive.smooth看到可以使用进行拟合gam()te()可以将大多数(如果不是全部)平滑器组合在一起(请检查张量产品中可以包含和不能包含的文档),因此您可以使用自适应平滑器基础来尝试捕获数据部分中更精细的局部比例反应迅速变化。

我应该补充一点,您可以使用fx = TRUEto s()和的参数,得到R来估计一个平滑项使用的具有固定自由度集的模型te()。基本上,将k设置为您想要的值,fx = TRUE并且gam()将只适合固定自由度的回归样条而不是惩罚性回归样条。


加文,非常感谢您提供如此详细的答案。我完全错过了自适应平滑器,将尝试一下。我了解过拟合的问题,但是到目前为止,我对gam所做的工作并未显示出通过领域专业知识已知的数据特征。
特里克上校2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.