可用于使用 Simon Wood 的R 的mgcv软件拟合的 GAM 的另一种方法是从拟合的 GAM 中对感兴趣的特征进行后验推断。从本质上讲,这涉及从拟合模型的参数的后验分布进行模拟,预测在精细网格上的响应值x地点,找到x其中拟合曲线取其最大值,重复许多模拟模型,并计算最优位置的置信度作为模拟模型中最优分布的分位数。
我在下面介绍的内容摘自 Simon Wood课程笔记的第 4 页(pdf)
为了获得类似于生物量示例的内容,我将使用我的coenocliner包沿单个梯度模拟单个物种的丰度。
library("coenocliner")
A0 <- 9 * 10 # max abundance
m <- 45 # location on gradient of modal abundance
r <- 6 * 10 # species range of occurence on gradient
alpha <- 1.5 # shape parameter
gamma <- 0.5 # shape parameter
locs <- 1:100 # gradient locations
pars <- list(m = m, r = r, alpha = alpha,
gamma = gamma, A0 = A0) # species parameters, in list form
set.seed(1)
mu <- coenocline(locs, responseModel = "beta", params = pars, expectation = FALSE)
适合 GAM
library("mgcv")
m <- gam(mu ~ s(locs), method = "REML", family = "poisson")
...在范围内的精细网格上进行预测x( locs
)...
p <- data.frame(locs = seq(1, 100, length = 5000))
pp <- predict(m, newdata = p, type = "response")
并可视化拟合函数和数据
plot(mu ~ locs)
lines(pp ~ locs, data = p, col = "red")
这产生
5000 个预测位置在这里可能是多余的,当然对于绘图来说也是如此,但是根据您的用例中的拟合函数,您可能需要一个精细的网格来接近拟合曲线的最大值。
现在我们可以从模型的后面进行模拟。首先我们得到Xp矩阵; 矩阵,一旦乘以模型系数,就可以在新位置从模型中得到预测p
Xp <- predict(m, p, type="lpmatrix") ## map coefs to fitted curves
接下来我们收集拟合的模型系数及其(贝叶斯)协方差矩阵
beta <- coef(m)
Vb <- vcov(m) ## posterior mean and cov of coefs
系数是具有均值向量beta
和协方差矩阵的多元法线Vb
。因此,我们可以从这个多元正态新系数中模拟与拟合模型一致但探索拟合模型中的不确定性的模型。这里我们生成 10000 ( n
)` 个模拟模型
n <- 10000
library("MASS") ## for mvrnorm
set.seed(10)
mrand <- mvrnorm(n, beta, Vb) ## simulate n rep coef vectors from posterior
现在我们可以生成n
模拟模型的预测,通过应用链接函数的倒数ilink()
(xp$locs
拟合曲线最大点处的值(的值)
opt <- rep(NA, n)
ilink <- family(m)$linkinv
for (i in seq_len(n)) {
pred <- ilink(Xp %*% mrand[i, ])
opt[i] <- p$locs[which.max(pred)]
}
现在我们使用 10,000 个最优分布的概率分位数计算最优的置信区间,每个模拟模型一个
ci <- quantile(opt, c(.025,.975)) ## get 95% CI
对于这个例子,我们有:
> ci
2.5% 97.5%
39.06321 52.39128
我们可以将此信息添加到前面的图中:
plot(mu ~ locs)
abline(v = p$locs[which.max(pp)], lty = "dashed", col = "grey")
lines(pp ~ locs, data = p, col = "red")
lines(y = rep(0,2), x = ci, col = "blue")
points(y = 0, x = p$locs[which.max(pp)], pch = 16, col = "blue")
产生
正如我们所期望的那样,给定数据/观察值,拟合最优值的间隔是非常不对称的。
Simon 课程笔记的幻灯片 5 说明了为什么这种方法可能比引导法更受欢迎。后验模拟的优点是它很快 - 自举 GAM 很慢。引导的另外两个问题是(取自西蒙的笔记!)
- 对于参数引导,平滑偏差会导致问题,从中模拟的模型是有偏差的,并且对样本的拟合将更加有偏差。
- 对于非参数“案例重采样”,相同数据的重复副本的存在会导致平滑度不足,尤其是基于 GCV 的平滑度选择。
应该注意的是,这里执行的后验模拟取决于为模型/样条选择的平滑度参数。这可以解释,但西蒙的笔记表明,如果你真的不厌其烦地去做,这没什么区别。(所以我没来……)