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

时间:2017-06-22 16:57:43

标签: r plot normalization gam mgcv

我刚刚使用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 个答案:

答案 0 :(得分:1)

是。由于vis.gam基于predict.gam而您对$fitted.values的更改无效!

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

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

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