2013-10-17 21 views
0

如果你有一個隨機變量$ X $和一個函數$ f $,你可以定義$ y = f(X)$作爲一個新的隨機變量,其概率密度函數如下:如何在PyMC中實現一個隨機變量的函數,MCMC Metropolis可以對其進行採樣?

$ p(y )=(F^{ - 1})(Y)p(X)$。 詳情請參閱here

現在我已經定義了一個隨機變量alpha,在下面的代碼中用指數分佈。我想添加到我的模型中,將日誌(alpha)作爲新的隨機變量。我應該如何在我的模型中實現它?

我已經付出了努力,但似乎它是錯誤的,並且在答案中指出的原因是我使用隨機修飾器而不是確定性修飾器。但是因爲後來我想在這個變量上應用MCMC Metropolis,我需要它是統計數據!爲了更清楚地說明,我想對日誌(alpha)應用高斯提議。所以我需要把一個隨機輸入交給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) 
+0

Logalpha是否應該是隨機變量'alpha'的'log'還是你打算它是一個自變量? – bogatron

+0

我希望它能夠代表隨機變量alpha的日誌,但是我希望能夠對它進行採樣。 – Cupitor

回答

1

日誌alpha是你的阿爾法確定性功能,所以你應該把它建模爲@deterministic。一個反映你自己問題的好玩具的例子是the regression example

+0

問題在於我確定它的時候。我無法從中抽樣。 – Cupitor

+0

即使對於確定性變量,PyMC也應該累加樣本。在你的例子中,'model.trace('logalpha')[:]'應該給你樣本。 – Max

+0

我編輯了我的問題。我需要的是能夠將日誌(alpha)應用於MCMC大都市而不是alpha! – Cupitor

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) 
+0

感謝您的回覆,但我希望能夠使用MCMC Metropolis以自定義提案分佈(本例中爲高斯)對自己進行日誌(alpha)示例 – Cupitor

+0

我不明白這是如何阻止您這樣做的。但你也可以創建你的變量爲pymc lognormal_like變量(http://pymc-devs.github.io/pymc/distributions.html#continuous-distributions)。 – bogatron

+0

確定性變量不能作爲use_step_method方法的參數傳遞。我認爲你不能從對數正態分佈的「分佈」中定義一個隨機「變量」。即使你可以做到這一點,我會定義不同的alpha隨機變量。 – Cupitor

相關問題