我使用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)
运行此模型并计算每个变量解释的百分比偏差后,我想绘制每个变量对响应的影响
然而,当我在R中使用plot.gam函数时,我的图形出现y轴"s(predictor variable, edf)"
我不确定y轴的这个比例代表什么?
有没有办法可以将y轴范围更改为代表响应的范围,如本文所述:Walsh和Kleiber(2001),'广义加性模型和蓝鲨的回归树分析(Prionace) glauca)图3中基于夏威夷的商业延绳钓捕捞率。
我会发布一些我正在描述的情节的例子,但由于这是我的第一篇文章,我没有至少10个声望,所以它不会让我这样做!
我搜索了许多网站和论坛,试图找到答案,但无济于事,因此非常感谢任何帮助!
答案 0 :(得分:3)
轴是居中平滑所取的值。它是对该平滑函数的拟合值的贡献(在协变量的值处)。
很容易更改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)
我知道更改y轴刻度的唯一方法是手动构建绘图。这些图没有模型常数项的贡献,加上其他参数项。如果您的模型只有一个截距和一个平滑,您可以在该协变量的范围内生成新数据,然后从模型中生成predict
这些新数据值,但使用type = "terms"
来获取平滑。然后,您绘制从predict
返回的值以及"constant"
返回的predict
属性的值。
在您的情况下,您需要在预测时控制其他变量。一种方法是将所有其他协变量设置为它们的均值或典型值,但允许感兴趣的协变量在其范围内变化,如前所述。然后,您将predict(shark.gamFINAL, newdata = NEW, type = "terms")
返回的矩阵的每一行中的值相加(其中NEW
是要预测的新数据帧,改变一个协变量,但保持其余的一些典型值),再次添加在常数上。您必须依次为每个协变量重做这个(即每个绘图一次),因为您需要将其他协变量保持在典型值。
所有这一切都是在轴上移动比例 - 模型中没有任何平滑与模型中的其他平滑或项相互作用,因此可能更容易将y轴视为对响应的影响每个顺利?