/* Corrected Jarque Bera statistic with critical value by simulation */ new; cls; x=rndn(100,1); times=10000; /* more than 200000 recommended(by normal version of GAUSS) */ pp=0.05; call CJB2(x,times,pp); /* When meantimes=1, the same as above. As it is bigger(no limits), that will take more time. */ meantimes=10; call CJB2a(x,times,meantimes,pp); proc CJB2(x,times,pp); local n,xbar,s,z,sk,kur,stat,statm,i,cval; if ismiss(x); errorlog "Warning: missing data found."; x=packr(x); endif; n=rows(x); xbar=meanc(x); s=sqrt(sumc((x-xbar)^2)/n); z=(x-xbar)/s; sk=sumc((z)^3)/n; kur=sumc((z)^4)/n; stat=sk^2*(n+1)*(n+3)/(6*(n-2))+(n+1)^2*(n+3)*(n+5)*(kur-3*(n-1)/(n+1))^2/(24*n*(n-2)*(n-3)); /* simulation */ statm=zeros(times,1); i=1; do while i<=times; x=rndn(n,1); x=(x-meanc(x))/stdc(x); xbar=meanc(x); s=sqrt(sumc((x-xbar)^2)/n); z=(x-xbar)/s; sk=sumc((z)^3)/n; kur=sumc((z)^4)/n; statm[i]=sk^2*(n+1)*(n+3)/(6*(n-2))+(n+1)^2*(n+3)*(n+5)*(kur-3*(n-1)/(n+1))^2/(24*n*(n-2)*(n-3)); i=i+1; endo; statm=sortc(statm,1); cval=statm[round(times*(1-pp))]; /* results */ print "Corrected Jarque-Bera Test:"; print/rz "n =" n; print "stat =" stat; print "critical value=" cval;; print/rz " at" pp*100 "%"; retp(stat~cval); endp; /* Workable in Light version. (by using the means of each critical value many times) */ proc CJB2a(x,times,meantimes,pp); local n,xbar,s,z,sk,kur,stat,statm,i,j,cval; if ismiss(x); errorlog "Warning: missing data found."; x=packr(x); endif; n=rows(x); xbar=meanc(x); s=sqrt(sumc((x-xbar)^2)/n); z=(x-xbar)/s; sk=sumc((z)^3)/n; kur=sumc((z)^4)/n; stat=sk^2*(n+1)*(n+3)/(6*(n-2))+(n+1)^2*(n+3)*(n+5)*(kur-3*(n-1)/(n+1))^2/(24*n*(n-2)*(n-3)); /* simulation */ cval=0; j=1; do while j<=meantimes; statm=zeros(times,1); i=1; do while i<=times; x=rndn(n,1); x=(x-meanc(x))/stdc(x); xbar=meanc(x); s=sqrt(sumc((x-xbar)^2)/n); z=(x-xbar)/s; sk=sumc((z)^3)/n; kur=sumc((z)^4)/n; statm[i]=sk^2*(n+1)*(n+3)/(6*(n-2))+(n+1)^2*(n+3)*(n+5)*(kur-3*(n-1)/(n+1))^2/(24*n*(n-2)*(n-3)); i=i+1; endo; statm=sortc(statm,1); cval=cval+statm[round(times*(1-pp))]; j=j+1; endo; cval=cval/meantimes; /* results */ print "Corrected Jarque-Bera Test:"; print/rz "n =" n; print "stat =" stat; print "critical value=" cval;; print/rz " at" pp*100 "% (mean)"; retp(stat~cval); endp;