2013-03-14 5 views
7

मैं बहु अनाज विषय मॉडल मॉडलिंग के लिए एक Winbugs/Jags मॉडल (वास्तव में इस पत्र ->http://www.ryanmcd.com/papers/mg_lda.pdf) लिखने के लिए कोशिश कर रहा हूँअगर के आधार पर विभिन्न वितरण चुनना - WinBugs/Jags में बाकी हालत

यहाँ मैं चयन करने के लिए चाहते हैं एक विशेष मूल्य के आधार पर एक अलग वितरण। उदाहरण के लिए: मैं की तरह

`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

उत्तर

8

विनबग्स/जेएजीएस एक प्रक्रियात्मक भाषा नहीं है, इसलिए आप इस तरह के निर्माण का उपयोग नहीं कर सकते हैं। step फ़ंक्शन का उपयोग करें। मैनुअल से उद्धरण:

चरण (ई) ...... 1 यदि ई> = 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

+1

@jbaums बिल्कुल :-) यह समकक्ष इंगित करने के लिए सिर्फ एक गणितीय प्रतीक है, वास्तविक कंप्यूटर भाषा का प्रतीक नहीं :) – TMS

संबंधित मुद्दे