2017-08-21 3 views
2

Je suis relativement nouveau pour PYMC3 et je suis en train de mettre en œuvre une structure bayésienne séries temporelles (BSTS) sans régresseurs, par exemple le modèle convient here dans R. Le modèle est le suivant:PYMC3 Variables saisonnières

model

je peux mettre en œuvre la tendance linéaire locale en utilisant un GaussianRandomWalk comme suit:

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

Cependant, je suis à une perte pour savoir comment coder la variable saisonnière (tau) dans PYMC3. Ai-je besoin de rouler une classe de marche aléatoire personnalisée ou y a-t-il une autre astuce?

Répondre

0

Vous pouvez utiliser

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

Selon les données, il pourrait aussi être plus rapide d'utiliser cumsum pour les autres promenades au hasard, qui évite souvent des corrélations dans la partie postérieure, ce qui rend la vie plus facile pour l'échantillonneur.

+0

Ce n'est pas vraiment clair pour moi pourquoi cela donnerait la forme correcte de tau, pouvez-vous élaborer? En tout cas, cela produit une discordance de dimension. Si je prends S = 12, alors tau est un vecteur à 12 dimensions alors que mu est un 100-dimensionnel. Cela m'empêche de former y = pm.Normal ('y', mu = mu + tau, sd = sigma_y, observé = y_train). Aussi, je suppose que quand vous dites truc cumsum pour les promenades, vous voulez dire u = pm.Normal ('u', sd = sigma_delta) et delta = u + tt.concatenate ([[0.], U.cumsum() [: -1]])? – Paul

+0

Je voudrais accepter votre réponse pour que vous puissiez obtenir votre réputation, mais je ne peux pas sans clairification concernant les formes tensorielles et la formation y (voir commentaire précédent). – Paul