我是一名学习贝叶斯统计的学生,刚刚开始使用我的讲师编写的介绍脚本使用JAGS,我们(学生)只需输入数据和迭代次数。以下是添加了我的数据的脚本:
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)但是,当我运行下面的代码时,我得到了以下错误消息:
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行是空白的,这让我困惑于错误来自何处。如果有人能给我一些解决这个问题的建议,我将不胜感激。
发布于 2015-10-01 17:07:12
数据列表(data)中元素的名称应该与模型中变量的名称相匹配。
您必须:
data = list(x=Birthweight, y=Age, N=24)因此,JAGS在您的模型中寻找名为x和y的变量。但是,在您的模型中,您具有:
mu[i] <- beta0 + beta1 * Age[i]
Birthweight[i] ~ dnorm(mu[i], 1/sigma^2) 也就是说,您的变量名为Age和Birthweight。
因此,您可以将列表更改为:
data <- list(Birthweight=Birthweight, Age=Age, N=24)或者将您的模型更改为:
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而遇到的第一个错误,该引用既没有提供数据,也没有提供先验信息。
https://stackoverflow.com/questions/32880302
复制相似问题