/*---------------------------------------------------------------------------- ac -- Program to display a correlogram. Written by Sean Becketti, August 1989. ----------------------------------------------------------------------------*/ program define ac version 2.1 quietly { if "%_*"=="" { di in bl "-> ac varname [if] [in], [nlags(#)]" exit } mac def _varlist "req ex max(1)" mac def _if "opt" mac def _in "opt" mac def _options "Nlags(int 20)" parse "%_*" if %_nlags<=0 { di in re "nlags must be positive" exit } mac def _nlags = min(%_nlags,_N-5) cap drop _lag cap drop _ac cap drop _acse cap drop _macse cap drop _xlag mac def _x "%_varlist" gen int _lag = _n lab var _lag "Lag" gen float _ac = . lab var _ac "Autocorrelations" gen float _acse = . lab var _acse "SE band" gen float _xlag = . corr %_x, cova %_if %_in mac def _C0 = (_result(1)-1)*_result(3) count if %_x~=. %_if %_in mac def _NN = _result(1) mac def _l = 0 while (%_l < %_nlags) { mac def _l = %_l + 1 replace _xlag = %_x[_n-%_l] corr %_x _xlag %_if %_in, cova mac def _N = _result(1) replace _ac = (_result(1)-1)*_result(4)/%_C0 in %_l replace _xlag = sum(_ac^2) in f/%_l replace _acse = /* */ cond(%_l>1,sqrt((1+2*_xlag[_n-1])/%_NN),sqrt(1/%_NN)) in %_l } gen float _macse = -_acse lab var _macse " " mac def _xlab : variable label %_x if "%_xlab"=="" { mac def _xlab "%_x" } gr _ac _acse _macse _lag, yline(0) border c(lll) s(o.i) pen(277) /* */ ylab(-1,-.5,0,.5,1) rlab(-1,-.5,0,.5,1) xlab /* */ title("Autocorrelations of %_xlab") saving(sts1) cap drop _lag _ac _acse _xlag _macse } end