R-JAGS中参数的约束阶

R-JAGS中参数的约束阶,r,parameters,constraints,jags,R,Parameters,Constraints,Jags,我被一个简单的问题弄糊涂了。例如,我有10个参数:d[1],d[2],…,d[10]。从数据中可以直观地看出,它们应该在增加。所以我想对他们施加限制 以下是我尝试执行的操作,但它会给出错误消息,显示“节点与父节点不一致”: 然后我试了一下: d[1]~dnorm(0,0.0001) for (j in 2:10){ d[j]~dnorm(0,0.0001)I(d[j-1],) } 这很有效,但我不知道这是否是正确的方法。你能分享一下你的想法吗 谢谢 如果你曾经对这样的事情不确

我被一个简单的问题弄糊涂了。例如,我有10个参数:d[1],d[2],…,d[10]。从数据中可以直观地看出,它们应该在增加。所以我想对他们施加限制

以下是我尝试执行的操作,但它会给出错误消息,显示“节点与父节点不一致”:

然后我试了一下:

  d[1]~dnorm(0,0.0001)
  for (j in 2:10){
   d[j]~dnorm(0,0.0001)I(d[j-1],)
  }
这很有效,但我不知道这是否是正确的方法。你能分享一下你的想法吗


谢谢

如果你曾经对这样的事情不确定,最好只是模拟一些数据来确定你建议的模型结构是否有效(扰流板警报:确实有效)

以下是我使用的模型:

cat('model{
  d[1] ~ dnorm(0, 0.0001) # intercept
  d[2] ~ dnorm(0, 0.0001)
  for(j in 3:11){
    d[j] ~ dnorm(0, 0.0001) I(d[j-1],)
  }
  for(i in 1:200){
    y[i] ~ dnorm(mu[i], tau)
    mu[i] <- inprod(d, x[i,])
  }
  tau ~ dgamma(0.01,0.01)
  }',
file = "model_example.R")```
黑点是真实的参数值,蓝点和蓝线是估计值。看起来只要有足够的数据来估计所有这些参数,这个设置就很好。
第一个实现中似乎存在语法错误。试试看:

model{
  ...
  for (j in 1:10){
    d.star[j]~dnorm(0,0.0001)
  }
  d[1:10] <- sort(d.star)  # notice d is indexed.
}
模型{
...
对于(1:10中的j){
d、 星[j]~dnorm(0,0.0001)
}

d[1:10]谢谢!!这很有帮助。谢谢你指出!我的实际代码实际上有这个d[1:10]片段,但仍然有相同的错误…我问了另一个问题:
library(run.jags)
library(mcmcplots)

# intercept with sorted betas 
set.seed(161)
betas <- c(1,sort(runif(10, -5,5)))

# make covariates, 1 for intercept
x <- cbind(1,matrix(rnorm(2000), nrow = 200, ncol = 10))

# deterministic part of model
y_det <- x %*% betas

# add noise
y <- rnorm(length(y_det), y_det, 1)

data_list <- list(y = as.numeric(y), x = x)

# fit the model
mout <- run.jags('model_example.R',monitor = c("d", "tau"), data = data_list)
caterplot(mout, "d", reorder = FALSE)
points(rev(c(1:11)) ~ betas, pch = 18,cex = 0.9)
model{
  ...
  for (j in 1:10){
    d.star[j]~dnorm(0,0.0001)
  }
  d[1:10] <- sort(d.star)  # notice d is indexed.
}