2016-10-06 31 views
2

我在搞清楚一個相當艱難的時間,其中誤差應該在這個簡單的Rjags型號不一致:Rjags錯誤:節點與父母

dt= 
[1] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 2.304157e-06 1.014568e-05 
    [8] 1.798720e-05 2.582872e-05 3.367025e-05 4.151177e-05 4.935329e-05 5.719481e-05 6.503634e-05 
[15] 7.287786e-05 8.071938e-05 8.856090e-05 9.640242e-05 1.042439e-04 1.120855e-04 1.200225e-04 
[22] 1.274917e-04 1.332419e-04 1.426773e-04 1.682728e-04 2.018543e-04 2.302676e-04 2.810248e-04 
[29] 3.408895e-04 3.942806e-04 4.818033e-04 5.682188e-04 6.298504e-04 7.320266e-04 9.604787e-04 
[36] 1.315336e-03 1.695445e-03 1.945434e-03 2.047065e-03 2.192386e-03 2.404184e-03 2.629989e-03 
[43] 2.931693e-03 3.414607e-03 4.085636e-03 5.009995e-03 5.897174e-03 6.532098e-03 7.205807e-03 
[50] 8.125645e-03 9.097041e-03 9.857559e-03 1.021277e-02 1.026859e-02 1.053671e-02 1.125948e-02 
[57] 1.207536e-02 1.250217e-02 1.297049e-02 1.372405e-02 1.463063e-02 1.552144e-02 1.604347e-02 
[64] 1.628257e-02 1.701820e-02 1.843134e-02 2.045894e-02 2.294199e-02 2.517307e-02 2.666305e-02 
[71] 2.762321e-02 2.890740e-02 3.095278e-02 3.290344e-02 3.429784e-02 3.502680e-02 3.525143e-02 
[78] 3.534536e-02 3.508330e-02 3.431497e-02 3.302332e-02 3.136818e-02 2.979437e-02 2.850674e-02 
[85] 2.713331e-02 2.539821e-02 2.301579e-02 2.002319e-02 1.702893e-02 1.447840e-02 1.217091e-02 
[92] 1.006765e-02 8.119336e-03 6.326128e-03 4.835775e-03 3.611105e-03 2.514688e-03 1.618690e-03 
[99] 1.006864e-03 6.681004e-04 4.693963e-04 3.256632e-04 

data = list('dt') 

library(rjags);library(foreign);library(coda) 
cat('model{ 
for(k in 1:102){ dt[k] ~ dgamma(a, 0.5)} 
a=ax+ay 

X ~ dgamma(ax, 0.5) 
Y ~ dgamma(ay, 0.5) 
ax ~ dgamma(3, 1/10) 
ay ~ dgamma(3, 1/10) 
    }', 
file='model1.bug') 

inits1 = list('ax'=15, 'ay'=15)  
jags_mod = jags.model('model1.bug', data=data, inits=inits1, n.chains=1, n.adapt=2000)  

update(jags_mod, n.iter=2000) 
posts=coda.samples(model=jags_mod, variable.names=c('ax','ay','a', 'X', 'Y'), n.iter=1000000, thin=2000) 

主要思想應該是可變dt爲γ- ,兩個具有相同速率參數的Gamma隨機變量之和。 我已經確定不能有參數的負值,通過在兩個比例參數上分配伽瑪先驗,所以我不明白爲什麼Rjags在這裏抱怨。 我想推斷參數ax,ay(其次在a)。

感謝您提供的所有幫助! Best,Emanuele

+0

不知道哪個節點與父節點不一致,但'jags'中的賦值運算符是<-',而不是'='。 –

+0

對不起,不一致的信號節點是'dt [1]'。 – LZG

+0

伽馬分佈有時會遇到一些數字爲零的問題,您可能會遇到一些困難。嘗試在'dt'中添加至少一個小數字(例如0.001)並查看模型是否運行。當然,這不是100%的解決方法,但可以表明,在給定數據的情況下,您在前期選擇的選擇並不理想。 –

回答

4

伽瑪分佈嚴格爲正值,所以不能爲零(或負值)。因此,您的數據的前5個觀察結果與您的模型不一致,因此錯誤。

可能的解決方案是將此模型設置爲檢查,即質量爲零的混合模型,或者可能只是爲數據添加一個常數,但不知道數據代表什麼,不可能說哪個最好。