0

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

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

这是图形模型(一些变量名称不同:IG并且分别与和y相同;未包含在我的模型中)。Vanswerx

iPerson为问题选择每个答案的概率j遵循“softmax 决策规则”:exp(V[j,]/tau[i])/sum(exp(V[j,]/tau[i])). 这里,tau 是具有 Gamma 分布的决策噪声: tao → 0,一个人选择最高值的答案;tao → ∞,一个人在 3 个答案中随机选择。

这是我的模型文件model.txt

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 脚本:

library(R2jags)
m <- 6 # number of problems
n <- 2 # number of people
V <- matrix(c(0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)), nrow=m, ncol=3, byrow = T)
answer <- matrix(c(2,3,1,1,2,3,1,1,1,1,3,2), nrow=n, ncol=m, byrow = T) 

data <- list("m", "n", "V", "answer")
myinits <- list(list(tau = rep(1,n)))
parameters <- c("tau")

samples <- jags(data, inits=myinits, parameters,
                model.file ="model.txt", n.chains=1, n.iter=1000, 
                n.burnin=1, n.thin=1, DIC=T)

在 R 中运行脚本后,我收到以下错误消息:

编译模型图 解析未声明的变量 分配节点 删除模型

jags.model 中的错误(model.file,data = data,inits = init.values,n.chains = n.chains,:运行时错误:exp 的向量参数无效

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

4

1 回答 1

2

您正在提供从Vto的列向量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而不是我假设的jk. 您将需要重组您的V阵列以适应这一点。但是,以这种方式拟合模型允许您输入一个标量exp,然后您可以对其进行求和。

于 2017-08-22T13:39:14.790 回答