Penyensoran / Pemotongan dalam JAGS

10

Saya punya pertanyaan tentang bagaimana menyesuaikan masalah sensor di JAGS.

Saya mengamati campuran bivariat normal di mana nilai X memiliki kesalahan pengukuran. Saya ingin memodelkan 'sarana' yang mendasari sebenarnya dari nilai-nilai yang disensor yang diamati.

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

Inilah yang saya miliki sekarang:

 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 juga memiliki kesalahan pengukuran. Yang ingin saya lakukan adalah sesuatu seperti ini:

 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)

Jelas perintah c tidak valid di JAGS.

Terima kasih sebelumnya.

Lembah kecil
sumber
3
Untuk memotong, gunakan T (-, -), tetapi bacalah manual pengguna untuk info tentang sensor dan truncationq
David LeBauer

Jawaban:

9

Mungkin ini yang Anda cari:

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

JAGS memiliki opsi untuk menyensor dan memotong. Sepertinya Anda ingin pemotongan, karena Anda tahu a-priori bahwa pengamatan berada dalam rentang tertentu

Baca manual pengguna untuk detail lebih lanjut tentang bagaimana jag menggunakan pemotongan dan sensor.

David LeBauer
sumber
3

Terima kasih untuk tipsnya David. Saya memposting pertanyaan ini di forum dukungan JAGS dan mendapat jawaban yang bermanfaat. Kuncinya adalah menggunakan array dua dimensi untuk nilai-nilai 'benar'.

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) 
Lembah kecil
sumber