proc (0)=hesschk(dloc,iloc,cloc,q,datfile,t,savname,qsav,&eval); local del,ah,nh,ls,h,hll,dll,odll,ohll,ll,ii,i,j,f1,y,dt,dm,ct; local eval:proc; "HESSCHK.G: derivative checker for analytic hessian coded in EVAL By John Rust, Yale University April, 1998"; ""; format /lz,12,6; "Derivative check at parameter vector"; q'; ""; "Delta value for numerical derivatives";; del=1e-7; del; ""; "Reading "$+ftos(t,"lf",4,0)$+" observations from data file "$+datfile; ""; closeall; open f1=^datfile; dm=rows(q); nh=zeros(dm*(dm+1)/2,1); ah=nh; ls=1; " Hessian Check "; "# Analytic Numeric Difference"; start: hll=zeros(dm,dm); h=hll; dll=zeros(dm,1); ll=0; dt=readr(f1,t); {ll,dll,h,hll}= eval(dt,dloc,iloc,cloc,q,ll,dll,0,0,h,hll); odll=dll; ohll=hll; ct=1; i=1; do until i > dm; q[i]=q[i]+del; if (i > 1); q[i-1]=q[i-1]-del; endif; j=i; do until j > dm; y=seekr(f1,1); dt=readr(f1,t); hll=zeros(dm,dm); h=hll; dll=zeros(dm,1); {ll,dll,h,hll}= eval(dt,dloc,iloc,cloc,q,ll,dll,0,i,h,hll); nh[ct]=(dll[j]-odll[j])/del; ah[ct]=ohll[i,j]; ct~ah[ct]~nh[ct]~abs(ah[ct]-nh[ct]); ct=ct+1; j=j+1; endo; i=i+1; endo; "Maximum Absolute Difference"; maxc(abs(nh-ah)); ""; "Delta : ";; del; closeall; endp;