2

コードは次のとおりです。

require(BRugs)
require(R2WinBUGS)
model<-function(){
  for(i in 1:N){
  y[i] ~ dnorm(x[i], sigma.y)
  }
  x[1] ~ dnorm(theta[1], sigma.y)
  theta[1] <- 0
  for(j in 2:N){
    x[j] ~ dnorm(theta[j], sigma.x)
    theta[j] <- b*x[j-1] # this row wrong, 
# it would be right when I set theta[j] <- 1*x[j-1]
  }
  a ~ dunif(0, 1)
  b ~ dunif(-1, 1)
  sigma.y ~ dgamma(0.1, 0.1)
  sigma.x ~ dgamma(0.1, 0.1)
}
data <- list( N <- 100, y <- rnorm(100))
data=list(N=100,y=rnorm(100))

inits=function(){
  list(sigma.x = rgamma(1,0.1,0.1), sigma.y = rgamma(1, 0.1, 0.1), a = dnorm(1, 0, 1), b = dnorm(1, -1, 1))
}
parameters=c("a", "b", "x")

write.model(model, con = "model.bug")
modelCheck("model.bug")
# model is syntactically correct
ret.sim <- bugs(data, inits, parameters, "model.bug",
                n.chains = 1, n.iter = 1000,
                program= "winbugs",
                working.directory = NULL,
                debug = T)

理由はわかりませんが、 を に置き換えるtheta[j] <- b*x[j-1]とプログラムは正しくなりますtheta[j] <- 1*x[j-1]が、 を定義しb ~ dunif(-1, 1)ました。確かに、最終モデルを設定する必要がありますが、追加しようとtheta[j] <- a - b*x[j-1]すると間違っていることがわかります。誰でも問題がどこにあるかを見つけますか?ab

4

1 に答える 1

2

問題は、b (およびほとんどの場合 a) の事前確率にあります。あなたのデータはわかりませんが、おそらく現在の事前確率の範囲には a と b の真の値が含まれていません。連続分布を使用すると、次のようになります。

a ~ dnorm(0,1)
b ~ dnorm(0,1)

あなたの問題は解決されるかもしれませんか?

nb WinBUGS 用の AR(1) モデルを作成しようとしている場合は、tsbugsパッケージを確認することをお勧めします。

于 2013-04-18T08:23:54.827 に答える