我们希望使用 R 和 WinBugs 运行给定的贝叶斯模型进行决策。我们正在使用 RStudio 和 R2WinBugs。模型由下式给出:
# Search and Stop
model{
# Data
for (i in 1:ns){
for (q in 1:nq){
y[i,q] ~ dbern(dec[t[i,q,z1[i,q]]])
ypred[i,q] ~ dbern(dec[t[i,q,z1[i,q]]])
}
}
# TTB Decision
for (i in 1:ns){
for (q in 1:nq){
for (j in 1:nc){
tmp1[i,q,j] <- (m[p[q,1],j]-m[p[q,2],j])*pow(2,s[i,j]-1)
}
tmp2[i,q] <- sum(tmp1[i,q,1:nc])
tmp3[i,q] <- -1*step(-tmp2[i,q])+step(tmp2[i,q])
t[i,q,1] <- tmp3[i,q]+2
}
}
# WADD Decision
for (i in 1:ns){
for (q in 1:nq){
for (j in 1:nc){
tmp4[i,q,j] <- (m[p[q,1],j]-m[p[q,2],j])*x[j]
}
# Find if Cue Favors First, Second, or Neither Stimulus
tmp5[i,q] <- sum(tmp4[i,q,1:nc])
tmp6[i,q] <- -1*step(-tmp5[i,q])+step(tmp5[i,q])
t[i,q,2] <- tmp6[i,q]+2
}
}
# Follow Decision With Probability Gamma, or Guess
dec[1] <- 1-gamma
dec[2] <- 0.5
dec[3] <- gamma
# Cue Search Order From Ranking stmp
for (i in 1:ns){
for (j in 1:nc){
s[i,j] <- rank(stmp[i,1:nc],j)
stmp[i,j] ~ dnorm(0,1)I(0,)
}
}
# TTB and WADD Rate Per Subject
for (i in 1:ns){
phi[i] ~ dbeta(1,1)
for (q in 1:nq){
z[i,q] ~ dbern(phi[i])
z1[i,q] <- z[i,q]+1
}
}
gamma ~ dunif(0.5,1)
}`
底层数据由一个 matlab 文件给出,我们通过 readMat() 方法读入该文件。
所有数据 <-readMat("file.mat")。
这实际上是有效的,因为我们可以在 RStudio 中看到这个文件给出的数据。该文件包含数组 x、v、p、y、m。这些数组存储在列表中
数据<-列表(所有数据$x,所有数据$v,所有数据$p,所有数据$y,所有数据$m)。
目前我们使用 NULL 作为 inits 值,这意味着 WinBugs 生成数据。但是我们不确定是否需要 WinBugs 来生成数据,或者我们是否需要自己指定:
样本 <- 错误(数据,inits=NULL,参数,model.file = "Path/SearchStop.txt",bugs.directory = bugsdir,debug = TRUE)
这会带来以下错误:
undefined variable
compile(3)
gen.inits()
command #Bugs:gen.inits cannot be executed (is greyed out)
thin.updater(3)
update(334)
command #Bugs:update cannot be executed (is greyed out)
set(gamma)
command #Bugs:set cannot be executed (is greyed out)
set(deviance)
command #Bugs:set cannot be executed (is greyed out)
dic.set()
command #Bugs:dic.set cannot be executed (is greyed out)
在 R2WinBugs 中没有关于哪个变量未定义的确切信息,但是当我们在 Matlab 中尝试它时,错误消息说 z1 未定义。