【问题标题】:Normalize z-axis values onto [0, 1] when using vis.gam for a mgcv GAM将 vis.gam 用于 mgcv GAM 时将 z 轴值标准化为 [0, 1]
【发布时间】: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 不同的对象)。

【问题讨论】:

    标签: r plot normalization gam mgcv


    【解决方案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 表面!
    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2013-10-18
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多