Lorsque vous utilisez jags.parallel
, je reçois l'erreur suivante:jags.parallel - Erreur dans get (nom, Envir = Envir): premier argument invalide
> out <- jags.parallel(win.data, inits, params, "Poisson.OD.t.test.txt",
+ nc, ni, nb, nt);
Error in get(name, envir = envir) : invalid first argument
Le même appel en utilisant la fonction jags
exécute OK. J'ai seulement trouvé one thread on this topic, mais il y a seulement une suggestion spéculative qui ne s'applique pas et ne fonctionne pas ici.
Code Reproductibles, pris de Introduction to WinBUGS for ecologists, see chapter 14.1 (légèrement modifié):
set.seed(123)
### 14.1.2. Data generation
n.site <- 10
x <- gl(n = 2, k = n.site, labels = c("grassland", "arable"))
eps <- rnorm(2*n.site, mean = 0, sd = 0.5)# Normal random effect
lambda.OD <- exp(0.69 +(0.92*(as.numeric(x)-1) + eps))
lambda.Poisson <- exp(0.69 +(0.92*(as.numeric(x)-1))) # For comparison
C.OD <- rpois(n = 2*n.site, lambda = lambda.OD)
C.Poisson <- rpois(n = 2*n.site, lambda = lambda.Poisson)
### 14.1.4. Analysis using WinBUGS
# Define model
sink("Poisson.OD.t.test.txt")
cat("
model {
# Priors
alpha ~ dnorm(0,0.001)
beta ~ dnorm(0,0.001)
sigma ~ dunif(0, 10)
tau <- 1/(sigma * sigma)
maybe_overdisp <- mean(exp_eps[])
# Likelihood
for (i in 1:n) {
C.OD[i] ~ dpois(lambda[i])
log(lambda[i]) <- alpha + beta *x[i] #+ eps[i]
eps[i] ~ dnorm(0, tau)
exp_eps[i] <- exp(eps[i])
}
}
",fill=TRUE)
sink()
# Bundle data
win.data <- list(C.OD = C.OD, x = as.numeric(x)-1, n = length(x))
# Inits function
inits <- function(){ list(alpha=rlnorm(1), beta=rlnorm(1), sigma = rlnorm(1))}
# Parameters to estimate
params <- c("lambda","alpha", "beta", "sigma", "maybe_overdisp")
# MCMC settings
nc <- 3 # Number of chains
ni <- 3000 # Number of draws from posterior per chain
nb <- 1000 # Number of draws to discard as burn-in
nt <- 5 # Thinning rate
require(R2jags)
# THIS WORKS FINE
out <- R2jags::jags(win.data, inits, params, "Poisson.OD.t.test.txt",
nc, ni, nb, nt);
# THIS PRODUCES ERROR
out <- jags.parallel(win.data, inits, params, "Poisson.OD.t.test.txt",
nc, ni, nb, nt);
# THIS ALSO PRODUCES ERROR
out <- do.call(jags.parallel, list(win.data, inits, params, "Poisson.OD.t.test.txt",
nc, ni, nb, nt));
L'erreur se produit parce que le premier argument de 'get' doit être une chaîne de caractères nommant une fonction. Utilisez 'traceback' pour voir quelle fonction appelle' get' et produit l'erreur, puis 'debug' pour explorer les objets dans le corps de la fonction. Ou vous pouvez utiliser 'options (error = recover)' (et le désactiver via 'options (error = NULL)'). –
Merci @Joshua! Donc, cela conduit réellement à déboguer le paquet Jags, pas mon code, non? Si nous concluons que c'est un bug, alors peut-être que la meilleure stratégie est de rapporter aux développeurs de jags? – TMS
Pas certain. Je ne suis pas familier avec ces paquets et n'ai pas exécuté le code, donc ça pourrait toujours être une de vos fonctions (par exemple, 'inits' devrait être' 'inits '' dans l'appel 'jags.parallel'?). mais cela devrait être clair pour vous une fois que vous avez exécuté 'traceback'. –