我希望你能帮助我一个非常简单的模型,我现在正在Rjags中运行。 我的数据如下:
> print(data)
$R
225738 184094 66275 24861 11266
228662 199379 70308 27511 12229
246808 224814 78255 30447 13425
254823 236063 83099 33148 13961
263772 250706 89182 35450 14750
272844 262707 96918 37116 15715
280101 271612 102604 38692 16682
291493 283018 111125 40996 18064
310474 299315 119354 44552 19707
340975 322054 126901 47757 21510
347597 332946 127708 49103 21354
354252 355994 130561 51925 22421
366818 393534 140628 56562 23711
346430 400629 146037 59594 25313
316438 399545 150733 62414 26720
303294 405876 161793 67060 29545
$N
9597000 8843000 9154000 9956000 11329000
9854932 9349814 9532373 10195193 11357751
9908897 9676950 9303113 10263930 11141510
9981879 9916245 9248586 10270193 10903446
10086567 10093723 9307104 10193818 10660101
10242793 10190641 9479080 10041145 10453320
10434789 10222806 9712544 9835154 10411620
10597293 10238784 10014422 9611918 10489448
10731326 10270163 10229259 9559334 10502839
10805148 10339566 10393532 9625879 10437809
10804571 10459413 10466871 9800559 10292169
10696317 10611599 10477448 10030407 10085603
10540942 10860363 10539271 10245334 9850488
10411836 11053751 10569913 10435763 9797028
10336667 11152428 10652017 10613341 9850533
10283624 11172747 10826549 10719741 9981814
$n
[1] 16
$na
[1] 5
$pbeta
[1] 0.70 0.95
,模型如下:
cat('model{
## likelihoods ##
for(k in 1:na){ for(w in 1:n){ R[w,k] ~ dbin( theta[w,k], N[w,k] ) }}
for(k in 1:na){ for(w in 1:n){ theta[w,k] <- 0.5*beta[w,k]*0.5 }}
for(k in 1:na){
beta[1,k] ~ dunif(pbeta[1], pbeta[2])
beta.plus[1,k] <- beta[1,k]
for (w in 2:n){
beta.plus[w,k] ~ dunif(beta[(w-1),k], 0.95)
beta[w,k] <- beta.plus[w,k]} } }',
file='model1.bug')
######## initial random values for beta
bbb=bb.plus=matrix(rep(NA, 16*5), byrow=T, ncol=5);
for(k in 1:5){
bbb[1,k]=runif(1, 0.7,0.95);
for (w in 2:16){
bb.plus[w,k] = runif(1, bbb[w-1,k], 0.95);
bbb[w,k]=bb.plus[w,k]} }
## data & initial values
inits1 <- list('beta'= bbb )
jags_mod <- jags.model('model1.bug', data=data, inits=inits1, n.chains=1, n.adapt=1000)
update(jags_mod, n.iter=1000)
posts=coda.samples(model=jags_mod,variable.names=c('beta','theta'), n.iter=niter, thin=1000)
超级简单。这实际上是一个比较复杂的缩小模型,它给出了我在这里得到的完全相同的错误信息。 每当我运行这个模型时,根本没有问题。 您会注意到参数beta的先验是以从0.7增加到0.95的方式编写的。
现在我想&#34;关闭&#34; R通过注释掉模型的第一行来获得R的可能性。我想这样做,看看在任何情况下如何估计参数theta(基本上我应该在这种情况下找到theta = beta / 4,但这对我没问题)
当我这样做时,我得到一个&#34;无效的父母&#34;参数beta的误差,通常在矩阵的底行(行15或16)中。 实际上它比这更复杂:有时候我会收到错误,有时我不会(大多数情况下都是这样)。
我不喜欢&#39;理解为什么会发生这种情况:不应该根据可能性的存在/不存在而生成beta值?
很抱歉,如果这是一个天真的问题,我真的希望你能帮助我解决这个问题。 谢谢,最好! Emanuele的
答案 0 :(得分:1)
在更多地使用模型后,我想我找到了问题的原因。均匀分布的一个必要方面(即unif(a,b)
)是a
&lt; b
。当您在模型中使均匀分布变得越来越小时,您将a
越来越接近b
。有时,它无法访问它,但有时候a
等于b
,您会收到无效的父值错误。例如,在您的模型中,如果包括:
example ~ dunif(0.4,0.4)
您将在节点示例中获得&#34;错误,无效的父值&#34;。
因此,为了解决这个问题,我认为更容易调整指定先验的方式而不是随机分配它们。您可以使用beta发行版执行此操作。在第一步,beta(23.48, 4.98)
涵盖了从0.7到0.95的大部分范围,但我们可以截断它以确保它位于该范围之间。然后,当n
增加时,您可以降低4.98,以便先前收缩至0.95。下面的模型将执行此操作。检查先验后,theta
确实等于beta/4
。
data.list <- list( n = 16, na = 5,
B = rev(seq(0.1, 4.98, length.out = 16)))
cat('model{
## likelihoods ##
#for(k in 1:na){ for(w in 1:n){ R[w,k] ~ dbin( theta[w,k], N[w,k] ) }}
for(k in 1:na){ for(w in 1:n){ theta[w,k] <- 0.5*beta[w,k]*0.5 }}
for(k in 1:na){
for(w in 1:n){
beta[w,k] ~ dbeta(23.48, B[w]) T(0.7,0.95)
} } }',
file='model1.bug')
jags_mod <- jags.model('model1.bug', data=data.list,
inits=inits1, n.chains=1, n.adapt=1000)
update(jags_mod, n.iter=1000)
posts=coda.samples(model=jags_mod,
variable.names=c('beta','theta'), n.iter=10000, thin=10)
查看此模型的一些输出,我们得到
beta[1,1] theta[1,1]
[1,] 0.9448125 0.2362031
[2,] 0.7788794 0.1947198
[3,] 0.9498806 0.2374702
0.9448125/4
[1] 0.2362031
由于我并不真正知道您尝试使用该模型的原因,我不知道beta版本是否适合您的需求,但上述方法将模仿您尝试做的事情。