*******************************************************************************************************
* CAPM: GMM estimation
* Code for estimating the parameters of the standard CAPM in STATA.
* Code written by Ricardo Buscariolli - STATA 13.1 - Cambridge Judge Business School - 2019.
* The data I use here are the same I use in the R code I wrote and provide in
* https://sites.google.com/view/ricardobuscariolli/codes
* I use data from R's gmm package.
*******************************************************************************************************
*******************************************************************************************************
*Get the databank
use "https://www.dropbox.com/s/u3zgwcf1kvcnfhk/Finance.dta?dl=1"
*Set up the data to look like the one I use in R
local stocks WMK UIS ORB MAT ABAX T EMR JCS VOXX ZOOM ///
ROG GGG PC GCO EBF F FNM NHP AA TDW rm
foreach st of local stocks {
replace `st'=`st'-rf
}
*
gen t=_n
drop if t>300
*******************************************************************************************************
*GMM Estimation
local avg_r (WMK - {m1}) (UIS - {m2}) /// Stock mean equations
(ORB- {m3}) (MAT - {m4}) (ABAX - {m5}) (T - {m6}) (EMR - {m7}) ///
(JCS - {m8}) (VOXX - {m9}) (ZOOM - {m10})
local denominator ({sigma = 1}^2)
local betaMKT ({b_WMK} - (((WMK - {m1})*(rm - {me}))/`denominator')) /// BETA MKT
({b_UIS} - (((UIS - {m2})*(rm - {me}))/`denominator')) ///
({b_ORB} - (((ORB - {m3})*(rm - {me}))/`denominator')) ///
({b_MAT} - (((MAT - {m4})*(rm - {me}))/`denominator')) ///
({b_ABAX} - (((ABAX - {m5})*(rm - {me}))/`denominator')) ///
({b_T} - (((T - {m6})*(rm - {me}))/`denominator')) ///
({b_EMR} - (((EMR - {m7})*(rm - {me}))/`denominator')) ///
({b_JCS} - (((JCS - {m8})*(rm - {me}))/`denominator')) ///
({b_VOXX} - (((VOXX - {m9})*(rm - {me}))/`denominator')) ///
({b_ZOOM} - (((ZOOM - {m10})*(rm - {me}))/`denominator'))
gmm `avg_r' /// MEAN RETURNS
(rm - {me}) /// MARKET MEAN
((rm-{me})^2 - {sigma = 1}^2) /// VARIANCE
`betaMKT', winit(i) onestep conv_maxiter(3000) technique(bfgs)
*******************************************************************************************************
*If you multiply the beta parameters by the denomiator it runs considerably faster
local avg_r (WMK - {m1}) (UIS - {m2}) /// Stock mean equations
(ORB- {m3}) (MAT - {m4}) (ABAX - {m5}) (T - {m6}) (EMR - {m7}) ///
(JCS - {m8}) (VOXX - {m9}) (ZOOM - {m10})
local denominator ({sigma = 1}^2)
local betaMKT ({b_WMK}*`denominator' - ((WMK - {m1})*(rm - {me}))) /// BETA MKT
({b_UIS}*`denominator' - ((UIS - {m2})*(rm - {me}))) ///
({b_ORB}*`denominator' - ((ORB - {m3})*(rm - {me}))) ///
({b_MAT}*`denominator' - ((MAT - {m4})*(rm - {me}))) ///
({b_ABAX}*`denominator' - ((ABAX - {m5})*(rm - {me}))) ///
({b_T}*`denominator' - ((T - {m6})*(rm - {me}))) ///
({b_EMR}*`denominator' - ((EMR - {m7})*(rm - {me}))) ///
({b_JCS}*`denominator' - ((JCS - {m8})*(rm - {me}))) ///
({b_VOXX}*`denominator' - ((VOXX - {m9})*(rm - {me}))) ///
({b_ZOOM}*`denominator' - ((ZOOM - {m10})*(rm - {me})))
gmm `avg_r' /// MEAN RETURNS
(rm - {me}) /// MARKET MEAN
((rm-{me})^2 - {sigma = 1}^2) /// VARIANCE
`betaMKT', winit(i) onestep conv_maxiter(3000) technique(bfgs)
*Note that results remain the same without "onestep"