Я использую большое количество моделей JAGS в R, используя функцию jags
пакета R2jags (который использует пакет rjags для запуска JAGS).
Я получаю много предупреждений, напечатанных вконсоль:
value out of range in 'lgamma'
Печать этих предупреждений сильно влияет на вычислительное время.Как мне это подавить?
Предупреждения выводятся как выходные данные, а не как предупреждение R.
Я попробовал следующие вещи, которые не работают:
Завершение моего звонка в try(..., silent = TRUE)
, suppressWarnings
, invisible
или capture.output
.
Изменение вызова jags.model
в пределах jags
на jags.model(...,
quiet = TRUE)
.
Это явление также отмечено в другом месте , я просто хочу закрыть его, чтобы уменьшить вычислительную нагрузку от миллиардов ненужных отпечатков на консоль.
Есть предложения?
Вот длинный, но воспроизводимыйпример, основанный на пример той же проблемы на sourceforge .Извиняюсь за длину этого, но я не мог повторить это в любых меньших игрушечных моделях.Мне было наплевать на эту конкретную модель, но она повторяет проблему разумно просто:
Модель
cat('
model {
K <- 1.1
K.mvhypgeom <- exp( logfact(sum(n[])) - logfact(nMissing) - logfact( sum(n[]) - nMissing))
p ~ dunif(0,1)
for (t in 1:N) {
X.missing[t] ~ dpois( missRate )
}
nMissing ~ dsum(X.missing[1],X.missing[2],X.missing[3],X.missing[4],X.missing[5],X.missing[6],X.missing[7],X.missing[8],X.missing[9],X.missing[10])
for (t in 1:N) {
pX.missing[t] <- exp(logfact(n[t]) - logfact( X.missing[t]) - logfact( n[t] - X.missing[t]))
ones2[t] ~ dbern(pX.missing[t]/K.mvhypgeom)
}
for (t in 1:N) {
X[t] <- X.obs[t] + X.missing[t]
likX[t] <- dbin( X[t], p, n[t])
ones1[t] ~ dbern( likX[t] / K)
}
}
',
file = {example.model <- tempfile()},
sep = ''
)
Данные
simBinTS <- function(n, p , nMissing) {
X.full <- X <- rbinom(N, size = n, prob = p)
for (i in seq_len(nMissing)) {
idx <- sample(1:N, size = 1, prob = X)
X[idx] <- X[idx] - 1
}
return(data.frame(n = n, X = X, X.full = X.full))
}
N <- 10
p <- 0.3
set.seed(123)
n <- rpois(N, lambda = 30)
nMissing <- 10
missRate <- 1/10
ts <- simBinTS(p = p, n = n, nMissing = nMissing)
X.obs <- ts$X
n <- ts$n
X.full <- ts$X.full
ones1 <- rep(1,N)
ones2 <- rep(1,N)
jags.inits <- function(){
list(X.missing = X.full-X.obs)
}
Вызов
library("R2jags")
jags(data = list("X.obs", "n", "N", "nMissing", "ones1", "ones2", "missRate"),
inits = jags.inits,
parameters.to.save = "p",
model.file = example.model,
n.chains = 3,
n.iter = 1000,
n.burnin = 500,
n.thin = 1,
progress.bar = "none")
Выход (большое количество повторений обрезанного предупреждения - снова они печатаются какфункция вывода, а не как предупреждающие сообщения)
value out of range in 'lgamma'
value out of range in 'lgamma'
value out of range in 'lgamma'
value out of range in 'lgamma'
value out of range in 'lgamma'
value out of range in 'lgamma'
Inference for Bugs model at "D:\Users\fish\AppData\Local\Temp\RtmpWufTIC\file1614244456e1", fit using jags,
3 chains, each with 1000 iterations (first 500 discarded)
n.sims = 1500 iterations saved
mu.vect sd.vect 2.5% 25% 50% 75% 97.5% Rhat
p 0.331 0.027 0.280 0.312 0.330 0.348 0.388 1.006
deviance 812.379 2.761 808.165 810.345 811.941 814.103 818.729 1.007
n.eff
p 1300
deviance 670
For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).
DIC info (using the rule, pD = var(deviance)/2)
pD = 3.8 and DIC = 816.2
DIC is an estimate of expected predictive error (lower deviance is better).