2013-04-18 46 views
1

代碼WinBUGS軟件是以下幾點:錯誤使用來自R

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] <- 1*x[j-1]取代theta[j] <- b*x[j-1],但我已經定義b ~ dunif(-1, 1)。事實上,我需要在最終模型中設置theta[j] <- a - b*x[j-1],並且當我嘗試將ab添加到最終模型中時,結果是錯誤的。任何人都可以找到問題所在?

回答

1

問題出在你的先驗b(最可能是a)。我不知道你的數據,但也許你現在的先輩的範圍不包括a和b的真實值。我認爲如果您使用連續分發:

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

您的問題可能會解決?

n.b.如果您嘗試爲WinBUGS創建AR(1)模型,則可能需要檢查tsbugs程序包。

+1

是的,模型通過'modelCheck'並得到結果,意思是'dunif(0,1)'生成的'a'的初始值不包含'a'的真值,所以我需要爲'a'選擇一個合適的位置,我明白了嗎?讓我看看'tsbugs',謝謝。 – PepsiCo 2013-04-18 09:30:08