将 vis.gam 用于 mgcv GAM 时,将 z 轴值归一化到 [0, 1]

Normalize z-axis values onto [0, 1] when using vis.gam for a mgcv GAM

我刚刚使用 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 不同的对象)。

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

事实上,vis.gam 无法实现您的目标。这个函数只是简单地生成一个图,returns 没有任何东西供用户稍后重现该图(除非再次调用 vis.gam)。这意味着,我们将需要使用 predict.gam。以下是基本步骤。

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

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