JAGS 中的审查/截断

机器算法验证 马尔可夫链蒙特卡罗 审查 截断 锯齿
2022-03-08 04:29:08

我有一个关于如何在 JAGS 中适应审查问题的问题。

我观察到 X 值有测量误差的双变量混合正态。我想对观察到的审查值的真正潜在“平均值”进行建模。

xtrue+ϵ=xobserved ϵN(0,sd=.5)

这是我现在拥有的:

 for (i in 1:n){
   x[i,1:2]~dmnorm(mu[z[i],1:2], tau[z[i],1:2,1:2])
   z[i]~dcat(prob[ ])
 }

Y 也有测量误差。我想做的是这样的:

 for (i in 1:n){
   x_obs[i] ~ dnorm(x_true[i],prec_x)I(x_true[i],)
   y_obs[i] ~ dnorm(y_true[i],prec_y)
   c(x_true[i]:y_true[i])~dmnorm(mu[ z [ i ],1:2], tau[z[i],1:2,1:2])
   z[i]~dcat(prob[ ])
 }

 #priors for measurement error
 e_x~dunif(.1,.9)
 prec_x<-1/pow(e_x,2)
 e_y~dunif(2,4)
 prec_y<-1/pow(e_y,2)

显然 c 命令在 JAGS 中无效。

提前致谢。

2个回答

也许这就是您正在寻找的:

x_obs[i] ~ dnorm(x_true[i],prec_x)T(x_true[i], )

JAGS 具有审查和截断选项。听起来您想要截断,因为您先验地知道观察结果位于特定范围内

有关 jags 如何使用截断和审查的更多详细信息,请阅读用户手册。

感谢大卫的提示。我在 JAGS 支持论坛上发布了这个问题并得到了有用的答案。关键是对“真实”值使用二维数组。

for (j in 1:n){ 
  x_obs[j] ~ dnorm(xy_true[j,1], prec_x)T(xy_true[j,1],) 
  y_obs[j] ~ dnorm(xy_true[j,2], prec_y)
  xy_true[j, ] ~ dmnorm(mu[ z [j],1:2], tau[z[j],1:2,1:2]) 
  z[j]~dcat(prob[ ]) 
}

 #priors for measurement error 
 e_x~dunif(.1,.9)
 prec_x<-1/pow(e_x,2)
 e_y~dunif(2,4)
 prec_y<-1/pow(e_y,2)