JAGS错误:“解析未声明的变量”和“无效的向量参数到exp”

时间:2017-08-22 08:19:06

标签: r jags winbugs r2jags

这是我第一次使用JAGS,在建模数据时遇到了一些错误。

以下是我的数据的简要说明: 总共n个人(例如,2个)解决了m个问题(例如,6个)。所有问题都有3个答案,每个答案都有一定的值V

以下是the graphic model(某些变量名称不同:IGy分别与Vanswer相同; {{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

可能是什么问题?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您正在提供从Vexp的列向量。在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,而不是我认为的jk。您需要重新构建V数组才能适应这种情况。但是,通过这种方式拟合模型,您可以将标量输入exp,然后可以将其加总。