2013-03-14 28 views
7

我想寫建模多晶話題車型WinBUGS軟件/尖齒模型(正是這個文件 - >http://www.ryanmcd.com/papers/mg_lda.pdf選擇不同分佈的基礎上,如果 - 在WinBUGS軟件/ JAGS else條件

在這裏,我想選擇基於特定值的不同分配。 對於例如:我想這樣做

`if (X[i] > 0.5) 
{ 
Z[i] ~ dcat(theta-gl[D[i], 1:K-gl]) 
W[i] ~ dcat(phi-gl[z[i], 1:V]) 
} 
else 
{ 
Z[i] ~ dcat(theta-loc[D[i], 1:K-loc]) 
W[i] ~ dcat(phi-loc[z[i], 1:V]) 
} 
` 

這是可能在WinBUGS軟件/ JAGS做?

+1

我不要太相信我完全理解你的代碼。如果語句可能在WinBUGS中...... http://www.mrc-bsu.cam.ac.uk/bugs/faqs/contents.shtml#q15 – gjabel 2013-03-26 16:46:15

回答

8

Winbugs/JAGS不是過程語言,所以你不能使用這樣的構造。使用step函數。從手冊引用:

步驟(e)...... 1如果e> = 0;否則爲0

所以你需要一個伎倆改變條件:

X[i] > 0.5 <=>  
X[i] - 0.5 > 0 <=> 
!(X[i] - 0.5 <= 0) <=> 
!(-(X[i] - 0.5) >= 0) <=> 
!(step(-(X[i] - 0.5)) == 1) <=> 
step(-(X[i] - 0.5)) == 0 

,然後使用該索引招:

# then branch 
Z_branch[i, 1] ~ dcat(theta-gl[D[i], 1:K-gl]) 
W_branch[i, 1] ~ dcat(phi-gl[z[i], 1:V]) 

# else branch 
Z_branch[i, 2] ~ dcat(theta-loc[D[i], 1:K-loc]) 
W_branch[i, 2] ~ dcat(phi-loc[z[i], 1:V]) 

# decision here 
if_branch[i] <- 1 + step(-(X[i] - 0.5)) # 1 for "then" branch, 2 for "else" branch 
Z[i] ~ Z_branch[i, if_branch[i]] 
W[i] ~ W_branch[i, if_branch[i]] 
+0

這裏有什麼'<=>'?你只是表示他們是相同的? – jbaums 2015-02-01 07:23:35

+1

@jbaums確切的:-)這只是一個數學符號來表示等值,而不是實際計算機語言的象徵:) – TMS 2018-02-09 15:01:22