我試圖建立(在調和勢布朗粒子)的朗之萬方程的特定結果的似然函數的模型:如何創建pymc3容器
這裏是我的模型pymc2似乎工作: https://github.com/hstrey/BayesianAnalysis/blob/master/Langevin%20simulation.ipynb
#define the model/function to be fitted.
def model(x):
t = pm.Uniform('t', 0.1, 20, value=2.0)
A = pm.Uniform('A', 0.1, 10, value=1.0)
@pm.deterministic(plot=False)
def S(t=t):
return 1-np.exp(-4*delta_t/t)
@pm.deterministic(plot=False)
def s(t=t):
return np.exp(-2*delta_t/t)
path = np.empty(N, dtype=object)
path[0]=pm.Normal('path_0',mu=0, tau=1/A, value=x[0], observed=True)
for i in range(1,N):
path[i] = pm.Normal('path_%i' % i,
mu=path[i-1]*s,
tau=1/A/S,
value=x[i],
observed=True)
return locals()
mcmc = pm.MCMC(model(x))
mcmc.sample(20000, 2000, 10)
的基本思想是每個點取決於鏈(Markov鏈)之前的點。順便說一句,x是一個數組數組,N是它的長度,delta_t是時間步長= 0.01。任何想法如何在pymc3中實現這個?我試過了:
# define the model/function for diffusion in a harmonic potential
DHP_model = pm.Model()
with DHP_model:
t = pm.Uniform('t', 0.1, 20)
A = pm.Uniform('A', 0.1, 10)
S=1-pm.exp(-4*delta_t/t)
s=pm.exp(-2*delta_t/t)
path = np.empty(N, dtype=object)
path[0]=pm.Normal('path_0',mu=0, tau=1/A, observed=x[0])
for i in range(1,N):
path[i] = pm.Normal('path_%i' % i,
mu=path[i-1]*s,
tau=1/A/S,
observed=x[i])
不幸的是,只要我嘗試運行它,模型就崩潰了。我在我的機器上嘗試了一些pymc3示例(教程),這是行得通的。
在此先感謝。我真的希望pymc3中的新採樣器能夠幫助我實現這個模型。我試圖將貝葉斯方法應用於單分子實驗。