options crt; ? 6e10 in kopcke; freq q; smpl 56:1,81:4; ? ? Five investment models: ? 1. Accelerator ? 2. Cash Flow ? 3. Neoclassical ? 4. Tobin's q ? 5. Time series (autoregressive) ? set equip = 2; dot e s; set equip = equip-1; ? 1/0 flag for equipment (vs. structures) if equip; then; write(file='6e10.tab',format="(' Equipment:')"); else; write(file='6e10.tab',format="(' Structures:')"); smpl 52:1,86:4; ? data generation period cash = f/j.; ? for cash flow model pcy = y/c.; ? for neoclassical pcy1 = y(-1)/c.; ? for neoclassical x = (q-1)*k.lag; ? for Tobin's q smpl 56:1,81:4; ? estimation period -- *not* 56:1 to 86:4 ? ? Use the @SBIC value to choose lag lengths ? (initialize to a large number, then minimize) ? mform(nrow=5,ncol=2) laglen = 1.D+10; do m=1,12; ? loop over various lag lengths ? Don't bother looping over various PDL degrees + restrictions; ? it complicates things a lot and has been done in ? earlier exercises. const j 1; ? Accelerator ar1(silent) i. c y(4,m,none) k.lag; set @sbic = -@logl; ? since # of params doesn't vary checkmin; const j 2; ? Cash flow ar1(silent) i. c cash(4,m,none) k.lag; set @sbic = -@logl; checkmin; const j 3; ? Neoclassical -- Berndt eqn. (6.33), which is not Ex.9 ar1(silent) i. c pcy(4,m,none) pcy1(4,m,none) k.lag; set @sbic = -@logl; checkmin; const j 4; ? Tobin's q ar1(silent) i. c x(4,m,none) k.lag; set @sbic = -@logl; checkmin; const j 5; ? Autoregression set mm = -m; olsq(silent) i. c i.(-1)-i.(mm); checkmin; enddo; print laglen; write(file='6e10.tab',form=label) laglen; ? optimal lag lengths (a) ? ? Now that optimal models are chosen, measure their forecasting ? performance. ? title 'Optimal models -- forecasting performance'; mform(nrow=5,ncol=3) rmseis = 0; ? (a) RMSE in sample mform(nrow=5,ncol=3) rmsesf = 0; ? (b) RMSE static forecast mform(nrow=5,ncol=3) rmsedf = 0; ? (c) RMSE dynamic forecast const j 1; ? Accelerator getmin; ar1(silent) i. c y(4,m,none) k.lag; rmse; const j 2; ? Cash flow getmin; ar1(silent) i. c cash(4,m,none) k.lag; rmse; const j 3; ? Neoclassical getmin; ar1(silent) i. c pcy(4,m,none) pcy1(4,m,none) k.lag; rmse; const j 4; ? Tobin's q getmin; ar1(silent) i. c x(4,m,none) k.lag; rmse; const j 5; ? Autoregression getmin; set mm = -m; olsq(silent) i. c i.(-1)-i.(mm); rmse; mat drmse = rmsesf - rmseis; ? (b) -- increase in RMSE out of sample print rmseis rmsesf rmsedf drmse; ? (a) (b) (c) write(file='6e10.tab',form=label) rmseis rmsesf rmsedf drmse; ? %RMSE, %>1B, %>2B ? enddot; ? proc checkmin; ? check for min SBIC and save lag if @sbic < laglen(j); then; do; set laglen(j) = @sbic; ? column 1: sbic set j5 = j+5; set laglen(j5) = m; ? column 2: optimal lag length enddo; ? write summary to table, to make sure the minimum was found mmake v m j @sbic; write(file='6e10.tab',format='(f4.0,f3.0,f10.4)') v; endp; ? proc getmin; ? return previously saved optimal lag length for model j set j5 = j+5; set m = laglen(j5); ? column 2: optimal lag length endp; ? proc rmse; ? rmse over estimation period (a) rmset rmseis; ? rmse out of sample, static forecast (b) smpl 82:1 86:4; forcst(static) i.p; @res = i. - i.p; rmset rmsesf; ? rmse out of sample, dynamic forecast (c) forcst(dynam) i.p; @res = i. - i.p; rmset rmsedf; actfit i. i.p; ? for Theil's inequality coefficient, etc. smpl 56:1 81:4; ? restore smpl for next estimation endp; ? proc rmset rmses; local e %ssr e1b e2b j2 j3; e = @res/i.; mat %ssr = e'e; set rmses(j) = sqrt(%ssr/@nob); e1b = abs(@res) > 1000; ? e1b=1 if |res|> 1 billion e2b = abs(@res) > 2000; ? (residual is already in units of millions) msd(noprint) e1b e2b; ? @mean is % of residuals > 1B and > 2B set j2 = j+5; set j3=j+10; unmake @mean rmses(j2) rmses(j3); endp;