If statement 根据WinBugs/JAGS中的if-else条件选择不同的发行版

If statement 根据WinBugs/JAGS中的if-else条件选择不同的发行版,if-statement,model,distribution,winbugs,jags,If Statement,Model,Distribution,Winbugs,Jags,我正在尝试编写一个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模型,用于建模多粒度主题模型(正是本文->)

在这里,我想根据特定的值选择不同的分布。 例如:我想做像这样的事情

`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中实现吗?

Winbugs/JAGS不是一种过程语言,因此不能像那样使用构造。使用
步骤
功能。引自手册:

步骤(e)。。。。。。如果e>=0,则为1;否则为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
X[i]>0.5
X[i]-0.5>0
!(X[i]-0.5=0)
!(步骤(-(X[i]-0.5))==1)
阶跃(-(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]]
#然后分支
Z_分支[i,1]~dcat(θgl[D[i],1:K-gl])
W_分支[i,1]~dcat(phi-gl[z[i],1:V])
#埃尔斯分行
Z_分支[i,2]~dcat(θloc[D[i],1:K-loc])
W_分行[i,2]~dcat(phi-loc[z[i],1:V])
#这里的决定

如果我不太确定我是否完全理解你的代码。如果WinBUGS中有语句……这里是什么?你只是表示它们是等价的吗?@jbaums确切地说:-)这只是表示等价的数学符号,而不是实际计算机语言的符号:)