Сезонные переменные PYMC3

Я относительно новичок в PYMC3 и пытаюсь реализовать временной ряд байесовской структуры (BSTS) без регрессоров, например, модель подходит здесь в R. Модель выглядит следующим образом:

model

Я могу реализовать локальный линейный тренд с помощью GaussianRandomWalk следующим образом:

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

Однако я не понимаю, как кодировать сезонную переменную (тау) в PYMC3. Мне нужно свернуть собственный класс случайного блуждания или есть какой-то другой трюк?


person Paul    schedule 21.08.2017    source источник


Ответы (1)


Ты можешь использовать

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

В зависимости от данных также может быть быстрее использовать cumsum для других случайных блужданий, что часто позволяет избежать корреляции в апостериорных значениях, что облегчает жизнь сэмплеру.

person aseyboldt    schedule 22.08.2017
comment
Мне не совсем понятно, почему это дает правильную форму тау, можете ли вы уточнить? В любом случае это приводит к несоответствию размеров. Если я возьму S = 12, то тау — 12-мерный вектор, тогда как мю — 100-мерный. Это мешает мне сформировать y=pm.Normal('y',mu=mu+tau,sd=sigma_y,observed=y_train). Кроме того, я думаю, когда вы говорите трюк с cumsum для прогулок, вы имеете в виду u=pm.Normal('u',sd=sigma_delta) и delta=u+tt.concatenate([[0.],u.cumsum()[: -1]])? - person Paul; 22.08.2017
comment
Я хотел бы принять ваш ответ, чтобы вы могли получить свою репутацию, но я не могу без уточнения относительно тензорных форм и формирования y (см. предыдущий комментарий). - person Paul; 28.08.2017