2016-04-25 45 views
0

我已经用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$thetasamples$phi得到的thetaphi结果。但是我怎么知道需要多长时间进行抽样呢?谢谢!

+1

您可以使用'system.time()'或者更详细的评估函数'microbenchmark'包中的'microbenchmark()'。 – eipi10

回答

1

As @ eipi10声明你可以在update()调用周围使用system.time()来为R中的进程计时。或者,你可以使用runjags包来打印更新模型所用的(总)时间,包括之前所有的调用extend.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 
+0

感谢您的回答。但是为什么在'results < - extend.jags(runjags,adapt = 100,burnin = 2000,sample = 1000)'之后放置另一行'results < - extend.jags(runjags,sample = 1000)'? – user5779223

+0

只是为了证明在第二次调用extend.jags之后报告的总时间包括第一次函数调用所花费的时间(这是更新模型所花费的总时间,而不仅仅是单个函数调用)。显然,如果您只想要最初的1000个样本,则不需要那样做。 –

相关问题