首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAGS分析简介

JAGS分析简介
EN

Stack Overflow用户
提问于 2015-10-01 13:52:39
回答 1查看 177关注 0票数 2

我是一名学习贝叶斯统计的学生,刚刚开始使用我的讲师编写的介绍脚本使用JAGS,我们(学生)只需输入数据和迭代次数。以下是添加了我的数据的脚本:

代码语言:javascript
复制
setwd("C:\\Users\\JohnSmith\\Downloads")

rawdata = read.table("bwt.txt",header=TRUE)
Birthweight = rawdata$Birthweight
Age = rawdata$Age

model = "model
{
  beta0 ~ dnorm(0, 1/1000^2)
  beta1 ~  dnorm(0, 1/1000^2)

  log_sigma ~ dunif(-10, 10)
  sigma <- exp(log_sigma)

 for(i in 1:N)
 {
   mu[i] <- beta0 + beta1 * Age[i]
   Birthweight[i] ~ dnorm(mu[i], 1/sigma^2) 
 } 
}
"

data = list(x=Birthweight, y=Age, N=24)

# Variables to monitor
variable_names = c('beta0','beta1')

# How many burn-in steps?
burn_in = 1000

# How many proper steps?
steps = 100000

# Thinning?
thin = 10

# Random number seed
seed = 2693795


    # NO NEED TO EDIT PAST HERE!!!
    # Just run it all and use the results list.

library('rjags')

# Write model out to file
fileConn=file("model.temp")
writeLines(model, fileConn)
close(fileConn)

if(all(is.na(data)))
{
    m = jags.model(file="model.temp", inits=list(.RNG.seed=seed,             .RNG.name="base::Mersenne-Twister"))
} else
{
m = jags.model(file="model.temp", data=data, inits=list(.RNG.seed=seed,     .RNG.name="base::Mersenne-Twister"))
}
update(m, burn_in)
draw = jags.samples(m, steps, thin=thin, variable.names = variable_names)
# Convert to a list
make_list <- function(draw)
{
    results = list()
    for(name in names(draw))
    {
        # Extract "chain 1"
        results[[name]] = as.array(draw[[name]][,,1])

        # Transpose 2D arrays
        if(length(dim(results[[name]])) == 2)
            results[[name]] = t(results[[name]])
    }
    return(results)
}
results = make_list(draw)

但是,当我运行下面的代码时,我得到了以下错误消息:

代码语言:javascript
复制
Error in jags.model(file = "model.temp", data = data, inits = list(.RNG.seed = seed,  : 
  RUNTIME ERROR:
Compilation error on line 11.
Unknown parameter Age

In addition: Warning messages:
1: In jags.model(file = "model.temp", data = data, inits = list(.RNG.seed =     seed,  :
  Unused variable "x" in data
2: In jags.model(file = "model.temp", data = data, inits = list(.RNG.seed = seed,  :
  Unused variable "y" in data

但就我所见,第11行是空白的,这让我困惑于错误来自何处。如果有人能给我一些解决这个问题的建议,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-10-01 17:07:12

数据列表(data)中元素的名称应该与模型中变量的名称相匹配。

您必须:

代码语言:javascript
复制
data = list(x=Birthweight, y=Age, N=24)

因此,JAGS在您的模型中寻找名为xy的变量。但是,在您的模型中,您具有:

代码语言:javascript
复制
mu[i] <- beta0 + beta1 * Age[i]
Birthweight[i] ~ dnorm(mu[i], 1/sigma^2) 

也就是说,您的变量名为AgeBirthweight

因此,您可以将列表更改为:

代码语言:javascript
复制
data <- list(Birthweight=Birthweight, Age=Age, N=24)

或者将您的模型更改为:

代码语言:javascript
复制
mu[i] <- beta0 + beta1 * y[i]
x[i] ~ dnorm(mu[i], 1/sigma^2)

如果您执行了readLines('model.temp') (或在文本编辑器中打开model.temp ),您将看到该文件的第11行引用了包含mu[i] <- beta0 + beta1 * Age[i]的行,这是由于引用了Age而遇到的第一个错误,该引用既没有提供数据,也没有提供先验信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32880302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档