将 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 <- predict.gam(gam1.5, newdat, type = "terms")
以获得逐词预测。这是一个矩阵。您只需要保留与要绘制的 2D 平滑关联的列。假设此列存储在向量z
中;
将z
扩充到矩阵中,方法是为那些太远数据填充NA
。
将z
标准化为[0, 1]
。
使用image
或contour
自己制作情节。
理想情况下,我们应该举一个例子(可能来自?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方指标)