Перевод бинарной модели Winbugs в Rjags

Я работаю над учебником "Байесовские идеи и анализ данных", написанным Christensen et al.

В книге есть простое упражнение, которое включает в себя вырезание и вставку следующего кода для запуска в Winbugs:

model{ y ~ dbin(theta, n) # Model the data 
ytilde ~ dbin(theta, m) # Prediction of future binomial 
theta ~ dbeta(a, b) # The prior 
prob <- step(ytilde - 20) # Pred prob that ytilde >= 20 } 
list(n=100, m=100, y=10, a=1, b=1) # The data 
list(theta=0.5, ytilde=10) # Starting/initial values

Я пытаюсь перевести следующее в R2jags код и я столкнулся с некоторыми проблемами. Я думал, что могу честно написать свой R2Jags код таким образом:

model {
    #Likelihoods
    y ~ dbin(theta,n)
    yt ~ dbin(theta,m)
    #Priors
    theta ~ dbeta(a,b)
    prob <- step(yt - 20)
}

с кодом R:

library(R2jags)

n <- 100
m <- 100
y <- 10
a <- 1
b <- 1

jags.data <- list(n = n,
                  m = m,
                  y = y,
                  a = a,
                  b = b)

jags.init <- list(
                 list(theta = 0.5, yt = 10), #Chain 1 init
                 list(theta = 0.5, yt = 10), #Chain 2 init
                 list(theta = 0.5, yt = 10) #Chain 3 init
                 ) 

jags.param <- c("theta", "yt")

jags.fit <- jags.model(data = jags.data,
                     inits = jags.inits,
                     parameters.to.save = jags.param,
                     model.file = "hw21.bug",
                     n.chains = 3,
                     n.iter = 5000,
                     n.burnin = 100)

print(jags.fit)

Однако при вызове кода R возникает следующая ошибка:

Error in jags.model(data = jags.data, inits = jags.inits, parameters.to.save = jags.param,  : 
  unused arguments (parameters.to.save = jags.param, model.file = "hw21.bug", n.iter = 5000, n.burnin = 100)

Это потому, что мне не хватает необходимого цикла в моем R2Jags код модели?

2 ответа

Решение

Ошибка исходит из функции R jags.model (не из JAGS) - вы пытаетесь использовать аргументы parameters.to.save и т. Д. Для неправильной функции.

Если вы хотите сохранить модель как можно более похожей на WinBUGS, есть более простой способ, чем указание данных и начальных значений в R. Поместите следующее в текстовый файл с именем "model.txt" в вашем рабочем каталоге:

model{
  y ~ dbin(theta, n) # Model the data 
  ytilde ~ dbin(theta, m) # Prediction of future binomial 
  theta ~ dbeta(a, b) # The prior 
  prob <- step(ytilde - 20) # Pred prob that ytilde >= 20
} 

data{
  list(n=100, m=100, y=10, a=1, b=1) # The data 
}

inits{
  list(theta=0.5, ytilde=10) # Starting/initial values
}

И затем запустите это в R:

library('runjags')
results <- run.jags('model.txt', monitor='theta')
results
plot(results)

Для получения дополнительной информации об этом методе перевода моделей WinBUGS в JAGS см.: http://runjags.sourceforge.net/quickjags.html

Matt

Это старое сообщение в блоге содержит обширный пример преобразования ошибок в JAGS, доступ к которым осуществляется через пакет. rjags не R2jags, (Мне нравится пакет runjags даже лучше.) Я знаю, что мы должны представить здесь автономные ответы, не просто ссылки, но пост довольно длинный. Он проходит каждый логический шаг сценария, в том числе:

  • загрузка пакета
  • указание модели
  • сборка данных
  • инициализация цепочек
  • бегущие цепи
  • изучая результаты
Другие вопросы по тегам