首页 > 解决方案 > JAGS:可变数量的集群

问题描述

我正在尝试运行一个贝叶斯聚类模型,其中聚类的数量是随机的,具有二项分布。这是我的 Jags 模型:

model{
    for(i in 1:n){
        y[ i ,1:M] ~ dmnorm( mu[z[i] , 1:M] , I[1:M, 1:M])      
        z[i] ~ dcat(omega[1:M])
    }
    for(j in 1:M){
        mu[j,1:M] ~ dmnorm( mu_input[j,1:M] , I[1:M, 1:M] )
    }
    M ~ dbin(p, Mmax)       
    omega ~ ddirich(rep(1,Mmax))
}

要运行它,我们需要定义参数和变量的初始值,这是在这个 R 脚本中完成的

Mmax=10

y = matrix(0,100,Mmax)
I = diag(Mmax)
y[1:50,] = mvrnorm(50, rep(0,Mmax), I)
y[51:100,] = mvrnorm(50, rep(5,Mmax), I)

plot(y[,1:2])

z = 1*((1:100)>50) + 1

n = dim(y)[1]

M=2
mu=matrix(rnorm(Mmax^2),nrow=Mmax)
mu_input=matrix(2.5,Mmax,Mmax) ### prior mean
p=0.5

omega=rep(1,Mmax)/Mmax

data = list(y = y, I = I, n = n, mu_input=mu_input, Mmax = Mmax, p = p)

inits = function() {list(mu=mu,
                         M=M,
                         omega = omega) }

require(rjags)
modelRegress=jags.model("cluster_variabile.txt",data=data,inits=inits,n.adapt=1000,n.chains=1)

然而,运行最后一个命令,一个得到

Error in jags.model("cluster_variabile.txt", data = data, inits = inits,
:   RUNTIME ERROR: Compilation error on line 6. 
Unknown variable M Either supply values 
for this variable with the data or define it  on the left hand side of a relation.

这对我来说毫无意义,因为即使 M 已经出现在模型的第 4 行,错误也出现在第 6 行!运行此脚本的实际问题是什么?

标签: rjagsrjags

解决方案


所以,我认为主要问题是你不能改变你正在更新的随机节点的维度。这似乎是可逆跳跃 MCMC 的问题,尽管我认为你不能在 JAGS 中做到这一点。


推荐阅读