2017-08-22 4 views
0

Dies ist das erste Mal, dass ich JAGS nutze, und ich habe bei der Modellierung meiner Daten einige Fehler bekommen.JAGS-Fehler: "Auflösen nicht deklarierter Variablen" und "Ungültiges Vektorargument zu exp"

Hier ist eine kurze Beschreibung meiner Daten: Insgesamt n Menschen (z. B. 2) jeweils gelöst m Probleme (z. B. 6). Alle Probleme haben 3 Antworten mit jeweils einem bestimmten Wert V.

Hier ist the graphic model (einige Variablennamen sind unterschiedlich: IG und y sind die gleichen wie V und answer sind; x ist nicht in meinem Modell enthalten). Die Wahrscheinlichkeit, dass die Person i jede Antwort für das Problem j auswählt, folgt der "softmax Entscheidungsregel": exp(V[j,]/tau[i])/sum(exp(V[j,]/tau[i])) Hier ist Tau das Geräusch in der Entscheidung mit einer Gamma-Verteilung: tao → 0, wählt eine Person die Antwort des höchsten Wertes; tao → ∞, wählt eine Person zufällig unter 3 Antworten.

Das ist meine Modelldatei 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) 
    } 
} 

Hier ist mein R-Skript:

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) 

Nachdem das Skript in R ausgeführt wird, ich die Fehlermeldung unten bekam:

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

Was könnte das Problem sein? Vielen Dank für deine Hilfe!

Antwort

1

Sie liefern einen Spaltenvektor von V bis exp. In JAGS können inverse Link-Funktionen nur skalare Werte erhalten. Um die Softmax-Regression richtig zu codieren, müssen Sie jedes Element von V durchlaufen. Zusätzlich muss V ein dreidimensionaler Vektor sein (Person x Subjekt x 3 Auswahlmöglichkeiten).

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) 
    } 
} 

Im Gegensatz zu Ihrem Modell wird V zu i,j,k indiziert statt dem, was ich davon ausgehen würde j und k sein. Sie müssten Ihr V Array restrukturieren, um dies zu passen. Wenn Sie das Modell auf diese Weise anpassen, können Sie einen Skalar in exp eingeben, den Sie anschließend summieren können.

+0

Es hat funktioniert! Vielen Dank für Ihre Antwort! (Ich wusste nicht, dass JAGS keine Vektoren potenzieren können!) – PsychGrad

Verwandte Themen