2017-08-21 4 views
2

Ich bin relativ neu in PYMC3 und ich versuche, eine Bayes-Struktur Time Series (BSTS) ohne Regressoren zu implementieren, beispielsweise das Modell here in R. Das Modell passt sich wie folgt:PYMC3 Saison Variablen

model

kann ich den lokalen linearen Trend mit einem GaussianRandomWalk wie folgt implementieren:

delta = pymc3.GaussianRandomWalk('delta',mu=0,sd=1,shape=99) 
mu = pymc3.GaussianRandomWalk('mu',mu=delta,sd=1,shape=100) 

, ich bin ratlos jedoch dafür, wie die saisonale Variable (tau) in PYMC3 zu kodieren. Muss ich einen benutzerdefinierten Random-Walk-Kurs rollen oder gibt es einen anderen Trick?

Antwort

0

können Sie

w = pm.Normal('w', sd=sigma_tau, shape=S) 
tau = w - tt.concatenate([[0.], w.cumsum()[:-1]]) 

zur Verwendung auf dem Daten Je könnte es auch schneller sein cumsum für die anderen Irrfahrten zu verwenden, das vermeidet oft Korrelationen im hinteren, die das Leben leichter für den Sampler macht.

+0

Es ist mir nicht wirklich klar, warum das die richtige Form von Tau geben würde, können Sie das ausarbeiten? Auf jeden Fall erzeugt dies eine Dimensionsabweichung. Wenn ich S = 12 nehme, dann ist tau ein 12-dimensionaler Vektor, während mu ein 100-dimensionaler ist. Dies verhindert, dass ich y = pm.Normal ('y', mu = mu + tau, sd = sigma_y, beobachtet = y_train) bilden kann. Ich schätze, wenn du Cumsum-Trick für die Spaziergänge sagst, meinst du u = pm.Normal ('u', sd = sigma_delta) und delta = u + tt.concatenate ([[0.], U.cumsum() [: -1]])? – Paul

+0

Ich möchte Ihre Antwort akzeptieren, so dass Sie Ihren Ruf bekommen können, aber ich kann nicht ohne Berücksichtigung der Tensor Formen und Form y (siehe vorherigen Kommentar). – Paul