Как получить время выборки в rjags?

Я реализовал модель LDA с помощью rjags. И я успешно получил окончательные образцы с:

jags <- jags.model('../lda_jags.bug',
               data = data,
               n.chains = 1,
               n.adapt = 100)

update(jags, 2000)

samples <- jags.samples(jags,
         c('theta', 'phi', 'z'),
         1000)

Теперь я могу использовать samples$theta или samples$phi, чтобы получить результат theta и phi. Но как я могу узнать, сколько времени ушло на пробу? Спасибо!


person user5779223    schedule 25.04.2016    source источник
comment
Вы можете использовать system.time() или, для более подробных оценок, microbenchmark() из пакета microbenchmark.   -  person eipi10    schedule 25.04.2016


Ответы (1)


Как указано в @eipi10, вы можете использовать system.time() вокруг вызова update() для определения времени процесса в R. Или вы можете использовать пакет runjags, который печатает (общее) время, затраченное на обновление модели, включая все предыдущие вызовы расширить.jags:

library('runjags')
results <- run.jags('../lda_jags.bug', monitor = c('theta', 'phi', 'z'), 
           data = data, n.chains = 1, adapt = 100, burnin = 2000, sample = 1000)
results

# or:

jags <- jags.model('../lda_jags.bug',
               data = data,
               n.chains = 1,
               n.adapt = 0)
runjags <- as.runjags(jags, monitor = c('theta', 'phi', 'z'))
results <- extend.jags(runjags, adapt = 100, burnin = 2000, sample = 1000)
results
results <- extend.jags(runjags, sample = 1000)
results
person Matt Denwood    schedule 25.04.2016
comment
Спасибо за Ваш ответ. Но почему вы ставите еще одну строку results <- extend.jags(runjags, sample = 1000) после results <- extend.jags(runjags, adapt = 100, burnin = 2000, sample = 1000)? - person user5779223; 25.04.2016
comment
Просто чтобы продемонстрировать, что общее время, сообщаемое после второго вызова extend.jags, включает время, затраченное на первый вызов функции (это общее время, затраченное на обновление модели, а не только на этот единственный вызов функции). Очевидно, вам не нужно этого делать, если вы просто хотите получить исходные 1000 сэмплов. - person Matt Denwood; 25.04.2016