/* NGARCH(p,q) */ new; cls; a0=0.001; a={0.2,0.1,0.1}; b={0.2,0.1,0.1,0.1}; g=2; k=0.1; n=1000; u=ngarch(a0,a,b,g,k,n); library pgraph; graphset; title("NGARCH(p,q)"); t=seqa(1,1,n); xy(t,u); proc ngarch(a0,a,b,g,k,n); local cutn,e,s2,q,p,u,hg,max,t; if a0<=0; errorlog "ERROR:Parameter a0 must be positive."; retp("."); endif; if not a>=0; errorlog "ERROR:Each element of a must be non negative."; retp("."); endif; if not b>=0; errorlog "ERROR:Each element of b must be non negative."; retp("."); endif; if g<=0; errorlog "ERROR:Power parameter g must be positive."; retp("."); endif; cutn=100; /* first some data to cut off */ e=rndn(cutn+n,1); s2=a0/(1-sumc(a)-sumc(b)); q=rows(a); p=rows(b); print/lz "q=" q;; print/lz "p=" p; u=zeros(cutn+n,1); hg=zeros(cutn+n,1); max=maxc(q|p); u[1:max]=sqrt(s2)*e[1:max]; hg[1:max]=s2*ones(max,1); t=max+1; do while t<=cutn+n; hg[t]=a0+rev(a)'(abs(u[t-q:t-1]-k)^g)+rev(b)'hg[t-p:t-1]; u[t]=hg[t]^(1/g)*e[t]; t=t+1; endo; u=u[cutn+1:cutn+n]; retp(u); endp;