/* The Fama-MacBeth two stage procedure */ clear use "ff_data.dta" snapshot save foreach var of varlist S* M* B* { //Transform actual returns into excess returns replace `var'=`var'-rf } // First Stage time series regression for each portfolio local obs 363 tempname betas postfile `betas' beta_c beta_rmrf beta_umd beta_hml beta_smb using "betas.dta", replace foreach y of varlist S* M* B* { regress `y' rmrf umd hml smb if month>=tm(1980m10) & month<=tm(2010m12) scalar beta_c=_b[_cons] scalar beta_rmrf=_b[rmrf] scalar beta_umd=_b[umd] scalar beta_hml=_b[hml] scalar beta_smb=_b[smb] post `betas' (beta_c) (beta_rmrf) (beta_umd) (beta_hml) (beta_smb) } postclose `betas' drop smb hml umd rf rm rmrf xpose, clear varname // Transpose data to cross sectional drop in 1 merge 1:1 _n using "betas.dta" //local obs=363 // Second stage cross-sectional regressions tempname lambdas postfile `lambdas' lambda_c lambda_rmrf lambda_umd lambda_hml lambda_smb rsqaured using "lambdas.dta", replace forvalues i=1(1)`obs' { regress v`i' beta_rmrf beta_umd beta_hml beta_smb scalar lambda_c=_b[_cons] scalar lambda_rmrf=_b[beta_rmrf] scalar lambda_umd=_b[beta_umd] scalar lambda_hml=_b[beta_hml] scalar lambda_smb=_b[beta_smb] scalar rsqaured=e(r2) post `lambdas' (lambda_c) (lambda_rmrf) (lambda_umd) (lambda_hml) (lambda_smb) (rsqaured) } postclose `lambdas' snapshot restore 1 // Calculate means and t-ratios from the lambda estimates of the second stage use "lambdas.dta", clear local obs=363 foreach var of varlist lambda* { quietly summarize `var' scalar `var'_mean=r(mean) scalar `var'_tratio=sqrt(`obs')*r(mean)/r(sd) } summarize rsqaured scalar rsqaured_mean=r(mean) display lambda_c_mean*100 lambda_c_tratio display lambda_rmrf_mean*100 lambda_rmrf_tratio display lambda_smb_mean*100 lambda_smb_tratio display lambda_hml_mean*100 lambda_hml_tratio display lambda_umd_mean*100 lambda_umd_tratio display rsqaured_mean