当使用 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
包实现吗?
最佳答案
这是由于模型中使用的样条基础施加了可识别性约束。这是一个归零约束,有效地从用于每个平滑项的基中删除类似截距的基函数,以便它们不会与模型截距混淆。这使得模型是可识别的,而不是有无限的解决方案。
使用标准理论,置信区间在 y 轴上过零的地方必须趋向于零(通常是居中效应,但如图所示,它在某些变换的尺度上),因为约束意味着在某个点x
,效果为 0,方差为 0。
这当然是无稽之谈,最近的研究已经调查了这个问题。 Simon Wood 及其同事提供的一种解决方案采用了 Nychka 观察结果的扩展,即对于高斯情况,平滑的贝叶斯可信区间作为频率置信区间具有良好的跨函数解释(因此不逐点,但也不是同时)。 Nychka 的结果(区间的覆盖属性)在估计平滑度的平方偏差不显着小于估计方差的情况下失败;显然,当方差为零时,情况并非如此,其中估计的平滑度通过零效应,因为此时偏差实际上并不完全为零。
Marra 和 Wood (2012) 将这些结果扩展到广义模型设置,基本上通过假设模型中的所有其他项都应用了可识别性约束,而不是平滑项来估计一个平滑项的置信区间出于兴趣。这将推理的焦点从平滑直接转移到平滑+截距。您可以在 plot.gam()
中使用参数 seWithMean = TRUE
打开此功能。
尽管通过 predict.gam()
返回您想要的信息是微不足道的,但我没有看到让 visreg 执行此操作的简单方法选项type = 'iterms', se.fit = TRUE
。这将在线性预测变量的范围内返回每个模型平滑项的贡献加上标准误差,其中包括 seWithMean
隐含的校正。然后你就可以随心所欲地摆弄它;例如,添加模型常数项(截距的估计)应该为您提供接近问题中显示的数字的内容。
关于r - 使用 mgcv 的 GAM 对比图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299159/