0

我在节点 sd[1] 中有错误,它说编译器中的父值无效。我正在使用 R 的“MASS”p 包中的“星系”数据的高斯模型。

library(rjags)
library(MASS)
library(mcsm)

data("galaxies")
summary(galaxies)

y = galaxies
ngroups = 2
jags_data = list(y=y, n=length(y), ngroups=ngroups)

gaussmodel = "
model {
  for (i in 1:n) {
     y[i] ~ dnorm(mu[z[i]], tau[z[i]]) 
     z[i] ~ dcat(group_probs)
}
group_probs ~ ddirich(d)       
  for (j in 1:ngroups) {
  mu_raw[j] ~ dnorm(0, 1E-6)
  tau[j] ~ dgamma(0.001, 0.001)
  sd[j] = pow(tau[j], -0.5) 
  d[j] = 2
}
mu = sort(mu_raw)
}
"

model = jags.model(textConnection(gaussmodel), data=jags_data,
                   n.chains=4)
update(model,n.iter=1E4)
samples = coda.samples(model=model, variable.names=c("mu", "sd", "group_probs"), n.iter=1E4, thin=5) 
4

1 回答 1

0

我不太了解 rjags 和贝叶斯分析,但我认为你的问题出在 sd=pow(tau[j],-0.5) 代码的 sd 行

我相信-0.5是问题所在。我不确定您是否打算将该值设为负数,但该值似乎导致了一些问题,以在您的 dirichlet 模型中添加后缀。

去掉负值似乎可以解决问题。

于 2021-01-07T12:15:34.633 回答