2017-03-24 6 views
0

Ich bin neu bei JAGS und ich betreibe ein Modell in R über R2jags Paket. Der Modellcode auf einem Code basiert von Kéry & Schaub 2012 genommen ("Bayesian Population Analysis WinBUGS" verwendet wird), S. 399.JAGS - Funktion auf alle Parameterknoten anwenden

Chi-Quadrat-Diskrepanz Maß

model { 
.... 
for(g in 1:G) { 
    for (t in 1:T) { 
    ... 
    E[g,t] <- pow((y[g,t] - eval[g,t]),2)/eval[g,t] 
    ... 
    }#t 
}#g 

fit <- sum(E[,]) 

}#model 

wo g und t berechnet wird sind Ort und Zeit-Indizes und G und T sind allerdings dann

die Anzahl der Standorte und die Anzahl der Jahre

ich einen Fehler

Error in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, : 
RUNTIME ERROR: 
Compilation error on line 140. 
Cannot evaluate subset expression for fit 

Wird es durch unterschiedliche Syntax verursacht, die von JAGS relativ zu WinBUGS verwendet wird? Der Code ist derselbe, der in dem Buch verwendet wird, außer dass ich zwei Dimensionen anstelle von drei wie im Buchbeispiel habe.

Antwort

0

Um den letzten Teil Ihrer Frage zu beantworten, wird kein Fehler durch unterschiedliche Syntax in JAGS verursacht (obwohl die Fehlermeldung in BUGS anders aussehen könnte).

In der Tat kann ich nichts falsch mit dem Code-Schnipsel sehen, die Sie gebucht haben und das folgende reproduzierbare Beispiel zeigt, dass es zumindest funktioniert, wenn y und eval in Daten angegeben:

m <- 'model { 
for(g in 1:G) { 
    for (t in 1:T) { 
    E[g,t] <- pow((y[g,t] - eval[g,t]),2)/eval[g,t] 
    }#t 
}#g 

fit <- sum(E[,]) 

#data# G, T, y, eval 
#monitor# fit 

}#model 
' 

library('runjags') 

G=T <- 10 
y <- matrix(rnorm(100), nrow=G, ncol=T) 
eval <- matrix(rnorm(100), nrow=G, ncol=T) 

results <- run.jags(m) 

Have Sie haben überprüft, auf welche Zeile 140 sich bezieht? Entweder die Zeile 140 ist etwas, das Sie nicht gezeigt haben, oder Sie haben an einer anderen Stelle im Modell mit einer anderen Anzahl von Dimensionen entweder Fit oder E angegeben.

Wenn dies nicht der Fall ist und Sie immer noch einen Fehler erhalten, fügen Sie bitte ein minimales reproduzierbares Beispiel zu Ihrer Frage hinzu, die das Problem zeigt (vorzugsweise unter --- EDIT --- Zeile unter dem, was Sie bereits geschrieben haben) und wir können versuchen, damit zu helfen.

Matt

+0

Danke Matt, die Linie 140 ist die 'passen <- Summe (E [,])' im Code gezeigt, ich habe es nicht leid angegeben haben! Ich werde es dann mit einem möglichst reproduzierbaren Beispiel versuchen – Quechua