Ich versuche, ein Modell für die Wahrscheinlichkeitsfunktion eines bestimmten Ergebnisses einer Langevin Gleichung (Brownsche Teilchen in einem harmonischen Potential) zu bauen:Wie ein Behälter in pymc3 erstellen
Hier mein Modell in pymc2 ist, das scheint zu arbeiten: 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)
die Grundidee ist, dass jeder Punkt in der Kette (Markow-Kette) auf dem vorherigen Punkt abhängt. Btw, x ist ein Array von Daten, N ist seine Länge, delta_t ist der Zeitschritt = 0,01. Irgendeine Idee, wie man das in pymc3 implementiert? Ich habe versucht:
# 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])
Leider stürzt das Modell, sobald ich versuche, es zu starten. Ich habe einige pymc3-Beispiele (Tutorial) auf meinem Rechner ausprobiert und das funktioniert.
Vielen Dank im Voraus. Ich hoffe wirklich, dass die neuen Sampler in pymc3 mir bei diesem Modell helfen werden. Ich versuche Bayessche Methoden auf Einzelmolekül-Experimente anzuwenden.