Ошибки JAGS: "Разрешение необъявленных переменных" и "Недопустимый векторный аргумент в exp"

Я впервые использую JAGS, и при моделировании моих данных я столкнулся с некоторыми ошибками.

Вот краткое описание моих данных: в общей сложности n человек (например, 2) каждый решил m проблемы (например, 6). На все задачи есть 3 ответа, каждое из которых имеет определенную ценность V,

Вот графическая модель (некоторые имена переменных отличаются: IG а также y такие же как V а также answerсоответственно; x не входит в мою модель).

Вероятность того, что человек i выбирает каждый ответ для задачи j следует "правилу принятия решения softmax": exp(V[j,]/tau[i])/sum(exp(V[j,]/tau[i])), Здесь тау - шум при принятии решения с гамма-распределением: тао → 0, человек выбирает ответ с наибольшим значением; Тао → ∞, человек выбирает случайным образом среди 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,: RUNTIME ERROR: неверный векторный аргумент для exp

В чем может быть проблема? Большое спасибо за вашу помощь!

1 ответ

Вы предоставляете вектор столбца из V в exp, В JAGS функциям обратной ссылки могут быть заданы только скалярные значения. По сути, для правильного кодирования регрессии softmax вам нужно будет перебирать каждый элемент V, Дополнительно, V должен быть трехмерный вектор (человек х субъект х 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, который вы можете затем суммировать впоследствии.

Другие вопросы по тегам