@ ------------------------------------------------------------ @
@ GAUSS code for reduced form estimation                       @
@ ------------------------------------------------------------ @

/* First: run stage 1 panel IID/ARCH/GARCH to put var and lambdat in memory */

@ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @

cls;
load macrodata[25,5]=macro.txt;

iv=1;
lag_ols=1;
lag_iv=3;

// Agg cons growth and real rate

rate=macrodata[1:25,4];
cgrow=macrodata[1:25,2];

// 1st lag income

lambdatlag=zeros(25,1);
j=2;do until j>25;
lambdatlag[j,1]=lambdat[j-1,1];
j=j+1;endo;

// Instrument lags (-2,-3)

lambdatlag2=zeros(25,1);
j=3;do until j>25;
lambdatlag2[j,1]=lambdat[j-2,1];
j=j+1;endo;

lambdatlag3=zeros(25,1);
j=4;do until j>25;
lambdatlag3[j,1]=lambdat[j-3,1];
j=j+1;endo;

varlag2=zeros(25,1);
j=3;do until j>25;
varlag2[j,1]=var[j-2,1];
j=j+1;endo;

varlag3=zeros(25,1);
j=4;do until j>25;
varlag3[j,1]=var[j-3,1];
j=j+1;endo;

ratelag2=zeros(25,1);
j=3;do until j>25;
ratelag2[j,1]=rate[j-2,1];
j=j+1;endo;

ratelag3=zeros(25,1);
j=4;do until j>25;
ratelag3[j,1]=rate[j-3,1];
j=j+1;endo;

cgrowlag2=zeros(25,1);
j=3;do until j>25;
cgrowlag2[j,1]=cgrow[j-2,1];
j=j+1;endo;

cgrowlag3=zeros(25,1);
j=4;do until j>25;
cgrowlag3[j,1]=cgrow[j-3,1];
j=j+1;endo;

// Specification OLS

if iv==0;
	
T_eff=25-lag_ols;

x=ones(T_eff,1)~var[(1+lag_ols):25,1]~lambdatlag[(1+lag_ols):25,1]~rate[(1+lag_ols):25,1];
y=cgrow[(1+lag_ols):25,1];

coeff_ols=inv(x'*x)*x'*y;

cls;
print "  ";
print "************************************ Estimation output ***************************************";
print "  ";
print " OLS estimates ";
print " ------------- ";
print "  ";
print coeff_ols;

endif;

// Specification IV

if iv==1;
	
T_eff=25-lag_iv;

z=ones(T_eff,1)~varlag2[(1+lag_iv):25,1]~varlag3[(1+lag_iv):25,1]~lambdatlag2[(1+lag_iv):25,1]~lambdatlag3[(1+lag_iv):25,1]
~ratelag2[(1+lag_iv):25,1]~ratelag3[(1+lag_iv):25,1]~cgrowlag2[(1+lag_iv):25,1]~cgrowlag3[(1+lag_iv):25,1];
x=ones(T_eff,1)~var[(1+lag_iv):25,1]~lambdatlag[(1+lag_iv):25,1]~rate[(1+lag_iv):25,1];
y=cgrow[(1+lag_iv):25,1];

coeff_iv=inv(x'*z*inv(z'*z)*z'*x)*x'*z*inv(z'*z)*z'*y;

cls;
print "  ";
print "************************************ Estimation output ***************************************";
print "  ";
print " IV estimates ";
print " ------------ ";
print "  ";
print coeff_iv;
	
endif;


