2017-05-18 2 views
1

私は初めてMCMCシミュレーションを実装しています。以前の変数の結果に基づいて定義された変数があります。私のベルヌーイ変数が0を返す場合たとえば、それは返す場合1.PyMC3変数は別の結果に依存

with pm.Model() as model: 
    x = pm.Bernoulli('x', .5) 
    if x == 1: 
     y = 1 
    elif x == 0: 
     y = 2 
    z = pm.Deterministic('z', y * 1000) 

私の問題は、これらのいずれかのステートメントが原因で入力されてしまいますということであるよりも、決定論的な変数に供給されます異なる値が存在しますxは整数ではなく、分布です。サンプリングされたxの値を取得する方法はありますか?それとも私はこの間違ったことを考えているのですか?

答えて

0

あなたは、あなたがswitch

with pm.Model() as model: 
    x = pm.Bernoulli('x', .5) 
    y = pm.math.switch(x, 1, 0) 
    z = pm.Deterministic('z', y * 1000) 

またはもう少し詳細な

with pm.Model() as model: 
    x = pm.Bernoulli('x', .5) 
    y = pm.math.switch(pm.math.eq(x, 1), 1, 0) 
    z = pm.Deterministic('z', y * 1000) 

switchは、trueを返した場合第二引数、そうでない場合は第三の最初の引数を評価しTheanoの機能権利使用する必要がありますされています1。

2つ以上の条件がある場合は、複数のswitchを使用することもできます。

with pm.Model() as model: 
    x = pm.DiscreteUniform('x', 0, 2) 
    y_ = pm.math.switch(pm.math.eq(x, 1), 1, 0) 
    y = pm.math.switch(pm.math.eq(x, 2), 2, y_) 
    z = pm.Deterministic('z', y * 1000) 
+0

ありがとうございます!これは完璧です。あなたは "if elif else"ステートメントでこれを実装する方法があることを認識していますか?むしろ "もしそうなら"? –

+0

喜んで助けてください。私はあなたのコメントに応じて私の答えを更新しました。 – aloctavodia

関連する問題