我正在尝试通过库在 R 中使用 OpenBUGS 进行分层贝叶斯分析,R2OpenBUGS
但在模型编译的早期阶段我一直遇到错误消息。我正在尝试将植物功能特征建模为植物大小和环境的函数。对于几种植物物种,我有关于性状、胸高直径 (dbh) 和海拔高度的数据。
我的模型和数据规范如下(不包括数据生成部分):
model = function() {
for(i in 1:22){
mu[i] ~ dnorm(0, 0.00001)
env[i] ~ dnorm(0, 0.00001)
s[i] ~ dnorm(0, 0.00001)
me[i] ~ dnorm(0, 0.00001)
for(j in 1:np[i]){
tr[i, j] ~ dnorm(eff[i, j], tau)
eff[i, j] <- mu[i] + s[i] * log(dbh[i, j]) + env[i] * pow(edev[i, j], 2) * (edev[i, j] / abs(edev[i, j]))
edev[i, j] <- e[i, j] - me[i]
}
}
tau ~ dnorm(0, 0.00001)
sig <- 1 / tau
}
library(R2OpenBUGS)
model.file = file.path(tempdir(), "model.txt")
write.model(model, model.file)
data.th = list(tr = tr.th, dbh = dbh, e = elevadj, np = np)
params = c("mu", "env", "s", "me", "sig")
inits = function() { list(mu = rep(1, 22), s = rep(1, 22), env = rep(1, 22), me = rep(1, 22), tau = 1) }
out.th = bugs(data.th, inits, params, model.file, n.iter = 10000, codaPkg = T)
待建模参数说明:
mu
: 物种的意思s
: 尺寸效果参数env
: 环境(高度)效应参数me
:每个物种的理论“最佳”高度sig
: 误差项,以方差表示
数据存储在矩阵tr.th
, dbh
,elevadj
中,每行代表每个植物物种。我的数据不平衡:每个物种包含不同数量的样本点。np
是一个向量,包含NA
每个植物物种的实际(非)样本点的数量。(我不知道是否需要实际数据来发现错误,如果需要,我会在此处发布示例)
每当我尝试运行此模型时,都会遇到一条错误消息,提示“未定义变量 dbh”,并且无法编译。这很奇怪,因为我之前已经成功运行过一个模型,它与我现在尝试运行的模型并没有太大不同。我怀疑这可能只是格式化或规范上的一个简单、愚蠢的错误,因为我现在才开始在 R 中使用 OpenBUGS 进行贝叶斯分析几个星期,并且可能遗漏了一些关键点。
我查看了网站,发现了以下问题,但我没有成功申请解决我的问题:
阅读手册也没有帮助:它提供了以下文本,这对我来说太模糊了,无法理解:
'undefined variable' - 模型中允许使用未定义的变量,只要它们不在关系的右侧使用
我正在使用 RStudio,版本 0.98.1091 和 OpenBUGS,版本 3.2.3 rev 1012。
如果有人可以帮助我查明问题的根源以及解决问题的方法,我将不胜感激。