我正在使用jags建模来自贝叶斯框架的工程逆问题。 我想知道是否可以在jags模型中包含定义mu参数的函数。例如
# Define the model:
modelString = "
model {
for ( i in 1:Ntotal ) {
myData[i] ~ dnorm(mu[i] ,1/sigma^2 )
mu[i]=function(c,fi){...}
}
c ~ dnorm( 9 , 1/9 )
fi ~ dnorm( 24 , 1/4 )
}
当我包含该函数时,出现错误:解析模型文件时出错: 第6行“ {”
附近的语法错误有什么方法可以在模型中包含一个函数吗?
谢谢
答案 0 :(得分:0)
简短的回答是,由于BUGS不是一种编程语言,因此无法以所需的方式直接在BUGS / JAGS中定义新功能。您只能使用JAGS用户手册中列出的功能和发行版,或者只能通过加载外部JAGS模块(例如runjags或jags-wiener或(目前为少数)其他模块)来使用。
稍长一点的版本是,您可以通过编写自己的模块以在C ++中指定所需的功能/发行版,然后将其加载到JAGS中,来在JAGS中定义自己的功能和发行版。 JAGS官方文档目前尚不详细,但是有一个教程已发布:
Wabersich,D。和J. Vandekerckhove。 2014年。扩展JAGS:关于向JAGS添加自定义发行版的教程(带有扩散模型示例)。 Res。方法46:15–28。 doi:10.3758 / s13428-013-0369-3。
这显然需要熟悉C ++,但是如果您已经是C ++编码人员,那并不难。如果将JAGS扩展模块嵌入到R包中,则安装该模块要容易得多,就像runjags包一样(在/ src目录中查找)。如果您还不是C ++编码员,那么最好寻求帮助。
希望有帮助,
马特
——-
编辑:值得一提的是,在BUGS / JAGS中可能有一种方法可以做,只是要实现的(在JAGS模型内编写函数)不是可行的解决方案。如果您更详细地解释您的实际问题(可能是在新问题中),那么您可能会得到您尚未考虑的解决方案。