阅读mgcv::gam
的帮助页面:
对于使用拟合模型预测的任何数量,置信/可信区间很容易获得
但是我想不出一种方法来真正得到一个。我以为predict.gam
会有一个type=confidence
和一个level
参数,但它没有。你能帮助我如何创建它吗?
阅读mgcv::gam
的帮助页面:
对于使用拟合模型预测的任何数量,置信/可信区间很容易获得
但是我想不出一种方法来真正得到一个。我以为predict.gam
会有一个type=confidence
和一个level
参数,但它没有。你能帮助我如何创建它吗?
以通常的方式:
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)
您从 a 中替换为适当的值或您需要的区间的高斯分布。
请注意,我使用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()
调用以获取不以平滑参数为条件的置信区间。
如果您只想绘制它们,则该plot.gam
函数具有使用阴影参数默认为置信区间的阴影。另请参阅gam.vcomp
获取间隔。
该软件包mgcv
(比 gam 更新)很容易绘制可信区间。这种贝叶斯方法与置信区间不同,但结果几乎相同,正如数值模拟所显示的那样(参见Marra 和 Wood在 mgcv 中链接的论文)。