在Jags中模拟均值的函数

问题描述 投票:1回答:1

我正在使用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行附近的语法错误“{”

有没有办法在模型中包含一个函数?

谢谢

r jags
1个回答
0
投票

简短的回答是,没有办法直接在BUGS / JAGS中以您想要的方式定义新函数,因为BUGS不是一种编程语言。您只能使用JAGS用户手册中列出的功能和发行版,或者可以通过加载外部JAGS模块(如runjags或jags-wiener)或(当前少数)其他模块来使用。

稍微长一点的版本是您可以在JAGS中定义自己的函数和发行版,方法是编写自己的模块,在C ++中指定所需的函数/分布,然后将其加载到JAGS中。官方JAGS文档目前在细节方面很清楚,但有一个教程发布:

Wabersich,D。和J. Vandekerckhove。 2014.扩展JAGS:向JAGS添加自定义分布的教程(使用扩散模型示例).. Behav。 RES。方法46:15-28。 DOI:10.3758 / s13428-013-0369-3。

这显然需要熟悉C ++,但如果您已经是C ++编码器并不困难。如果将JAGS扩展模块嵌入到R包中,安装模块会更容易,就像runjags包那样(查看/ src目录)。如果您还不是C ++编码员,那么最好寻求帮助。

希望有所帮助,

马特

——-

编辑:值得一提的是,在BUGS / JAGS中可能有一种方法可以做你想要的,只是你想要实现的东西(在JAGS模型中编写一个函数)不是一个可行的解决方案。如果您更详细地解释您的实际问题(可能在一个新问题中),那么您可能会得到一个您没有考虑过的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.