我正在研究一个实验设计问题,并试图通过R和r2jags来拟合一个r2jags模型。
要度量结转效果,我必须访问其中一个变量的列表中的i-1元素。当i=1时,此变量必须返回其值列表中的最后一项。我试着使用ifelse(),但这不管用。
我尝试了什么:
for (i in 1:Ntotal){
j <- ifelse(i==1,Ntotal,j)
y[i] ~ dnorm(y.hat[i], tau)
y.hat[i] <- mu + beta*a[i] + tau_d*b[i]*period[i] + rho*product[j] + epsilon[i]
epsilon[i] ~ dnorm(0, tau) # gaussian error
}我知道错误:
Error in jags.model(file = "TEMPmodel.txt", data = dataList, n.chains = 3, :
RUNTIME ERROR:
Compilation error on line 7.
Possible directed cycle involving j任何关于如何实现我的解决方案的洞察力都将受到赞赏。
在R中有一个简单的例子,说明我想要达到的目标,以防上面的情况不清楚。对于变量d,我必须访问前面的元素。在索引开始时,前面的元素是最后一个元素。对于JAGS,我不知道如何编写我的模型来完成这个任务。
i = 1
exam <- data.frame(a=c(5,6,7), b=c(10,11,12), d=c(20,21,22))
exam$a[i] + exam$b[i] + exam$d[i-1]发布于 2016-04-24 19:21:14
这一行代码有几个值得指出的问题:
j <- ifelse(i==1,Ntotal,j)首先,它在for循环中,所以您试图重新定义节点j,所以您必须用i索引j;其次,j被定义为自身,因此是有向循环消息。下面的代码实现了我认为您想要的结果:
m <- 'model{
for(i in 1:10){
j[i] <- ifelse(i==1, 10, i-1)
}
#monitor# j
}'
runjags::run.jags(m)但是,使j在R中成为一个虚拟变量并将其作为数据提供给JAGS可能更简单,即:
m <- 'model{
for(i in 1:N){
new[i] <- j[i]
# Or something else involving j[i]
}
#monitor# new
#data# j, N
}'
N <- 10
j <- c(2:N, 1)
runjags::run.jags(m)无论哪种方式,每当您引用j时,都需要按i对其进行索引,例如:
product[j[i]]哑光
https://stackoverflow.com/questions/36820039
复制相似问题