/* ************************************************************************** */ /* HALL'S RANDOM-WALK HYPOTHESIS -- COMPARISON OF OLS, 2SLS AND GMM ESTIMATES */ /* ************************************************************************** */ cls; /* Load Data */ load path = c:\gauss8.0\classes\econ5360\data\; load data[229,5] = macro2.txt; /* Define Variables */ y = data[2:229,1]; c = data[2:229,5]; n = rows(c); /* Create Changes in Variables */ dc = c[2:n] - c[1:n-1]; dy = y[2:n] - y[1:n-1]; n = rows(dc); xmat = dy; k = cols(xmat); /* ************** */ /* OLS ESTIMATION */ /* ************** */ b = inv(xmat'*xmat)*(xmat'*dc); resids = dc - xmat*b; s2 = (resids'*resids)/(n - k); varb = s2*inv(xmat'*xmat); tols = b ./ diag(sqrt(varb)); print "OLS Estimates tstats"; print b~tols; print; /* *************** */ /* 2SLS ESTIMATION */ /* *************** */ /* Lagged Changes */ dc1 = dc[4:n-1]; dc2 = dc[3:n-2]; dc3 = dc[2:n-3]; dc4 = dc[1:n-4]; dc = dc[5:n]; dy = dy[5:n]; n = rows(dy); /* Estimation */ wmat = dc1~dc2~dc3~dc4; dyhat = wmat*inv(wmat'*wmat)*(wmat'*dy); zmat = dyhat; betahat = inv(zmat'*zmat)*(zmat'*dc); resids = dc - dy*betahat; sigma2hat = (1/n)*(resids'*resids); varbetahat = sigma2hat*inv(zmat'*zmat); t2sls = betahat ./ diag(sqrt(varbetahat)); print "2SLS Estimates tstats"; print betahat~t2sls; print; /* ************** */ /* GMM ESTIMATION */ /* ************** */ /* ************************************** */ /* Stage #1. Calculate Weighting Matrix W */ /* ************************************** */ m1 = dc1.*(dc - betahat*dy); m2 = dc2.*(dc - betahat*dy); m3 = dc3.*(dc - betahat*dy); m4 = dc4.*(dc - betahat*dy); m = m1~m2~m3~m4; W = inv((1/n)*(m'*m)); /* ******************************** */ /* Stage #2. Calculate GMM Estimate */ /* ******************************** */ /* Define Procedure for GMM Objective Function */ proc gmm(lam); local q,mbar,m1,m2,m3,m4,m,W; m1 = dc1.*(dc - lam*dy); m2 = dc2.*(dc - lam*dy); m3 = dc3.*(dc - lam*dy); m4 = dc4.*(dc - lam*dy); m = m1~m2~m3~m4; W = inv((1/n)*(m'*m)); mbar = meanc(m); q = mbar'*W*mbar; retp(q); endp; /* Optimization Using Constrained-Optimization Module */ library co; #include co.ext; let gmmnames = lam; _co_ParNames = gmmnames; _co_DirTol = 1e-5; _co_Algorithm = 3; {gmmlam,q,g,ret} = CoPrt(Co(&gmm,b)); /* Variance-Covariance Matrix */ m1 = dc1.*(dc - gmmlam*dy); m2 = dc2.*(dc - gmmlam*dy); m3 = dc3.*(dc - gmmlam*dy); m4 = dc4.*(dc - gmmlam*dy); m = m1~m2~m3~m4; W = inv((1/n)*(m'*m)); g1 = meanc(-dc1.*dy); g2 = meanc(-dc2.*dy); g3 = meanc(-dc3.*dy); g4 = meanc(-dc4.*dy); capgamma = g1~g2~g3~g4; gmmvar = (1/n)*inv(capgamma*W*capgamma'); tgmm = gmmlam ./ diag(sqrt(gmmvar)); print; print "GMM Estimates tstats"; print gmmlam~tgmm; print; /* Test of Overidentifying Restrictions */ Wald = n*q; print "Wald Statistic (df = 3)" Wald;