* * HANNAN.RPF * Hannan's Efficient (spectral-based GLS) estimator * From RATS User's Guide, Section 14.8. * cal(m) 1977:3 open data haversample.rat data(format=rats) 1977:3 2007:4 fcm30 ftbs3 * * Do OLS regression. Save the regression range (into N1 and N2) and save * the lag coefficients in a series * linreg fcm30 # constant ftbs3{0 to 12} compute n1=%regstart(),n2=%regend() set olslags 1 13 = %beta(t+1) * * Do the Hannan filter on the independent and dependent variables. * compute nords = 2*%freqsize(%nobs) freq 3 nords rtoc # %resids fcm30 ftbs3 # 1 2 3 * * Compute the transfer function of the whitening filter * fft 1 cmult 1 1 window 1 cset 1 = 1./%csqrt(%z(t,1)) * * To make the HE regression more comparable (in terms of such things as * sum of squared residuals), normalize the transfer function so it * represents a filter with a 1 at 0 lag. Because the IFT has a 1/N * divisor, we need to rescale to make the sum of the entries of the IFT * to be N. Note that this will have no effect on the lag coefficients, * since both the filtered dependent and explanatory variables are scaled * by the same factor. * sstats 1 nords %real(%z(t,1))>>sumtr cset 1 = %z(t,1)*nords/sumtr * dofor i = 2 3 fft i cmult i 1 ift i end dofor * * Send the filtered variables back to the time domain and run the GLS * regression. * ctor # 2 3 # lfilt sfilt * * Run the regression over the original range. (LFILT and SFILT can get * extended by the filtering process). * linreg(title="Hannan Efficient") lfilt n1 n2 # constant sfilt{0 to 12} set hannanlags 1 13 = %beta(t+1) * graph(number=0,header="Distributed Lag Coefficients",\$ key=below,klabels=||"OLS Estimates","Hannan GLS Estimates"||) 2 # olslags # hannanlags