2015-10-09 5 views
1

Я запускаю модели JAGS через пакет R runjags. Я только что обновил JAGS 4.0.0 от JAGS 3.4 и заметил некоторое неожиданное поведение, которое, похоже, связано с обновлением.неиспользованная переменная (ы) предупреждение в runjags модель

Во-первых, когда я запускаю модель, теперь я получаю предупреждающее сообщение WARNING: Unused variable(s) in data table:, за которым следует список объектов данных, которые указаны в модели и представлены в виде данных. Это не влияет на результаты (но это очень озадачивает). Тем не менее, я заметил несколько раз, играя с этим, что для некоторых переменных задние части были практически идентичны перьям (что указывает на отсутствие обновления). Кажется, я не могу воссоздать ошибку обновления, но ниже приведен пример воспроизводимого кода, иллюстрирующий нечетное предупреждение. Пример кода на странице справки run.jags также дает такое же предупреждение.

Во-вторых, я думал, что проверить, если же сообщение появляется, если я использую R пакет R2jags вместо runjags, но R2jags не будет загружаться, потому что, по-видимому rjags (одна из зависимостей) не совместим с JAGS 4.0 (его поиск JAGS 3.X). Кроме того, в функции runjags run.jags аргумент method="rjags" больше не работает, но method="parallel" действительно работает.

Я использую runjags_2.0.1-4 и R 3.2.2.

Так что мои вопросы:

1) Является ли rjags действительно несовместима с зазубринами 4.0? Мотивация перехода на 4.0 заключалась в использовании векторов в качестве индексов (см. https://martynplummer.wordpress.com/2015/08/16/whats-new-in-jags-4-0-0-part-34-r-style-features/).

2) Что случилось с предупреждением неиспользуемой переменной (-ов), и я должен беспокоиться об этом?

Спасибо, Glenn

Код:

#--- GENERATE DATA ------------------------ 
rm(list=ls()) 
# Number of sites and observations per site 
N <- 200 
nobs <- 3 
# generate covariates and standardize (where appropriate) 
set.seed(123) 
forest <- rnorm(N) 
# relationship between occupancy and covariates 
b0 <- 0.5 
b.for <- 0.5 
psi <- plogis(b0 + b.for*forest) 
# draw occupancy for each site 
z <- rbinom(n=N, size=1,prob=psi) 
# specify detection probablility 
p <- 0.5 
pz <- p*z 
# generate the observations 
Y <- rbinom(n=N, size=nobs,prob=pz) 
#---- BUGS model ------------------------ 
model1 <- "model { 
for (i in 1:N){ 
    logit(eta[i]) <- b0 + b.for*forest[i] 
    z[i] ~ dbern(eta[i]) 
    pz[i] <- z[i]*p 
    y[i] ~ dbin(pz[i],nobs) 
} #i 
b0.0 ~ dunif(0,1) 
b0 <- log(b0.0/(1-b0.0)) 
b.for ~ dnorm(0,0.01) 
p ~ dunif(0,1) 
}" 
occ.data1 <-list(y=Y,N=N,nobs=nobs,forest=forest) 
inits1 <- function(){list(b0.0=runif(1),b.for=rnorm(1),p=runif(1),z=as.numeric(Y>0))} 
parameters1 <- c("b0","b.for","p") 
#---- RUN MODEL ------------------------ 
library(runjags) 
ni <- 2000 
nt <- 1 
nb <- 1000 
nc <- 3 
ad <- 100 
out <- run.jags(model=model1,data=occ.data1,monitor=parameters1,n.chains=nc,inits=inits1,burnin=nb, 
    sample=ni,adapt=ad,thin=nt,modules=c("glm","dic"),method="parallel") 
+0

rjags_4-3 не на CRAN пока нет, но можно с http://sourceforge.net/projects/mcmc-jags/files/rjags/4/. Пример '? Run.jags' (который использует' method = 'rjags'') отлично работает для меня (без ошибок/предупреждений) с R (64-разрядным) 3.2.2 в Windows, с JAGS 4.0, runjags 2.0.2-8 и rjags 4-3. – jbaums

