【问题标题】:jags bayesian linear regression, how can i set priors when the priors are dependent each other?jags 贝叶斯线性回归,当先验相互依赖时,如何设置先验?
【发布时间】:2020-12-23 14:54:50
【问题描述】:
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,3,4), 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。我该如何解决这个问题?

【问题讨论】:

    标签: r linear-regression bayesian mcmc jags


    【解决方案1】:

    您收到的错误消息是因为您没有提供一个右大括号来与model 语句的左大括号配对。 修复该错误后,您还会注意到您不小心使用了eta &lt;- 而不是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,3,4), n=5)
    
    jags_model = jags.model(textConnection(jags_code), data=jags_data)
    

    运行良好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2015-09-02
      • 2018-07-21
      • 2016-09-15
      相关资源
      最近更新 更多