2017-08-22 97 views
0

這是我第一次使用JAGS,並且在建模數據時遇到了一些錯誤。JAGS錯誤:「解決未聲明的變量」和「無效的向量參數到exp」

這裏是我的數據的簡要說明: 總共有n人(例如2個)每個人都解決了m問題(例如6)。所有問題都有3個答案,每個答案都有一定的值V

這裏是the graphic model(一些變量名是不同的:IGy是相同的分別Vanswer,; x不包括在我的模型)。

i選擇問題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中運行該腳本後,我得到了以下錯誤消息:

Compiling model graph Resolving undeclared variables Allocating nodes Deleting model

Error in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, : RUNTIME ERROR: Invalid vector argument to exp

可能是什麼問題?非常感謝您的幫助!

回答

1

您正在提供從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,然後您可以然後求和。

+0

它的工作!謝謝您的回答! (我不知道JAGS以前不能指數向量!) – PsychGrad