Я пытаюсь написать модель Winbugs / Jags для моделирования моделей с несколькими зернами (именно эта статья -> http: // www. ryanmcd.com/papers/mg_lda.pdf)
Здесь я хотел бы выбрать другое распределение на основе определенного значения. Например: я хотел бы сделать что-нибудь вроде
`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 / 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]]
<=>
? Вы просто указываете, что они эквивалентны?
Похожие вопросы
Связанные вопросы
Новые вопросы
if-statement
Оператор «if» - это структура управления потоком в большинстве языков программирования, которая ветвит поток выполнения в зависимости от двоичного условия, обычно оцениваемого во время выполнения. Если операторы также обычно называют условными. При использовании этого тега, пожалуйста, также включите соответствующий языковой тег, например, например. «Java», если ваш вопрос зависит от языка.