ginla
位于 mgcv
包(package)。 说明
使用 Wood (2019) 中说明的 INLA 变体,将集成嵌套拉普拉斯逼近 (INLA, Rue et al. 2009) 应用于可通过 gam
或 bam
估计的模型。为每个系数、选定系数或系数向量的线性变换生成边际后验密度。
用法
ginla(G,A=NULL,nk=16,nb=100,J=1,interactive=FALSE,int=0,approx=0)
参数
G |
预拟合 gam 对象,由 |
A |
感兴趣的系数的变换矩阵,或者感兴趣的参数的索引数组。如果 |
nk |
用于评估其对数边后验密度的每个系数的值的数量。然后对这些点进行样条插值。 |
nb |
评估系数后验密度以作为网格函数返回的点数。 |
J |
在对数行列式近似步骤中要采取多少个行列式更新步骤。不建议增加此值。 |
interactive |
如果这是 |
int |
0 跳过积分并仅使用后验模态平滑参数。 >0 用于使用 Rue 等人提出的 CCD 方法进行积分。 (2009)。 |
approx |
0 表示完全近似; 1 更新Hessian,但使用近似模式; 2 作为 1 并假设常数 Hessian。查看具体信息。 |
细节
让gam
。他们还提供了一种更昂贵的替代近似,基于计算仅与以下元素相关的对数行列式: 具有足够高的相关性 根据简单的高斯后验近似:效率似乎再次取决于稀疏性。 Wood (2018) 建议精确计算所需的后验模式,并将对数行列式近似基于无条件模型下 Hessian 的 BFGS 更新。无论有或没有稀疏性,后者都是有效的,而前者是“免费”的改进。这两个步骤都很有效,因为获得 Cholesky 因子的成本很低 从那 - 看choldrop
。这是该例程所采用的方法。
approx
参数允许两个进一步的近似来加速计算。对于approx==1
,不使用精确的后验条件模式,而是使用简单高斯后验近似隐含的条件模式。对于approx==2
,模态使用相同的近似值,并且假定 Hessian 矩阵为常数。后者非常快,因为不需要对数联合密度梯度评估。
请注意,对于许多模型,INLA 估计值非常接近通常的后验高斯近似,interactive
参数对于研究此问题非常有用。
bam
模型仅支持 disrete=TRUE
选项。 discrete=FALSE
方法效率太低。不支持 AR1 模型(相关参数将被忽略)。
值
包含元素 beta
和 density
的列表,这两个元素都是矩阵。每一行与一个感兴趣的系数(或线性系数组合)相关。两个矩阵都有nb
列。如果int!=0
,则另一个元素reml
给出CCD积分中使用的积分权重,首先给出中心点权重。
警告
此例程仍处于实验阶段,因此细节可能会发生变化。此外,目前并非所有步骤都具有最佳效率。
该例程是为相对专业的用户编写的。
ginla
并非旨在处理排名不足的模型。
例子
require(mgcv); require(MASS)
## example using a scale location model for the motorcycle data. A simple plotting
## routine is produced first...
plot.inla <- function(x,inla,k=1,levels=c(.025,.1,.5,.9,.975),
lcol = c(2,4,4,4,2),lwd = c(1,1,2,1,1),lty=c(1,1,1,1,1),
xlab="x",ylab="y",cex.lab=1.5) {
## a simple effect plotter, when distributions of function values of
## 1D smooths have been computed
require(splines)
p <- length(x)
betaq <- matrix(0,length(levels),p) ## storage for beta quantiles
for (i in 1:p) { ## work through x and betas
j <- i + k - 1
p <- cumsum(inla$density[j,])*(inla$beta[j,2]-inla$beta[j,1])
## getting quantiles of function values...
betaq[,i] <- approx(p,y=inla$beta[j,],levels)$y
}
xg <- seq(min(x),max(x),length=200)
ylim <- range(betaq)
ylim <- 1.1*(ylim-mean(ylim))+mean(ylim)
for (j in 1:length(levels)) { ## plot the quantiles
din <- interpSpline(x,betaq[j,])
if (j==1) {
plot(xg,predict(din,xg)$y,ylim=ylim,type="l",col=lcol[j],
xlab=xlab,ylab=ylab,lwd=lwd[j],cex.lab=1.5,lty=lty[j])
} else lines(xg,predict(din,xg)$y,col=lcol[j],lwd=lwd[j],lty=lty[j])
}
} ## plot.inla
## set up the model with a `gam' call...
G <- gam(list(accel~s(times,k=20,bs="ad"),~s(times)),
data=mcycle,family=gaulss(),fit=FALSE)
b <- gam(G=G,method="REML") ## regular GAM fit for comparison
## Now use ginla to get posteriors of estimated effect values
## at evenly spaced times. Create A matrix for this...
rat <- range(mcycle$times)
pd0 <- data.frame(times=seq(rat[1],rat[2],length=20))
X0 <- predict(b,newdata=pd0,type="lpmatrix")
X0[,21:30] <- 0
pd1 <- data.frame(times=seq(rat[1],rat[2],length=10))
X1 <- predict(b,newdata=pd1,type="lpmatrix")
X1[,1:20] <- 0
A <- rbind(X0,X1) ## A maps coefs to required function values
## call ginla. Set int to 1 for integrated version.
## Set interactive = 1 or 2 to plot marginal posterior distributions
## (red) and simple Gaussian approximation (black).
inla <- ginla(G,A,int=0)
par(mfrow=c(1,2),mar=c(5,5,1,1))
fv <- predict(b,se=TRUE) ## usual Gaussian approximation, for comparison
## plot inla mean smooth effect...
plot.inla(pd0$times,inla,k=1,xlab="time",ylab=expression(f[1](time)))
## overlay simple Gaussian equivalent (in grey) ...
points(mcycle$times,mcycle$accel,col="grey")
lines(mcycle$times,fv$fit[,1],col="grey",lwd=2)
lines(mcycle$times,fv$fit[,1]+2*fv$se.fit[,1],lty=2,col="grey",lwd=2)
lines(mcycle$times,fv$fit[,1]-2*fv$se.fit[,1],lty=2,col="grey",lwd=2)
## same for log sd smooth...
plot.inla(pd1$times,inla,k=21,xlab="time",ylab=expression(f[2](time)))
lines(mcycle$times,fv$fit[,2],col="grey",lwd=2)
lines(mcycle$times,fv$fit[,2]+2*fv$se.fit[,2],col="grey",lty=2,lwd=2)
lines(mcycle$times,fv$fit[,2]-2*fv$se.fit[,2],col="grey",lty=2,lwd=2)
## ... notice some real differences for the log sd smooth, especially
## at the lower and upper ends of the time interval.
作者
Simon N. Wood simon.wood@r-project.org
参考
Rue, H, Martino, S. & Chopin, N. (2009) Approximate Bayesian inference for latent Gaussian models by using integrated nested Laplace approximations (with discussion). Journal of the Royal Statistical Society, Series B. 71: 319-392.
Wood (2019) Simplified Integrated Laplace Approximation. In press Biometrika.
相关用法
- R gam.check 拟合 gam 模型的一些诊断
- R gam.reparam 寻找平方根惩罚的稳定正交重新参数化。
- R gam.side GAM 的可识别性边条件
- R gamm 广义加性混合模型
- R gamlss.gH 计算回归系数的对数似然导数
- R gfam 分组家庭
- 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 具有集成平滑度估计的广义加性模型
- R gaulss 高斯位置尺度模型族
- R gumbls Gumbel 位置比例模型族
- R gam.mh 具有 gam 拟合的简单后验模拟
- R gam.control 设置 GAM 拟合默认值
- R gevlss 广义极值位置比例模型族
- R gam2objective GAM 平滑参数估计的目标函数
- R gam.outer 使用“外部”迭代最小化 GAM 的 GCV 或 UBRE 分数
- R gamlss.etamu 将 mu 的导数转换为线性预测器的导数
- R gam.vcomp 将 gam 平滑度估计报告为方差分量
- R gammals 伽玛位置比例模型系列
- R gam.models 指定广义加性模型
- R gamSim 模拟 GAM 的示例数据
- R gam.selection 广义加性模型选择
- R get.var 从列表或 data.frame 中获取命名变量或计算表达式
- R vcov.gam 从 GAM 拟合中提取参数(估计器)协方差矩阵
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 GAM Integrated Nested Laplace Approximation Newton Enhanced。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。