我正在使用 Kruschke 描述的分层建模框架来 比较 JAGS 中的两个模型。这个框架的想法是通过将每个版本指定为一个类别变量的一个级别来运行和比较模型的多个版本。这个分类变量的后验分布可以解释为各种模型的相对概率。
在下面的代码中,我比较了两个模型。这些模型在形式上是相同的。每个都有一个需要估计的参数,mE
。可以看出,这些模型的先验有所不同。两个先验都分布为众数为 0.5 的 beta 分布。然而,模型 2 的先验分布更加集中。另请注意,我使用了伪先验,我希望这些伪先验可以防止链条卡在其中一个模型上。但无论如何,该模型似乎卡住了。
这是模型:
model {
m ~ dcat( mPriorProb[] )
mPriorProb[1] <- .5
mPriorProb[2] <- .5
omegaM1[1] <- 0.5 #true prior
omegaM1[2] <- 0.5 #psuedo prior
kappaM1[1] <- 3 #true prior for Model 1
kappaM1[2] <- 5 #puedo prior for Model 1
omegaM2[1] <- 0.5 #psuedo prior
omegaM2[2] <- 0.5 #true prior
kappaM2[1] <- 5 #puedo prior for Model 2
kappaM2[2] <- 10 #true prior for Model 2
for ( s in 1:Nsubj ) {
mE1[s] ~ dbeta(omegaM1[m]*(kappaM1[m]-2)+1 , (1-omegaM1[m])*(kappaM1[m]-2)+1 )
mE2[s] ~ dbeta(omegaM2[m]*(kappaM2[m]-2)+1 , (1-omegaM2[m])*(kappaM2[m]-2)+1 )
mE[s] <- equals(m,1)*mE1[s] + equals(m,2)*mE2[s]
z[s] ~ dbin( mE[s] , N[s] )
}
}
以下是相关数据的 R 代码:
dataList = list(
z = c(81, 59, 36, 18, 28, 59, 63, 57, 42, 28, 47, 55, 38,
30, 22, 32, 31, 30, 32, 33, 32, 26, 13, 33, 30),
N = rep(96, 25),
Nsubj = 25
)
当我运行这个模型时,MCMC 每次迭代都花费在m = 1
,并且永远不会跳到m = 2
。我尝试了很多不同的先验和伪先验组合,但似乎找不到 MCMC 会考虑的组合m = 2
。我什至尝试为模型 1 和 2 指定相同的先验和伪先验,但这没有帮助。在这种情况下,我预计 MCMC 会在模型之间相当频繁地跳转,大约一半时间考虑一个模型,一半时间考虑另一个模型。但是,JAGS 仍将整个时间都花在了m = 1
. 我已经运行了长达 6000 次迭代的链,这对于像这样的简单模型来说应该足够长了。
如果有人对如何解决此问题有任何想法,我将不胜感激。
干杯,蒂姆