0

確率変数 $X$ と関数 $f$ がある場合、次のように、確率密度関数を使用して新しい確率変数として $y=f(X)$ を定義できます。

$p(y)=(f^{-1})'(y)p(x)$. 詳しくはこちらをご覧ください

これで、次のコードで指数分布を使用してランダム変数アルファを定義しました。モデルに log(alpha) を新しい確率変数として追加したいと考えています。モデルにどのように実装すればよいですか?

私はすでに努力しましたが、それは間違っているようで、回答で指摘されている理由は、決定論的デコレーターではなく確率的デコレーターを使用したという事実です。しかし、後でこの変数に MCMC Metropolis を適用したいので、統計が必要です! もっと明確にするために、対数(アルファ)にガウス提案を適用したいと思います。したがって、Metropolis 関数に確率的入力を渡す必要があります。

だからこれは私のモデルです:

import numpy as np
import pymc
lambd=1;
__all__=['alpha']
alpha=pymc.Exponential('alpha', beta=lambd)

@pymc.stochastic(plot=False)
def logalpha(value=0,c=alpha):
    return np.log(c)
4

2 に答える 2

1

log alpha はアルファの決定論的関数であるため、 としてモデル化する必要があります@deterministic。あなた自身の問題を反映した良いおもちゃの例は、回帰の例です。

于 2013-10-17T13:58:24.477 に答える
0

@Max が既に述べたように、そのlogalpha値はによって一意に決定されるため、決定論的変数である必要がありますalpha。モデルがサンプリングされるたびに、logalphaそれに応じて の値が更新されます。例えば:

>>> import numpy as np
>>> import pymc
>>> lambd = 1
>>> 
>>> alpha = pymc.Exponential('alpha', beta=lambd)
>>> 
>>> @pymc.deterministic(plot=False)
... def logalpha(value=0, c=alpha):
...     return np.log(c)
... 
>>> M = pymc.Model([alpha, logalpha])
>>> for i in range(3):
...     M.draw_from_prior()
...     print (alpha.value, logalpha.value)
... 
(array(1.888410537018971), 0.63573548954043602)
(array(0.23180935966225977), -1.4618399707110767)
(array(0.3381518219555991), -1.0842603069656513)
于 2013-10-17T14:58:10.133 に答える