* TESTING OVERIDENTIFYING RESTRICTIONS PROC OVERID SET NOECHO NODOECHO NOWARN NOOUTPUT * ************************************************************* * INPUTS REQUIRED: EXOG, RHSEXOG RHSENDOG ENDOG * ************************************************************* * FIRST DELETE ALL VARIABLES CREATED BY PROC * A shortcut is to delete all variables containing _ in the name with: DELETE / ALL_ * ************************************************************* * * To get the sample size, do 2SLS here. * ?2SLS [LHS] [RHSENDOG] [RHSEXOG] ([EXOG]) / COEF=DELTA_ & RESID=ERR_ * GEN1 N_=$N * PUT THE INPUT DATA IN THE RIGHT PLACE * Define X as all exogenous variables in system COPY ONE [EXOG] X_ / TROW=1,$N * Define X1 as right-hand-side exogenous variables COPY ONE [RHSEXOG] X1_ / TROW=1,$N * Define Y1 as all right-hand-side endogenous variables COPY [RHSENDOG] Y1_ / TROW=1,$N * Define Y as all endogenous variables in equation COPY [ENDOG] Y_ / TROW=1,$N * Define the Left hand side endogenous variable COPY [LHS] Y2_ / TROW=1,$N * ************************************************************* * Define Z as all right-hand-side variables, exogenous first MATRIX Z_= X1_ | Y1_ * Compute the M matrices for X and X1 GEN1 ROWS_=$ROWS GEN1 COLS_=$COLS MATRIX M_=IDEN(ROWS_)-X_*INV(X_'X_)*X_' MATRIX M1_=IDEN(ROWS_)-X1_*INV(X1_'X1_)*X1_' * Compute W and W1 MATRIX W_=Y_'M_*Y_ MATRIX W1_=Y_'M1_*Y_ * Get the eigenvalues from the W1 and INV(W) matrix computations MATRIX ROOTS_=EIGVAL(W1_*INV(W_)) * Get the minimum eigenvalue and use it for k ?STAT ROOTS_ / MIN=LAMBDA_ PRINT LAMBDA_ * * Calculate Bassman's lambda prime. * Determine number of endogenous variables MATRIX ENDO_=Y_'*Y1_ GEN1 J_=$ROWS GEN1 NINEN_=$COLS * Retrieve Gamma vector DIM GAMMA_ J_ GEN1 GAMMA_(1)=1 GEN1 J1_=J_-1 DO $=2,J_ GEN1 J1_=$-1 GEN1 GAMMA_($)=-DELTA_(J1_) ENDO MATRIX LAMBDAP_ = (GAMMA_'*W1_*GAMMA_)/(GAMMA_'*W_*GAMMA_) PRINT LAMBDAP_ * Calculate the likelihood ratio test statistic: GEN1 LR_=N_*(LAMBDA_ - 1) * Get degrees of freedom * Number of excluded exogenous variables MATRIX TEMP_=X_'*X1_ GEN1 DF_=$ROWS - $COLS - NINEN_ PRINT LR_ DF_ IF1 (DF_ .EQ. 0) STOP DISTRIB LR_ / TYPE=CHI, DF=DF_ PRINT $CDF * Now calculate the Hausman T R-square statistic * using the 2SLS residuals ?OLS ERR_ [EXOG] GEN1 TRSQ_ = $N * $R2 PRINT TRSQ_ DISTRIB TRSQ_ / TYPE=CHI DF=DF_ PRINT $CDF * Now calculate the F statistic GEN1 DF2_=N_-$ROWS GEN1 F_= DF2_/DF_*(LAMBDA_-1) PRINT F_ DISTRIB F_ / TYPE=F DF=$ROWS DF2=DF2_ PRINT $CDF * Calculate Bassman's F' statistic GEN1 FPR_= DF2_/DF_*(LAMBDAP_-1) PRINT FPR_ DISTRIB FPR_ / TYPE=F DF=DF_ DF2=DF2_ PRINT $CDF * Now delete all the PROC variables DELETE / ALL_ SET WARN ECHO OUTPUT DOECHO PROCEND