这是我第一次使用JAGS,在建模数据时遇到了一些错误。
以下是我的数据的简要说明:
总共n
个人(例如,2个)解决了m
个问题(例如,6个)。所有问题都有3个答案,每个答案都有一定的值V
。
以下是the graphic model(某些变量名称不同:IG
和y
分别与V
和answer
相同; {{1} }不包含在我的模型中)。
人x
为问题i
选择每个答案的概率遵循“softmax决策规则”:j
。在这里,tau是Gamma分布决策中的噪声:tao→0,一个人选择最高值的答案; tao→∞,一个人在3个答案中随机选择。
这是我的模型文件exp(V[j,]/tau[i])/sum(exp(V[j,]/tau[i]))
:
model.txt
这是我的R脚本:
model{
# data
for(i in 1:n) # for each person
{
for (j in 1:m) # for each problem
{
# answer chosen
answer[i,j] ~ dcat(exp(V[j,]/tau[i])/sum(exp(V[j,]/tau[i])))
}
}
# priors
for (i in 1:n)
{
tau[i] ~ dgamma(0.001,0.001)
}
}
在R中运行脚本后,我收到以下错误消息:
编译模型图 解决未声明的变量 分配节点 删除模型
jags.model中的错误(model.file,data = data,inits = init.values, n.chains = n.chains,:RUNTIME ERROR:无效的向量参数 EXP
可能是什么问题?非常感谢你的帮助!
答案 0 :(得分:2)
您正在提供从V
到exp
的列向量。在JAGS中,反向链接函数只能给出标量值。基本上,要正确编写softmax回归代码,您需要遍历V
的每个元素。此外,V
必须是三维向量(人x主题x 3选项)。
model{
# data
for(i in 1:n) # for each person
{
for (j in 1:m) # for each problem
{
# answer chosen
answer[i,j] ~ dcat(mu[i,j,1:3])
mu[i,j,1:3] <- exp_v[i,j,1:3] / sum(exp_v[i,j,1:3])
for (k in 1:3) {
exp_v[i,j,k] <- exp(V[i,j,k]/tau[i])
}
}
# priors
for (i in 1:n)
{
tau[i] ~ dgamma(0.001,0.001)
}
}
与您的模型不同,V
的索引编号为i,j,k
,而不是我认为的j
和k
。您需要重新构建V
数组才能适应这种情况。但是,通过这种方式拟合模型,您可以将标量输入exp
,然后可以将其加总。