r - 改进 JAGS MCMC 运行时
问题描述
我的情况如下:
我正在使用贝叶斯推理来模拟Outhwaite 等人开发的框架中的物种占有率。2018 年。我已经在我的 PC 上对该模型进行了相当广泛的测试,现在正在为 600 个物种在服务器或多台 PC 上运行它。酷吧?;-)
我有一个运行良好的工作 JAGS 模型,并为具有大量数据的物种提供合理的结果。但是,如果我打开迭代以获取数据较少的物种的结果,我的电脑会在“初始化模型”时卡住(24 小时内状态栏中的进度为 42%,现在在过去 18 小时左右停留在 44 )。显然,测试在我的服务器上运行也是如此。最后一件事更难判断我正在使用的bash-slurm-system没有显示进度条
这是我的主要问题:
- 如果在我的 PC 上 10000 次迭代需要 8 小时,那么 100000 次应该需要大约 80 小时,对吗?
- 如果它有更多的 RAM 和更多的 CPU 能力,为什么服务器运行得比我的 PC 还要慢?
如果这是错误的论坛,我深表歉意,但是对于 MCMC,总是有可能同时发生模型问题、技术问题等(双关语;-))。
关于如何改善模型运行时间的任何想法?
model{
### Priors ###
# State model priors
b[1] ~ dnorm(mu.b, 0.0001) # random walk prior on year effect
for(t in 2:nyear){
b[t] ~ dnorm(b[t-1], tau.b)
}
mu.b ~ dnorm(0, 0.01)
tau.b <- 1/(sd.b * sd.b)
sd.b ~ dt(0, 1, 1)T(0,) # half-Cauchy hyperpriors (replace half-uniform above)
for (i in 1:nsite) {
u[i] ~ dnorm(0, tau.u) # random site effect
}
tau.u <- 1/(sd.u * sd.u)
sd.u ~ dt(0, 1, 1)T(0,) # half-Cauchy hyperpriors (replace half-uniform above)
# Observation model priors
for (t in 1:nyear) {
a[t] ~ dnorm(mu.a, tau.a) # random year effect
}
mu.a ~ dnorm(0, 0.01)
tau.a <- 1 / (sd.a * sd.a)
sd.a ~ dt(0, 1, 1)T(0,) # half-Cauchy hyperpriors (replace half-uniform above)
c ~ dunif(-10, 10) # sampling effort effect
### Model ###
# State model
for (i in 1:nsite){
for (t in 1:nyear){
z[i,t] ~ dbern(psi[i,t])
logit(psi[i,t])<- b[t] + u[i]
}}
# Observation model
for(j in 1:nvisit) {
y[j] ~ dbern(Py[j]+0.00000001)
Py[j]<- z[Site[j],Year[j]] * p[j]
logit(p[j]) <- a[Year[j]] + c*logL[j]
}
### Derived parameters ###
# Finite sample occupancy - proportion of occupied sites
for (t in 1:nyear) {
psi.fs[t] <- sum(z[1:nsite,t])/nsite
}
#data#
#monitor#
}
解决方案
推荐阅读
- java - Android - Paytm 支付网关集成问题:com.paytm.pg.AppTest 类型已定义多次
- spring-boot - Spring Boot RestTemplate WebClient - 响应正文 JSON 空
- javascript - 如何使用 CSS 创建运行文本(选取框)
- java - Java 中的枚举 VS C# 中的枚举
- .net - 替换 Tizen TV 上的 .NET WebView
- php - 如何将n个员工出勤数据存储在另一个表中作为任何其他列名
- api - 如何将搜索结果与数据库集成
- python - 让 python 与多个 android 模拟器交互
- javascript - Ajax 填充的选择元素在重新调整 json 的 ajax 数据库插入调用上相互冲突
- javascript - 使用 VSCode 和 Pupeteer 在 REPL 循环中评估 promise