* * GARCH example from pp 116-123 * calendar(m) 1926 open data ch03_sp500_m(26-91).dat data(format=free,org=columns) 1926:1 1991:12 sp500 * set retsq = sp500**2 @bjident(number=30,nozero,max=.15) sp500 @bjident(number=30,nozero,max=.35) retsq * boxjenk(constant,ma=||1,3||) sp500 boxjenk(constant,ar=3) sp500 * garch(regressors,p=1,q=1) / sp500 # constant sp500{1 2 3} garch(regressors,p=1,q=1) / sp500 # constant %mvgavge{1 3} garch(p=1,q=1,hseries=ht,resids=at) / sp500 set ahat = at/sqrt(ht) graph(header="Estimated Volatility") # ht graph(header="Standardized Residuals") # ahat * * Forecast 120 periods beyond the end of the data * set uu = at**2 compute vc=%beta(2),vb=%beta(4),va=%beta(3) frml hfrml ht = vc+vb*ht{1}+vc*uu{1} frml uufrml uu = ht group garchmod hfrml>>ht uufrml>>uu forecast(model=garchmod,from=1992:1,steps=120) * garch(p=1,q=1,hseries=ht,resids=at,dist=t,shape=5) / sp500 set ahat = at/sqrt(ht) set ahatsq = ahat**2 @RegCorrs(number=30) ahat @RegCorrs(number=30) ahatsq garch(p=1,q=1,hseries=ht,resids=at,dist=t) / sp500 garch(regressors,p=1,q=1) / sp500 # constant %mvgavge{1 2} * * This is the GARCH-M from page 123 * garch(regressors,p=1,q=1,condition) / sp500 # constant %garchv