+0

(FYI: ваш собственный код не был добавлен в сообщение) – jbaums

+0

@jbaums К сожалению, я добавил код примера. И спасибо, rjags теперь работает и для меня, но ТОЛЬКО, если я работаю из учетной записи администратора. В противном случае я получаю: 'Загрузка требуемого пространства имен: rjags Ошибка с ошибкой: '.onLoad failed in loadNamespace() для' rjags ', подробности: call: fun (libname, pkgname) ошибка: C: \ Program Files/x64 /bin/libjags-4.dll не найден ' Ошибка: пакет rjags не установлен (или не загружен) - пожалуйста, (повторно) установите этот пакет, чтобы использовать метод «rjags» для runjags' Файл, на который ссылается, существует в C: \ Program Files \ JAGS \ JAGS-4.0.0 \ x64 \ bin. –

ответ

1

Чтобы ответить на ваши вопросы:

1) rjags и зазубрин использовали связанные (не взаимозаменяемы) версии, а также системы CRAN все еще используете JAGS_3.4.0, так что версия rjags на CRAN соответствует. Это скоро будет обновлено, и тем временем вы можете получить правильную версию rjags со страницы sourceforge как примечания @jbaums.

2) Это полезное сообщение от JAGS/rjags, в котором говорится, что вы указали что-то как данные, которые модель не использует. Помните, что имена переменных чувствительны к регистру, то есть

library('runjags') 
model <- "model { 
    m ~ dunif(-1000,1000) 
    #data# M 
    #inits# m 
    #monitor# m 
}" 
M <- 0 
m <- list(-10, 10) 

results <- run.jags(model, method="interruptible", n.chains=2) 
results <- run.jags(model, method="rjags", n.chains=2) 

... дает предупреждение, так как M не соответствует m. Также обратите внимание, что предупреждение выглядит немного отличным от двух вызовов функций - в первом случае оно выходит наполовину вниз по выходу JAGS, а во втором оно появляется как предупреждение в R после завершения функции.

Что касается вопросов «я должен быть заинтересован» - да, если вы считаете, что эти переменные должны быть в вашей модели. Если вы не можете найти проблему, попробуйте опубликовать код, который вы используете, - он был отключен от вашего исходного сообщения.

Matt

+0

Большое спасибо. 'method =" rjags "' работает сейчас (иногда - см. комментарий выше). Я добавил код примера. Интересно, когда я использую 'method =" rjags "или' method = "rjparallel" 'Я не получаю ошибку неиспользуемых переменных (-ов), но я получаю ошибку с помощью' method = "parallel" или 'method = "прерываемые" '. Точно такой же код не вызывает ошибок с JAGS 3.4.0, независимо от метода. Итак, я подозреваю какую-то особенность моей установки (получение JAGS 4, rjags, runjags правильно установлено, с учетом неполных прав администратора), а не проблема в моем коде? –

+0

Спасибо за код - я могу воспроизвести предупреждающее сообщение. Оказывается, на самом деле это ошибка в JAGS 4 (ложное положительное предупреждение), поэтому его можно безопасно игнорировать в вашем случае! Это не отображается в JAGS 3 или с использованием интерфейса rjags (т. Е. Метода% в% c ('rjags', 'rjparallel')), который выполняет эти проверки несколько иначе. Я обсужу это с Мартином и посмотрю, можем ли мы его исправить для JAGS 4.0.2. –

+0

Обновление: я исправил проблему в JAGS, поэтому эти ложные положительные предупреждения должны исчезнуть в следующей версии (JAGS 4.0.2 - всякий раз, когда это будет). Если вы предпочитаете не ждать, вы можете скачать и установить исправленный релиз-4_patched исходный код: https://sourceforge.net/p/mcmc-jags/code-0/ci/release-4_patched/tree/ –

 Смежные вопросы

  • Нет связанных вопросов^_^