在我的模型中,我有 10 个选项(从 1 到 10)供每个受试者和每个试验选择 ( expectancy
)。我根据下图中的规则计算了每个选项的值,因此每个选项的值根据每次试验之间的差异shock
和v
每次试验中的差异进行更新(乘alpha
)。然后,我使用 softmax 规则将v
每个选项转换为具有相同功能的特定概率:JAGS 错误:“解析未声明的变量”和“exp 的向量参数无效”。
我想这里的问题是我不能让 jags 更新相同选择的值。
数据:expectancy
= 每次试验中从 1 到 10 的数字。shock
=每次试验中的编号为 1 或 0。(我在下面提供了示例数据)
第二个情节是如何在 stan 中完成 2 个选择/1 个主题情况。
RW_model <- function(){
# data
for(i in 1:nsubjects) # for each person
{
# initial value for v
v [i,1,expectancy[i,1]] <- 0
for (j in 2:ntrials) # for each trial
{
# expectancy chosen
expectancy[i,j] ~ dcat(mu[i,j,1:10])
predk[i,j] ~ dcat(mu[i,j,1:10])
# softmax rule to calculate values of each expectancy for each subject
# tau is the value sensitivity parameter
mu[i,j,1:10] <- exp_v[i,j,1:10] / sum(exp_v[i,j,1:10])
exp_v[i,j,expectancy[i,j-1]] <- exp(v[i,j,expectancy[i,j-1]]/tau[i])
# prediction error: difference between feedback and learned values of the chosen expectancy
pe [i,j-1] <- shock [i,j-1] - v [i,j-1,expectancy[i,j-1]]
# value updating process for expectancy
v [i,j,expectancy[i,j-1]] <- v [i,j-1,expectancy[i,j-1]] + alpha [i] * pe [i,j-1]
}
}
# priors
for (i in 1:nsubjects){
tau [i] ~ dunif (0,3)
alpha [i] ~ dunif (0,1)
}
}
# example data/ initial value/ parameters
nsubjects <- 42
ntrials <- 14
shock <- matrix(c(0,0,1,1,0,0,1,1,0,0,1,0,1,0),nrow=42,ncol = 14,byrow = T)
expectancy <- matrix(c(1,2,3,4,5,6,7,7,8,8,7,10,10,00),nrow=42,ncol = 14,byrow = T)
data <- list('shock','nsubjects','ntrials','expectancy')
myinits <- list(list(tau = runif (42,0,3),
alpha = runif (42,0,1)))
parameters <- c("tau",'alpha','v','predk')
# jags sampling
samples <- jags(data, inits=myinits, parameters,
model.file = RW_model,
n.chains=1, n.iter=1000, n.burnin=500, n.thin=1, DIC=T)