Я использую большое количество моделей 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).