将 vis.gam 用于 mgcv GAM 时将 z 轴值标准化为 [0, 1]

Posted

技术标签:

【中文标题】将 vis.gam 用于 mgcv GAM 时将 z 轴值标准化为 [0, 1]【英文标题】:Normalize z-axis values onto [0, 1] when using vis.gam for a mgcv GAM 【发布时间】:2017-11-26 02:03:15 【问题描述】:

我刚刚使用 mgcv 包完成了 GAM 的安装(我将这个模型称为 gam1.5)。我一直在玩vis.gam 函数,但我有一个无法解决的问题。

我想标准化我的模型的拟合值,所以当我使用vis.gam 时,z 轴有限制 [0, 1]。

我的想法是在我的 GAM 模型的$fitted.values 中应用归一化公式,如下所示:

gam1.5$fitted.values<-(gam1.5$fitted.values-min(gam1.5$fitted.values))/(max(gam1.5$fitted.values)-min(gam1.5$fitted.values))

但是,当我运行 vis.gam 时,它不会改变 z 轴的比例。我想知道我是否将规范化公式应用于 GAM 对象中的不正确对象(与 $fitted.values 不同的对象)。

【问题讨论】:

【参考方案1】:

是的。因为vis.gam 是基于predict.gam 而你对$fitted.values 的更改没有效果!

事实上,vis.gam 无法实现您的目标。该函数只生成一个图,并且不返回任何内容供用户稍后重现该图(除非再次调用 vis.gam)。这意味着,我们需要使用predict.gam。以下是基本步骤。

设置二维网格/网格。您可能希望使用exclude.too.far 过滤远离训练数据的数据,以避免荒谬的样条/多项式外推(就像vis.gam 所做的那样); 构造一个新的数据框newdat(来自上面的网格)并调用oo &lt;- predict.gam(gam1.5, newdat, type = "terms")以获得逐词预测。这是一个矩阵。您只需要保留与要绘制的 2D 平滑关联的列。假设此列存储在向量z中; 将z 扩充到矩阵中,方法是为那些太远数据填充NA。 将z 标准化为[0, 1]。 使用imagecontour 自己制作情节。

理想情况下,我们应该举一个例子(可能来自?vis.gam)并完成上述步骤。但是,您回复我说您使用predict.gam 快速解决了问题。那我就不加例子来演示了。

【讨论】:

非常感谢您的回答!最后,我使用 predict.gam 创建了一个新数据帧并规范化这个新数据帧中的值,然后按照您的建议使用 wireframe() 绘制 3d 表面!

以上是关于将 vis.gam 用于 mgcv GAM 时将 z 轴值标准化为 [0, 1]的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)

R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理计算RMSER方调整R方可视化模型预测值与真实值的曲线)

R语言mgcv包中的gam函数拟合广义加性模型:线性回归与广义加性模型GAMs(Generalized Additive Model)模型性能比较(比较RMSE比较R方指标)

Stargazer和gam - 如何包含整个摘要输出?

在 R 中绘制 GAM:设置自定义 x 轴限制?

使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式