当使用visreg
包来显示带有对比图的GAM时,当图形为U形时,置信区间在拐点处变为零:
# Load libraries
library(mgcv)
library(visreg)
# Synthetic data
df <- data.frame(a = -10:10, b = jitter((-10:10)^2, amount = 10))
# Fit GAM
res <- gam(b ~ s(a), data = df)
# Make contrast figure
visreg(res, type = "contrast")
这似乎很狡猾,并且在制作条件图(即visreg(res, type = "conditional")
)时没有发生,所以相反,我正在查看mgcv
打包以制作相同的情节。我可以使用mgcv
制作条件图(例如plot.gam(res)
),但我看不到制作对比的选项情节。这可能是mgcv
包吗?
答案 0 :(得分:3)
这是由于对模型中使用的样条基/基数施加的可识别性约束。这是一个由零到和的约束,并且有效地从用于每个平滑项的基础中移除类似拦截的基函数,使得它们不与模型截距混淆。这使得模型可以识别,而不是具有无限的解决方案。
使用标准理论,置信区间必须趋于零,在y轴上穿过零(中心效应通常,但在此处显示它在某个变换的比例上开启),因为约束暗示在某些点x
,效果为0,方差为0。
这当然是无稽之谈,最近的研究已经调查了这个问题。 Simon Wood及其同事提供的一个解决方案对Nychka的观察进行了扩展,对于高斯情形,平滑的贝叶斯可信区间具有良好的跨函数解释作为频率置信区间(所以不是逐点,但不是同时的)。 Nychka的结果(区间的覆盖属性)在估计平滑偏差的平方偏差不会大大低于估计方差的情况下失败;很明显,当方差达到零时,估计平滑通过零效应,因为此时偏差实际上不是零,所以情况就不是这样。
Marra和Wood(2012)已将这些结果扩展到广义模型设置,基本上通过假设模型中的所有其他项都应用了可识别性约束来估计一个平滑的置信区间,但不是平滑的出于兴趣。这将推理的焦点从平滑直接转移到平滑+截距。您可以使用参数plot.gam()
在seWithMean = TRUE
中启用此功能。
我没有看到让visreg
这么做的简单方法,尽管通过predict.gam()
使用选项type = 'iterms', se.fit = TRUE
获取您想要的信息是微不足道的。这将在线性预测器的比例上返回每个模型平滑项的贡献加上包含seWithMean
暗示的校正的标准误差。然后,你可以根据自己的内心进行调整;添加模型常数项(截距的估计值)例如应该为您提供与您在问题中显示的数字接近的数据。