将 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
; 中
- 通过为那些 太远 数据填充
NA
将 z
增加到矩阵中。
- 将
z
标准化为 [0, 1]
。
- 使用
image
或contour
自己制作情节。
理想情况下,我们应该举一个例子(可能来自 ?vis.gam
)并完成上述步骤。但是,您回复我说您使用 predict.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
; 中
- 通过为那些 太远 数据填充
NA
将z
增加到矩阵中。 - 将
z
标准化为[0, 1]
。 - 使用
image
或contour
自己制作情节。
理想情况下,我们应该举一个例子(可能来自 ?vis.gam
)并完成上述步骤。但是,您回复我说您使用 predict.gam
很快解决了问题。那我就不加例子来演示了