Censure / troncature dans JAGS

10

J'ai une question sur la façon de régler un problème de censure dans JAGS.

J'observe un mélange bivarié normal où les valeurs X ont une erreur de mesure. Je voudrais modéliser les véritables «moyens» sous-jacents des valeurs censurées observées.

Xtrue+ϵ=Xobserve ϵN(0,s=.5)

Voici ce que j'ai maintenant:

 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 a également une erreur de mesure. Ce que je veux faire, c'est quelque chose comme ça:

 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)

De toute évidence, la commande c n'est pas valide dans JAGS.

Merci d'avance.

Glen
la source
3
Pour tronquer, utilisez T (-, -), mais lisez le manuel de l'utilisateur pour plus d'informations sur la censure et la troncatureq
David LeBauer

Réponses:

9

C'est peut-être ce que vous recherchez:

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

JAGS propose des options de censure et de troncature. Il semble que vous souhaitiez la troncature, car vous savez a priori que l'observation se situe dans une plage particulière

Lisez le manuel de l'utilisateur pour plus de détails sur la façon dont Jags utilise la troncature et la censure.

David LeBauer
la source
3

Merci pour les conseils David. J'ai posté cette question sur le forum de support JAGS et j'ai obtenu une réponse utile. La clé était d'utiliser un tableau à deux dimensions pour les «vraies» valeurs.

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) 
Glen
la source