Answers:
以通常的方式:
p <- predict(mod, newdata, type = "link", se.fit = TRUE)
然后请注意,p
其中包含一个$se.fit
具有标准误差的分量,用于的观测值的预测newdata
。然后,可以通过将SE乘以适合您所需水平的值来形成CI。例如,大约95%的置信区间形成为:
upr <- p$fit + (2 * p$se.fit)
lwr <- p$fit - (2 * p$se.fit)
您可以从或高斯分布中替换一个适当的值来替代所需的时间间隔。
请注意,我使用的type = "link"
并不是您说的是GAM还是AM。在GAM中,您需要在线性预测变量的尺度上形成置信区间,然后通过应用链接函数的反函数将其转换为响应的尺度:
upr <- mod$family$linkinv(upr)
lwr <- mod$family$linkinv(lwr)
现在请注意,这些间隔非常近似。另外,这些间隔在预测值上是逐点的,并且它们未考虑执行平滑度选择的事实。
可以通过模拟从参数的后验分布计算同时置信区间。我的博客上有一个例子。
如果您想要一个不依赖于平滑参数的置信区间(即,一个我们不知道但要估计平滑参数值的区间),则将其添加unconditional = TRUE
到predict()
调用中。
另外,如果您不想自己执行此操作,请注意,较新版本的mgcv具有plot.gam()
返回包含所有用于创建平滑图及其置信区间的所有数据的对象的函数。您可以只将输出保存plot.gam()
在obj中
obj <- plot(model, ....)
然后检查obj
,这是每个平滑包含一个分量的列表。添加seWithMean = TRUE
到plot()
调用以获取不依赖于平滑度参数的置信区间。
该软件包mgcv
(比gam更新)可以轻松得出可靠的时间间隔。这种贝叶斯方法不同于置信区间,但结果几乎相同,如数值模拟所示(请参阅mgcv中链接的Marra和Wood的论文)。