2

我正在使用 RJAGS 从一些数据中推断均值和协方差矩阵,我注意到每当我在精度矩阵中放置一个约束时,我都会收到以下错误消息

jags.model(file = "model.tmp", data = data) 中的错误:节点 B 中的错误无法找到合适的采样器

这是一个最小的示例,其中我将均值和精度矩阵乘以常数向量。请注意,仅当重新调整精度矩阵时才会出现错误消息。出于某种原因,RJAGS 可以仅重新调整平均值。在这个简单的情况下,显然我可以先用 A0 重新调整数据,但是我希望能够在事先不知道 A0 的情况下做到这一点。有任何想法吗?

model="model {

     for(i in 1:N){
         X[i,1:3] ~ dmnorm(An,Bn)
     }

     B ~ dwish(B0,3)

     for(i in 1:3){
         An[i]=A[i]*A0[i]
         for(j in 1:3){
             Bn[i,j]=B[i,j]*A0[i]
         }
     }

     for(i in 1:3){
         for(j in 1:3){              
             B0[i,j]=equals(i,j)*1e-3
         }
     }

     A ~ dmnorm(c(0,0,0),B0)

}"

X=matrix(rnorm(300,0,1),ncol=3)

data=list(X=X,N=nrow(X),A0=c(1,2,2));

varnames=c("A","B","S")

burn_in=100;
steps=10000;
thin=1;

fileConn=file("model.tmp")
writeLines(model,fileConn);
close(fileConn)

m=jags.model(file="model.tmp",data=data);
update(m,burn_in)
draw=jags.samples(m,steps,thin=thin,variable.names=varnames)
4

0 回答 0