微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jags 贝叶斯线性回归,当先验相互依赖时如何设置先验?

如何解决jags 贝叶斯线性回归,当先验相互依赖时如何设置先验?

library(rjags)
jags_code = "model{
for (i in 1:n){
Y[i] ~ dnorm(mu[i],tau)
mu[i] <- beta0 + beta1*x[i]}

beta0 ~ dnorm(0,0.001)
beta1 ~ dnorm(0,0.001)
eta <- dgamma(0.1/2,0.1/2)
tau ~ dgamma(5/2,5*eta/2)"

jags_data = list(x = c(5,1,2,3,4),Y = c(6,11,12,n=5)

jags_model = jags.model(textConnection(jags_code),data=jags_data)
update(jags_model,10000)
samp <- coda.samples(jags_model,variable.names=c('beta0','beta1','eta'),n.iter=5000)

summary(samp)
plot(samp)

嗨,我正在尝试运行 Gibbs 采样器并使用 rjags 拟合线性回归。但是,上面的代码会产生这样的错误

Error in jags.model(textConnection(jags_code),data = jags_data) : 
Error parsing model file:
Syntax error on line 10 near ""

我猜这是由于 tau 在其参数中包含 eta。我该如何解决这个问题?

解决方法

您收到的错误消息是因为您没有提供右花括号与 model 语句的左花括号配对。 修复该错误后,您还会注意到您不小心使用了 eta <- 而不是 eta ~,这会导致错误

函数 dgamma 中的参数数量不正确

所以,完全固定的代码是

library(rjags)
jags_code = "model{
for (i in 1:n){
Y[i] ~ dnorm(mu[i],tau)
mu[i] <- beta0 + beta1*x[i]}

beta0 ~ dnorm(0,0.001)
beta1 ~ dnorm(0,0.001)
eta ~ dgamma(0.1/2,0.1/2)
tau ~ dgamma(5/2,5*eta/2)}"

jags_data = list(x = c(5,1,2,3,4),Y = c(6,11,12,n=5)

jags_model = jags.model(textConnection(jags_code),data=jags_data)

它会运行得很好

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。