gam.mh
位于 mgcv
包(package)。 说明
GAM 系数可以直接从高斯近似到系数的后验进行模拟,或者使用简单的 Metropolis Hastings 采样器。另请参阅ginla
。
用法
gam.mh(b,ns=10000,burn=1000,t.df=40,rw.scale=.25,thin=1)
参数
b |
|
ns |
要生成的样本数。 |
burn |
要丢弃的任何初始烧录期的长度(除了代码之外)。 |
t.df |
静态多元 t 建议的自由度。对于较重的尾部提案,较低。 |
rw.scale |
生成随机游走提案时缩放后验协方差矩阵的因子。负或非有限跳过随机游走步骤。 |
thin |
仅保留每个 |
细节
后验模拟对于推断模型系数的非线性函数特别有用。模拟后验随机抽取,计算每次抽取的函数,然后从该函数的后验中进行抽取。在许多情况下,模型系数后验的高斯近似是准确的,并且从中生成的样本可以被视为来自系数后验的样本。请参阅下面的示例代码。这种方法在计算上非常高效。
在其他情况下,高斯近似可能会变得很差。一个典型的例子是在具有 log 或 logit 链接的空间模型中,当存在大面积的观测值仅包含零时。在这种情况下,线性预测器很难识别,高斯近似可能变得毫无用处(下面提供了一个示例)。在这种情况下,使用 Metropolis Hastings 采样器从后验模拟有时会很有用。一种简单的方法将基于后验高斯近似的固定提案与基于近似后验协方差矩阵的缩小版本的随机游走提案交替使用。 gam.mh
实现了这一点。固定提案通常促进快速混合,而随机游走组件确保链不会陷入固定高斯提案密度远低于后验密度的区域。
该函数报告两种类型步骤的接受率。如果随机游走接受概率高于四分之一,那么 rw.step
可能应该增加。同样,如果接受率太低,则应降低接受率。随机游走步骤可以完全关闭(见上文),但如果这样做,检查链是否有卡住的部分很重要。
值
包含矩阵 bs
中保留的模拟系数和接受概率的两个条目的列表。
例子
library(mgcv)
set.seed(3);n <- 400
############################################
## First example: simulated Tweedie model...
############################################
dat <- gamSim(1,n=n,dist="poisson",scale=.2)
dat$y <- rTweedie(exp(dat$f),p=1.3,phi=.5) ## Tweedie response
b <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),family=tw(),
data=dat,method="REML")
## simulate directly from Gaussian approximate posterior...
br <- rmvn(1000,coef(b),vcov(b))
## Alternatively use MH sampling...
br <- gam.mh(b,thin=2,ns=2000,rw.scale=.15)$bs
## If 'coda' installed, can check effective sample size
## require(coda);effectiveSize(as.mcmc(br))
## Now compare simulation results and Gaussian approximation for
## smooth term confidence intervals...
x <- seq(0,1,length=100)
pd <- data.frame(x0=x,x1=x,x2=x,x3=x)
X <- predict(b,newdata=pd,type="lpmatrix")
par(mfrow=c(2,2))
for(i in 1:4) {
plot(b,select=i,scale=0,scheme=1)
ii <- b$smooth[[i]]$first.para:b$smooth[[i]]$last.para
ff <- X[,ii]%*%t(br[,ii]) ## posterior curve sample
fq <- apply(ff,1,quantile,probs=c(.025,.16,.84,.975))
lines(x,fq[1,],col=2,lty=2);lines(x,fq[4,],col=2,lty=2)
lines(x,fq[2,],col=2);lines(x,fq[3,],col=2)
}
###############################################################
## Second example, where Gaussian approximation is a failure...
###############################################################
y <- c(rep(0, 89), 1, 0, 1, 0, 0, 1, rep(0, 13), 1, 0, 0, 1,
rep(0, 10), 1, 0, 0, 1, 1, 0, 1, rep(0,4), 1, rep(0,3),
1, rep(0, 3), 1, rep(0, 10), 1, rep(0, 4), 1, 0, 1, 0, 0,
rep(1, 4), 0, rep(1, 5), rep(0, 4), 1, 1, rep(0, 46))
set.seed(3);x <- sort(c(0:10*5,rnorm(length(y)-11)*20+100))
b <- gam(y ~ s(x, k = 15),method = 'REML', family = binomial)
br <- gam.mh(b,thin=2,ns=2000,rw.scale=.4)$bs
X <- model.matrix(b)
par(mfrow=c(1,1))
plot(x, y, col = rgb(0,0,0,0.25), ylim = c(0,1))
ff <- X%*%t(br) ## posterior curve sample
linv <- b$family$linkinv
## Get intervals for the curve on the response scale...
fq <- linv(apply(ff,1,quantile,probs=c(.025,.16,.5,.84,.975)))
lines(x,fq[1,],col=2,lty=2);lines(x,fq[5,],col=2,lty=2)
lines(x,fq[2,],col=2);lines(x,fq[4,],col=2)
lines(x,fq[3,],col=4)
## Compare to the Gaussian posterior approximation
fv <- predict(b,se=TRUE)
lines(x,linv(fv$fit))
lines(x,linv(fv$fit-2*fv$se.fit),lty=3)
lines(x,linv(fv$fit+2*fv$se.fit),lty=3)
## ... Notice the useless 95% CI (black dotted) based on the
## Gaussian approximation!
作者
Simon N. Wood simon.wood@r-project.org
参考
Wood, S.N. (2015) Core Statistics, Cambridge
相关用法
- R gam.models 指定广义加性模型
- R gam.check 拟合 gam 模型的一些诊断
- R gam.reparam 寻找平方根惩罚的稳定正交重新参数化。
- R gam.side GAM 的可识别性边条件
- R gam.fit3 使用 GCV、UBRE/AIC 或 RE/ML 导数计算进行 P-IRLS GAM 估计
- R gam.fit5.post.proc gam.fit5 的后处理输出
- R gam.fit GAM P-IRLS 估计与 GCV/UBRE 平滑度估计
- R gam.control 设置 GAM 拟合默认值
- R gam.outer 使用“外部”迭代最小化 GAM 的 GCV 或 UBRE 分数
- R gam.vcomp 将 gam 平滑度估计报告为方差分量
- R gam.selection 广义加性模型选择
- R gamm 广义加性混合模型
- R gamlss.gH 计算回归系数的对数似然导数
- R gam 具有集成平滑度估计的广义加性模型
- R gam2objective GAM 平滑参数估计的目标函数
- R gamlss.etamu 将 mu 的导数转换为线性预测器的导数
- R gammals 伽玛位置比例模型系列
- R gamSim 模拟 GAM 的示例数据
- R gaulss 高斯位置尺度模型族
- R gfam 分组家庭
- R gumbls Gumbel 位置比例模型族
- R gevlss 广义极值位置比例模型族
- R ginla GAM 集成嵌套拉普拉斯逼近牛顿增强
- R get.var 从列表或 data.frame 中获取命名变量或计算表达式
- R vcov.gam 从 GAM 拟合中提取参数(估计器)协方差矩阵
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Simple posterior simulation with gam fits。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。