我很难找到这样的教程/示例,所以我想问:我有一个变量Xi,经过一次测量,我想表明,每增加一次测量,X的分布预测就会变得更紧。当然我可以用1:2 1:3 1:4等继续重新运行模型。但这很乏味。我希望有一些我不知道的逐步编码。
#----------------------------------------------------------------------
#THE JAGS MODEL FOR X.
#----------------------------------------------------------------------
modelstring="
model {
#prior
#------------------------------------------------------------------------------
mu_x ~ dnorm(0,1E-12)
sd ~ dunif(0,50)
tau <- sd*sd
prec_x <- 1/tau
#LIKELIHOOD
#------------------------------------------------------------------------------
for (i in 1:total) {
x[i] ~ dnorm(mu_x,prec_x)
}
pred.x ~ dnorm(mu_x,prec_x)
}
"
任何人都知道如何根据当时可用的数据指定模型来估算每个时间点的pred.x吗?
答案 0 :(得分:0)
要使用单个模型文件执行此操作,您必须为每个预测使用不同的mu_x和prec_x,因为如果它们基于较少的数据,它们将具有不同的(更加扩散的)后验分布。所以将整个事物包裹在j的循环中,使用像
这样的东西for (i in 1:j) {
x[i,j] ~ dnorm(mu_x[j],prec_x[j])
并将j下标放在其他所有内容上。最后,您必须提供x作为原始x的重复矩阵。您可以使用数据{}块来促进这一点(参见手册的第7.0.4节)。
答案 1 :(得分:0)
Chris,你的回答很有效。我只是想发布我的代码供参考:
我首先为Xi设置矩阵,其中i是测量值
set up data into matrix:
xmat<-matrix(nrow=#,ncol=#)
for (j in 1:#) {
for (i in 1:j) {
xmat[i,j] <- x[i]
}
}
DataList = list( #create datalist for JAGS
x=xmat
)
#JAGS MODEL
model {
#LIKELIHOOD
for (j in 1:#) {
for (i in 1:j) {
x[i,j] ~ dnorm(mu_x[j],prec_x[j])
}
pred.x[j] ~ dnorm(mu_x[j],prec_x[j])
#prior
sd[j] ~ dunif(0,50)
tau[j] <- sd[j]*sd[j]
prec_ic[j] <- 1/tau[j]
mu_x[j] ~ dnorm(0,1E-12)
}
}