PYMC3 季节性变量

9

我相对较新于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中编码季节变量(tau)。我需要编写自定义的随机游走类吗?还是有其他技巧?

1个回答

0

您可以使用

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

根据数据的不同,对于其他随机游走,使用cumsum可能会更快,这通常避免了后验中的相关性,从而使采样器更容易处理。


我不太清楚这为什么会给出正确的tau形式,您能详细说明一下吗?无论如何,这会产生尺寸不匹配的问题。如果我取S = 12,则tau是一个12维向量,而mu是一个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]])? - Paul
1
我想接受你的回复,这样你就可以得到你的声誉,但是在关于张量形状和形成y方面我还需要进一步澄清(请参见上一条评论),否则我无法接受。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接