更改默认的plot.gam图表中的Y轴

4

我在R中使用mgcv包运行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(预测变量,edf)”。我不确定y轴刻度代表什么意思?是否有办法将y轴范围更改为代表响应的范围,就像在Walsh和Kleiber(2001)的论文中所做的那样:'Generalized additive model and regression tree analyses of blue shark (Prionace glauca) catch rates by the Hawaii-based commercial longline fishery' 的第三幅图中一样。我本想上传一些我描述的图表示例,但由于这是我的第一篇文章,我没有至少10个声望,因此无法这样做!我已经搜索了许多网站和论坛,试图找到答案,但没有成功,因此任何帮助都将非常感激!
1个回答

8

轴是中心平滑函数的取值。它是对该平滑函数在某个协变量值处拟合值做出的贡献。

更改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轴比例的唯一方法是手工建立图表。这些图表不包括模型常数项和其他参数项的贡献。如果您的模型只有一个截距和一个平滑项,您可以在该协变量范围内生成新数据,然后从模型中预测这些新数据值,但使用"type =“terms”"来获得平滑项的贡献。然后,您将从predict< / code>返回的值与predict返回的"constant"属性的值相加,并绘制出结果。
在您的情况下,当进行预测时,需要控制其他变量。一种方法是将所有其他协变量设置为它们的平均值或典型值,但允许感兴趣的协变量在其范围内变化,如前所述。然后,在每个由predict(shark.gamFINAL, newdata = NEW, type = "terms")返回的矩阵的每一行中求和(其中NEW是要进行预测的新数据框架,在其中一个协变量上变化,但保持其余部分在某些典型值),再次加上常数。您需要依次对每个协变量重新执行此操作(即每个图形都需要一次),因为您需要保持其他协变量保持典型值。
不过,所有这些操作只是平移了y轴上的刻度-您的模型中的任何平滑项都不会与其他平滑项或模型中的术语相互作用,因此也许更容易将y轴视为每个平滑项对响应影响的效果?

非常感谢你的建议!我实际上在其他地方找到了一些代码,建议采用将其他协变量设置为它们的平均值的方法。他们提供的示例代码如下:testdata = data.frame(Income=seq(.4,1, length=100), Edu=mean(mod_gam2$model$Edu), Health=mean(mod_gam2$model$Health)) fits = predict(mod_gam2, newdata=testdata, type='response', se=T) predicts = data.frame(testdata, fits) ggplot(aes(x=Income,y=fit), data=predicts) + geom_smooth(aes(ymin = fit - se.fit, ymax=fit + se.fit), fill='gray80', size=1,stat='identity') - user2236109
顺便说一下,我真的认为这些应该是+/-(1.96 * se.fit),以获得大约95%的置信区间。总之,您所看到的是对收入进行三次样条拟合后响应的拟合值,条件是其他变量保持在其样本均值。您没有看到对部分拟合值进行lowess平滑处理的结果。 - Gavin Simpson
啊,好的,现在我明白了!所以身份状态使用GAM中应用于预测变量的平滑类型。谢谢。 - user2236109
我想问的另一件事是如何更改ggplot2中x轴的设置。 我需要创建与上面相同类型的图形,以显示月份和年份对响应的影响。这些显然是离散的预测变量,而不是之前具有连续x轴的图表,因此应该为每个月或年创建一个离散点,并在其周围绘制误差线,而不是生成线条。是否可能实现这一点,如果可能,您能否给出一些示例代码?提前感谢。 - user2236109
@user2236109 可以尝试使用 termplot 方法来绘制 gam 对象的图形。YearMonth 在模型中可能是数字或因子 - 从您提供的信息中不清楚,但它们都是参数项。您需要根据每个月份和年份组合创建预测数据,如 PDF 中所述,然后绘制图形。我认为现在您需要一个新问题,并提供一个可重现的示例,这样我们才能更好地帮助您 - 评论真的只适合这样的扩展跟进。 - Gavin Simpson
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接