程序改了下,见多处#号的解释。(声明:我未花时间研究你程序是否达到经济目的,只看程序是否能运行,改后能运行。)
你的最重要的问题就是你的那句For后面的语句,r[i+1]<-...,这样是确定变量(不是随机变量)的赋值,你已用此句给r[i+1]都赋值了,在load data时r[...]又赋值,就重复赋值了。我是以为你的r[i+1]是随机变量,所以改成随机变量的“赋值”方式了。
水平有限,你试试。
model {
k~dnorm(0,1)
mur~dnorm(2.3,0.25)
gama~dnorm(1,0.25)
a~dgamma(2.5,0.025)
sigmar2<-1/a
kesai~dnorm(u,tau1)
u~dnorm(2,0.25)
tau1<-1/sigmaj2
b~dgamma(2.5,0.025)
sigmaj2<-1/b
# zt~dnorm(0,1) # deleted, because the changes made within the for loop below
J~dpois(lamda)
lamda~dnorm(0,1)I(0.001,) #in J~dpois(lamda), lamda must>0 so add I(0.001, ) to ensure that
for (i in 1:N-1) {
#r[i+1]<-r[i ]+k*(mur-r[i ])+sigmar2*pow(r,gama)*zt+J*kesai # deleted to change to the following 4 lines
rsTemp[i ]<- sigmar2*pow(r[i ],gama) # added
rTauTemp[i ]<- 1/rsTemp[i ]/rsTemp[i ] # added
rmuTemp[i ] <- k*(mur-r[i ])+J*kesai +r[i ] # added
r[i+1]~dnorm(rmuTemp[i ],rTauTemp[i ]) # added
}
}
data
list(N=10, r=c(2.4155,2.4116,2.4093,2.4101,2.4041,2.3994,2.3984,2.3954,2.3830,2.3400 )
)
inits
list(k=0.01,mur=2.3,a=4,gama=1,u=1.5,b=4,lamda=0.01) #cannot set the following as inits, so delete: sigmar2=0.25,sigmaj2=0.25,zt=0.01