Working example of GARCH11:
a0 = 0.5
a1 = 0.3
b1 = 0.25
y = [rng.normal(loc=0,scale=a0)]
std = [a0]
for i in range(10000):
std.append(np.sqrt(a0 + a1 * np.square(y[-1]) + b1 * np.square(std[-1])))
y.append(rng.normal(loc=0,scale=std[-1]))
y_obs = np.array(y)
with pm.Model() as garch_model:
alpha0 = pm.HalfNormal('alpha0',1);
alpha1 = pm.Uniform('alpha1',0,1);
beta1 = pm.Uniform('beta1',0,(1-alpha1))
lik = pm.GARCH11("lik",alpha0,alpha1,beta1,0.5,observed=y_obs)
with garch_model:
trace = pm.sample()
