Error in jags.model RUNTIME ERROR: Compilation error on line 5. Index out of range taking subset of a
Error in jags.model RUNTIME ERROR: Compilation error on line 5. Index out of range taking subset of a
我对 Jags 很陌生,我正在尝试计算模型 DIC 但返回了这样的错误:
jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, 错误:
运行时错误:
第 5 行编译错误。
索引超出范围获取 a 的子集
我的代码附在下面。
prior <- c(0.1, 0.15, 0.20, 0.25)
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a[j]*log(prior[j]/(1-prior[j])))/(1+exp(3+a[j]*log(prior[j]/(1-prior[j]))))
}
a~dgamma(1,1)
}
inits<-function(){
list('a'=0.001)
}
parameter<-c('a')
bugs.data<-list(y=y,n=n,prior=prior,ndose=ndose)
fit<-jags(data=bugs.data,inits=inits,parameter,bugs)
您已将 a
指定为给定之前提供的标量,但在上面您已将其索引为 1:ndose
。如果 a
确实是标量,则将代码更改为:
prior <- c(0.1, 0.15, 0.20, 0.25)
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a*log(prior[j]/(1-prior[j])))/(1+exp(3+a*log(prior[j]/(1-prior[j]))))
}
a~dgamma(1,1)
}
inits<-function(){
list('a'=0.001)
}
如果它是一个向量,那么你需要 a
才能有 ndose
个值。仅使用上面的代码,可以像这样完成:
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a[j]*log(prior[j]/(1-prior[j])))/(1+exp(3+a[j]*log(prior[j]/(1-prior[j]))))
}
for(j in 1:ndose){
a[j]~dgamma(1,1)
}}
inits<-function(){
list('a'=c(0.001, 1, 0.5, 0.7))
}
我对 Jags 很陌生,我正在尝试计算模型 DIC 但返回了这样的错误: jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, 错误: 运行时错误: 第 5 行编译错误。 索引超出范围获取 a 的子集 我的代码附在下面。
prior <- c(0.1, 0.15, 0.20, 0.25)
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a[j]*log(prior[j]/(1-prior[j])))/(1+exp(3+a[j]*log(prior[j]/(1-prior[j]))))
}
a~dgamma(1,1)
}
inits<-function(){
list('a'=0.001)
}
parameter<-c('a')
bugs.data<-list(y=y,n=n,prior=prior,ndose=ndose)
fit<-jags(data=bugs.data,inits=inits,parameter,bugs)
您已将 a
指定为给定之前提供的标量,但在上面您已将其索引为 1:ndose
。如果 a
确实是标量,则将代码更改为:
prior <- c(0.1, 0.15, 0.20, 0.25)
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a*log(prior[j]/(1-prior[j])))/(1+exp(3+a*log(prior[j]/(1-prior[j]))))
}
a~dgamma(1,1)
}
inits<-function(){
list('a'=0.001)
}
如果它是一个向量,那么你需要 a
才能有 ndose
个值。仅使用上面的代码,可以像这样完成:
target <- 0.2
y<-c(0,0,0,4)
n<-c(0,5,5,8)
ndose=length(n)
bugs<-function(){
for (j in 1: ndose){
y[j]~dbin(p[j],n[j])
p[j]<-exp(3+a[j]*log(prior[j]/(1-prior[j])))/(1+exp(3+a[j]*log(prior[j]/(1-prior[j]))))
}
for(j in 1:ndose){
a[j]~dgamma(1,1)
}}
inits<-function(){
list('a'=c(0.001, 1, 0.5, 0.7))
}