GAUSS program for Peter Yoo's September/October 1995 Review article: "Capacity Utilization and Prices Within Industries" All data sets loaded below were in the same directory as the program. If your data is not in the same directory you must give GAUSS the specific location of the data. NEW; _OLSRES = 1; __OUTPUT = 0; no_SIC = 26; mxARlag = 24; lag0 = 1; samelag = 1; SIClag = ZEROS(no_SIC,2); LOAD CU[108,26] = cu.txt; LOAD P[108,26] = p.txt; T = ROWS(P); LET STRING SICnames = "Total Industrial" "Manufacturing" "Mine" "Mine Metal" "Mine Coal" "Mine Oil" "Mine Stone" "Food" "Textile" "Apparel" "Lumber" "Furniture" "Paper" "Printing" "Chemical" "Petroleum" "Rubber" "Leather" "Stone" "Primary Metal" "Fabricated Metal" "Nonelectric Machine" "Electric Machine" "Transportation Equipment" "Instrument" "Miscellaneous"; OUTWIDTH 85; SCREEN OFF; OUTPUT FILE = caprev.out RESET; Pch = 100 * (P[2:T,.] ./ P[1:T-1,.] - 1); BIC = ZEROS(mxARlag,no_SIC); AIC = ZEROS(mxARlag,no_SIC); SIC = 1; DO WHILE SIC <= no_SIC; x = ONES(9,1) .*. EYE(12); x = x[2:T,.]; y = Pch[.,SIC]; __CON = 0; {vnam,m,b,stb,vc,stderr,sigma,cx,rsq,resid,dwstat} = OLS(0,y,x); __CON = 1; Pch[.,SIC] = resid + SUMC(b) / 12; {y,LPch} = lags(Pch[.,SIC],Pch[.,SIC],mxARlag); TL = ROWS(y); lag = 1; DO WHILE lag <= mxARlag; x = LPch[.,1:lag]; {vnam,m,b,stb,vc,stderr,sigma,cx,rsq,resid,dwstat} = OLS(0,y,x); AIC[lag,SIC] = TL * LN(resid'*resid) + 2 * lag; BIC[lag,SIC] = TL * LN(resid'*resid) + lag * LN(TL); lag = lag + 1; ENDO; SIC = SIC + 1; ENDO; PRINT "Information Criterion Selections for Industry Price Changes"; SIClag[.,1] = MININDC(AIC); SIClag[.,2] = MININDC(BIC); SIC = 1; DO WHILE SIC <= no_SIC; FORMAT /RDS 2,0; PRINT SIClag[SIC,.];; FORMAT /RDS 25,0; PRINT $SICnames[SIC]; SIC = SIC + 1; ENDO; PRINT; PRINT; IF samelag == 0; Plag = SIClag[.,2]; ELSE; Plag = MAXC(SIClag[.,2]) * ONES(no_SIC,1); ENDIF; BIC = ZEROS(mxARlag+lag0,no_SIC); AIC = ZEROS(mxARlag+lag0,no_SIC); SIC = 1; DO WHILE SIC <= no_SIC; x = ONES(9,1) .*. EYE(12); y = CU[.,SIC]; __CON = 0; {vnam,m,b,stb,vc,stderr,sigma,cx,rsq,resid,dwstat} = OLS(0,y,x); __CON = 1; CU[.,SIC] = resid + SUMC(b) / 12; {CU0,LCU} = lags(CU[2:T,SIC],CU[2:T,SIC],mxARlag); {y,LPch} = lags(Pch[.,SIC],Pch[.,SIC],mxARlag); TL = ROWS(y); lag = 1 - lag0; DO WHILE lag <= mxARlag; IF lag == 0; x = LPch[.,1:Plag[SIC]] ~ CU0; ELSE; x = LPch[.,1:Plag[SIC]] ~ CU0 ~ LCU[.,1:lag]; ENDIF; {vnam,m,b,stb,vc,stderr,sigma,cx,rsq,resid,dwstat} = OLS(0,y,x); AIC[lag+lag0,SIC] = TL * LN(resid'*resid) + 2 * lag; BIC[lag+lag0,SIC] = TL * LN(resid'*resid) + lag * LN(TL); lag = lag + 1; ENDO; SIC = SIC + 1; ENDO; PRINT "Information Criterion Selections for CU (w/ Lagged Price Changes)"; SIClag[.,1] = MININDC(AIC) - lag0; SIClag[.,2] = MININDC(BIC) - lag0; SIC = 1; DO WHILE SIC <= no_SIC; FORMAT /RDS 2,0; PRINT SIClag[SIC,.];; FORMAT /RDS 25,0; PRINT $SICnames[SIC]; SIC = SIC + 1; ENDO; IF samelag == 0; CUlag = SIClag[.,2]; ELSE; CUlag = MAXC(SIClag[.,2]) * ONES(no_SIC,1); ENDIF; mxARlag = MAXC((Plag~CUlag)'); lagNW = mxARlag; PRINT "\F"; SIC = 1; DO WHILE SIC <= no_SIC; {CU0,LCU} = lags(CU[2:T,SIC],CU[2:T,SIC],mxARlag[SIC]); {y,LPch} = lags(Pch[.,SIC],Pch[.,SIC],mxARlag[SIC]); Treg = ROWS(y); FORMAT /RDS 25,0; PRINT "Regression Output for " $SICnames[SIC] " w/o CU. Rsq";; x = ONES(Treg,1) ~ LPch[.,1:Plag[SIC]]; {b , Vb, VbNW, Rsq, SSE} = regress(x,y); b = b | SUMC(b[2:ROWS(b)]); SEb = SQRT(DIAG(Vb)); SEbNW = SQRT(DIAG(VbNW)); SEb = SEb | SQRT(ONES(1,Plag[SIC]) * Vb[2:ROWS(Vb),2:COLS(Vb)] * ONES(Plag[SIC],1)); SEbNW = SEbNW | SQRT(ONES(1,Plag[SIC]) * VbNW[2:ROWS(VbNW),2:COLS(VbNW)] * ONES(Plag[SIC],1)); tratio = b ./ SEb; tNWrat = b ./ SEbNW; SSEr = SSE; FORMAT /RDS 8,4; PRINT Rsq; results = b ~ SEb ~ tratio ~ SEbNW ~ tNWrat; PRINT results[1:Plag[SIC]+1,.]; PRINT; PRINT results[ROWS(results),.]; PRINT; PRINT; FORMAT /RDS 25,0; PRINT "Regression Output for " $SICnames[SIC] " w/ CU. Rsq";; IF CUlag[SIC] == 0; x = ONES(Treg,1) ~ LPch[.,1:Plag[SIC]] ~ CU0; ELSE; x = ONES(Treg,1) ~ LPch[.,1:Plag[SIC]] ~ CU0 ~ LCU[.,1:CUlag[SIC]]; ENDIF; {b , Vb, VbNW, Rsq, SSE} = regress(x,y); b = b[1:Plag[SIC]+1] | SUMC(b[2:Plag[SIC]+1]) | b[Plag[SIC]+2:ROWS(b)] | SUMC(b[Plag[SIC]+2:ROWS(b)]); SEb = SQRT(DIAG(Vb)); SEbNW = SQRT(DIAG(VbNW)); SEb = SEb[1:Plag[SIC]+1] | SQRT(ONES(1,Plag[SIC]) * Vb[2:Plag[SIC]+1,2:Plag[SIC]+1] * ONES(Plag[SIC],1)) | SEb[Plag[SIC]+2:ROWS(Vb)] | SQRT(ONES(1,CUlag[SIC]+1) * Vb[Plag[SIC]+2:ROWS(Vb),Plag[SIC]+2:COLS(Vb)] * ONES(CUlag[SIC]+1,1)); SEbNW = SEbNW[1:Plag[SIC]+1] | SQRT(ONES(1,Plag[SIC]) * VbNW[2:Plag[SIC]+1,2:Plag[SIC]+1] * ONES(Plag[SIC],1)) | SEbNW[Plag[SIC]+2:ROWS(VbNW)] | SQRT(ONES(1,CUlag[SIC]+1) * VbNW[Plag[SIC]+2:ROWS(VbNW),Plag[SIC]+2:COLS(VbNW)] * ONES(CUlag[SIC]+1,1)); tratio = b ./ SEb; tNWrat = b ./ SEbNW; SSEu = SSE; FORMAT /RDS 8,4; PRINT Rsq; results = b ~ SEb ~ tratio ~ SEbNW ~ tNWrat; PRINT results[1:Plag[SIC]+1,.]; PRINT; PRINT results[Plag[SIC]+2,.]; PRINT; PRINT results[Plag[SIC]+3:ROWS(results)-1,.]; PRINT; PRINT results[ROWS(results),.]; PRINT; PRINT; dfd = Treg - Plag[SIC] - CUlag[SIC] - lag0 - 1; dfn = CUlag[SIC] + 1; F = (dfd / dfn) * (SSEr - SSEu) / SSEu; FORMAT /RDN 2,0; PRINT "F stat (d.f. = " dfn ", " dfd ") ";; FORMAT /RDS 8,4; PRINT F; PRINT " p value " CDFFC(F,dfn,dfd); PRINT; PRINT "\F"; SIC = SIC + 1; ENDO; OUTPUT OFF; SCREEN ON; END; PROC (5) = regress(X,Y); local SSE, M, SST, u, Vb, um, VbNW, v, Xu; M = INV(X'*X); b = M * X' * Y; u = Y - X * b; SSE = SUMC(u^2); SST = SUMC((Y-MEANC(Y))^2); Vb = SSE * M / (Treg - COLS(X)); Xu = X .* u; VbNW = Xu' * Xu; v = 1; DO WHILE v <= lagNW[SIC]; VbNW = VbNW + (1 - v / (lagNW[SIC] + 1)) * (Xu[v+1:Treg,.]' * Xu[1:Treg-v,.] + Xu[1:Treg-v,.]' * Xu[v+1:Treg,.]); v = v + 1; ENDO; VbNW = M * VbNW * M; Rsq = 1 - SSE / SST; RETP(b,Vb,VbNW,Rsq,SSE); ENDP; PROC (2) = lags(ydata,xdata,nolags); LOCAL lag, laggedx; ydata= ydata[1+nolags:ROWS(ydata),.]; laggedx = ZEROS(ROWS(xdata)-nolags,nolags); lag = 1; DO WHILE lag <= nolags; laggedx[.,lag] = xdata[1+nolags-lag:ROWS(xdata)-lag]; lag = lag + 1; ENDO; RETP(ydata,laggedx); ENDP;