new; cls; #include F:\KangProc.s; @ load procedures @ /*===== Step 1: DGP =======*/ T = 500; b1 = 1; b2 = 2; b3 = 3; lam = 1; tru_b = b1|b2|b3; C_X = rndn(T,1)*0; @ common factor between X3 and W @ C_Z = rndn(T,1)*1; @ common factor between X3 and Z @ X2 = rndn(T,1); @ independent of W @ X3 = C_X + C_Z + rndn(T,1); W = C_X + rndn(T,1); @ missing variable @ emat = rndn(T,1); ymat = b1 + X2*b2 + X3*b3 + W*lam + emat; @ Generating IV @ Z1 = C_Z + rndn(T,1); @ IV @ Z2 = C_Z + rndn(T,1); @ IV @ Z = ones(T,1)~Z1~Z2~X2; /*====== Step 2: IV Estimation =======*/ X = ones(T,1)~X2~X3; @ X3 is missing @ Y = ymat; /* OSL */ printr = 0; {b_OLS,Yhat,resid,sig2hat,stde,t_val,p_val,F_val,R2,R2_,SC,AIC} = ols1(Y,X,printr); Varb_OLS = sig2hat*invpd(X'X); /* IV */ b_IV = inv(X'Z*inv(Z'Z)*Z'X)*X'Z*inv(Z'Z)*Z'Y; @ IV Estimator @ ehat = Y - X*b_IV; sig2hat = ehat'ehat/(T-3); Varb_IV = sig2hat*inv(X'Z*inv(Z'Z)*Z'X); /*====== Step 3: Hausman-Test ========*/ qhat = b_IV - b_OLS; Varq = Varb_IV - Varb_OLS; HT = qhat'inv(Varq)*qhat; "------------------------------------------"; " True b2 b2_OLS b2_IV"; tru_b~b_ols~b_IV; "------------------------------------------"; " Hausman test statistics " HT; " p value " cdfchic(HT,1); end;