更改默认 plot.gam 图形的 Y 轴

use*_*109 3 r mgcv

我已经使用具有以下形式的 mgcv 包在 R 中运行了 GAM:

shark.gamFINAL <- gam(ln.raw.CPUE...0.1 ~ Year + Month + 
                      s(Mean.Temp, bs = "cr") + s(Mean.Chl.a, bs = "cr") + 
                      s(Mean.Front.density, bs = "cr"), data=r, family=gaussian)
Run Code Online (Sandbox Code Playgroud)

运行此模型并计算每个变量解释的百分比偏差后,我想绘制每个变量对响应的影响

但是,当我在 R 中使用 plot.gam 函数时,我的图形的 y 轴是 "s(predictor variable, edf)"

我不确定 y 轴的这个比例代表什么?

有没有一种方法可以将 y 轴范围更改为表示响应的范围,如本文中所做的那样:Walsh 和 Kleiber(2001),“蓝鲨(Prionace glauca)捕获的广义加性模型和回归树分析”图 3 中夏威夷商业延绳钓渔业的费率。

我会发布一些我所描述的情节的例子,但由于这是我的第一篇文章,我没有至少 10 个声望,所以它不会让我这样做!

我已经搜索了许多网站和论坛,试图找到答案,但无济于事,因此非常感谢任何帮助!

Rei*_*son 7

轴是中心平滑所取的值。它是对该平滑函数的拟合值的贡献(在协变量的值上)。

更改 y 轴标签很容易 - 为ylab参数提供您想要的标签。这当然意味着如果您想为每个图单独绘制 y 轴标签,则必须分别绘制每个平滑图。在这种情况下,还可以使用select参数来绘制特定的平滑函数,例如:

layout(matrix(1:4, ncol = 2, byrow = TRUE)
plot(shark.gamFINAL, select = 1, ylab = "foo")
plot(shark.gamFINAL, select = 2, ylab = "bar")
plot(shark.gamFINAL, select = 3, ylab = "foobar")
layout(1)
Run Code Online (Sandbox Code Playgroud)

我知道改变 y 轴比例的唯一方法是手动构建绘图。这些图没有模型常数项以及其他参数项的贡献。如果您的模型只有一个截距和一个平滑,您可以在该协变量的范围内生成新数据,然后predict从这些新数据值的模型中生成新数据,但用于type = "terms"获得平滑的贡献。然后绘制从 返回的值predict加上由返回的"constant" 属性predict

在您的情况下,您需要在预测时控制其他变量。一种方法是将所有其他协变量设置为其均值或典型值,但允许感兴趣的协变量在其范围内变化,就像以前一样。然后,您将返回的矩阵的每一行中的值相加predict(shark.gamFINAL, newdata = NEW, type = "terms")NEW要预测的新数据框在哪里,改变一个协变量,但将其余的保持在某个典型值),再次添加常数。您必须依次为每个协变量(即每个图一次)重做此操作,因为您需要将其他协变量保持在典型值。

所有这一切只是改变轴上的比例 - 模型中的任何平滑都不会与模型中的其他平滑或项相互作用,因此也许更容易将 y 轴视为对每个平滑响应的影响?