cscript set seed 111 *set seed 123 ** Simulation parameters local N = 100 // Number of observations local R = 2000 // Number of simulation repetitions local Gamma = 2 // Level of heteroskedasticity ** True regression parameters local tb1 =-0.5 local tb2 = 0.5 local tb3 =-0.5 local tb4 =-1.0 local tb5 = 0.5 local tb6 = 1.0 program define mkdata syntax [anything], [n(integer 100) gamma(real 1)] quietly { clear set obs `n' ** Continuous covariates generate x1 = exp(rnormal()) generate x2 = exp(rnormal()) ** Discrete covariates generate a = int(rbeta(3,4)*3) generate b = int(rbeta(3,4)*3) ** Unobservable generate e = rnormal()*(1 + x1 + x2 + a + b)^`gamma' quietly summarize e quietly replace e = e/r(sd) ** Outcome generate y = .5*(1 - x1 + x2 - a + b) + e } end postfile sims rep vce b1 b2 b3 b4 b5 b6 /// se_b1 se_b2 se_b3 se_b4 se_b5 se_b6 /// r_b1 r_b2 r_b3 r_b4 r_b5 r_b6 /// bias1 bias2 bias3 bias4 bias5 bias6 /// hatmax hatmin N rc using gm_20_100_sim, /// replace forvalues i=1/`R' { mkdata, gamma(`Gamma') n(`N') // Default regresssion and hat matrix capture regress y x1 x2 i.a i.b local rc = _rc local rank = e(rank) quietly predict double hat if e(sample), hat if (!`rc' & `rank'==7) { local NS = e(N) local b1 = _b[x1] local b2 = _b[x2] local b3 = _b[1.a] local b4 = _b[2.a] local b5 = _b[1.b] local b6 = _b[2.b] local se1 = _se[x1] local se2 = _se[x2] local se3 = _se[1.a] local se4 = _se[2.a] local se5 = _se[1.b] local se6 = _se[2.b] qui test _b[x1] == `tb1' local b1r = (r(p)<.05) qui test _b[x2] == `tb2' local b2r = (r(p)<.05) qui test _b[1.a] == `tb3' local b3r = (r(p)<.05) qui test _b[2.a] == `tb4' local b4r = (r(p)<.05) qui test _b[1.b] == `tb5' local b5r = (r(p)<.05) qui test _b[2.b] == `tb6' local b6r = (r(p)<.05) local bs1 = `b1' - `tb1' local bs2 = `b2' - `tb2' local bs3 = `b3' - `tb3' local bs4 = `b4' - `tb4' local bs5 = `b5' - `tb5' local bs6 = `b6' - `tb6' summarize hat, meanonly local hmx = r(max) local hmn = r(mean) } else { local NS = . local b1 = . local b2 = . local b3 = . local b4 = . local b5 = . local b6 = . local se1 = . local se2 = . local se3 = . local se4 = . local se5 = . local se6 = . local b1r = . local b2r = . local b3r = . local b4r = . local b5r = . local b6r = . local bs1 = . local bs2 = . local bs3 = . local bs4 = . local bs5 = . local bs6 = . local hmx = . local hmn = . } post sims (`i') (1) (`b1') (`b2') (`b3') (`b4') (`b5') (`b6') /// (`se1') (`se2') (`se3') (`se4') (`se5') (`se6') /// (`b1r') (`b2r') (`b3r') (`b4r') (`b5r') (`b6r') /// (`bs1') (`bs2') (`bs3') (`bs4') (`bs5') (`bs6') /// (`hmx') (`hmn') (`NS') (`rc') capture regress y x1 x2 i.a i.b, vce(robust) local rc = _rc if (!`rc' & `rank'==7) { local NS = e(N) local b1 = _b[x1] local b2 = _b[x2] local b3 = _b[1.a] local b4 = _b[2.a] local b5 = _b[1.b] local b6 = _b[2.b] local se1 = _se[x1] local se2 = _se[x2] local se3 = _se[1.a] local se4 = _se[2.a] local se5 = _se[1.b] local se6 = _se[2.b] qui test _b[x1] == `tb1' local b1r = (r(p)<.05) qui test _b[x2] == `tb2' local b2r = (r(p)<.05) qui test _b[1.a] == `tb3' local b3r = (r(p)<.05) qui test _b[2.a] == `tb4' local b4r = (r(p)<.05) qui test _b[1.b] == `tb5' local b5r = (r(p)<.05) qui test _b[2.b] == `tb6' local b6r = (r(p)<.05) local bs1 = `b1' - `tb1' local bs2 = `b2' - `tb2' local bs3 = `b3' - `tb3' local bs4 = `b4' - `tb4' local bs5 = `b5' - `tb5' local bs6 = `b6' - `tb6' } else { local NS = . local b1 = . local b2 = . local b3 = . local b4 = . local b5 = . local b6 = . local se1 = . local se2 = . local se3 = . local se4 = . local se5 = . local se6 = . local b1r = . local b2r = . local b3r = . local b4r = . local b5r = . local b6r = . local bs1 = . local bs2 = . local bs3 = . local bs4 = . local bs5 = . local bs6 = . local hmx = . local hmn = . } post sims (`i') (2) (`b1') (`b2') (`b3') (`b4') (`b5') (`b6') /// (`se1') (`se2') (`se3') (`se4') (`se5') (`se6') /// (`b1r') (`b2r') (`b3r') (`b4r') (`b5r') (`b6r') /// (`bs1') (`bs2') (`bs3') (`bs4') (`bs5') (`bs6') /// (`hmx') (`hmn') (`NS') (`rc') capture regress y x1 x2 i.a i.b, vce(hc2) local rc = _rc if (!`rc' & `rank'==7) { local NS = e(N) local b1 = _b[x1] local b2 = _b[x2] local b3 = _b[1.a] local b4 = _b[2.a] local b5 = _b[1.b] local b6 = _b[2.b] local se1 = _se[x1] local se2 = _se[x2] local se3 = _se[1.a] local se4 = _se[2.a] local se5 = _se[1.b] local se6 = _se[2.b] qui test _b[x1] == `tb1' local b1r = (r(p)<.05) qui test _b[x2] == `tb2' local b2r = (r(p)<.05) qui test _b[1.a] == `tb3' local b3r = (r(p)<.05) qui test _b[2.a] == `tb4' local b4r = (r(p)<.05) qui test _b[1.b] == `tb5' local b5r = (r(p)<.05) qui test _b[2.b] == `tb6' local b6r = (r(p)<.05) local bs1 = `b1' - `tb1' local bs2 = `b2' - `tb2' local bs3 = `b3' - `tb3' local bs4 = `b4' - `tb4' local bs5 = `b5' - `tb5' local bs6 = `b6' - `tb6' } else { local NS = . local b1 = . local b2 = . local b3 = . local b4 = . local b5 = . local b6 = . local se1 = . local se2 = . local se3 = . local se4 = . local se5 = . local se6 = . local b1r = . local b2r = . local b3r = . local b4r = . local b5r = . local b6r = . local bs1 = . local bs2 = . local bs3 = . local bs4 = . local bs5 = . local bs6 = . local hmx = . local hmn = . } post sims (`i') (3) (`b1') (`b2') (`b3') (`b4') (`b5') (`b6') /// (`se1') (`se2') (`se3') (`se4') (`se5') (`se6') /// (`b1r') (`b2r') (`b3r') (`b4r') (`b5r') (`b6r') /// (`bs1') (`bs2') (`bs3') (`bs4') (`bs5') (`bs6') /// (`hmx') (`hmn') (`NS') (`rc') capture regress y x1 x2 i.a i.b, vce(hc3) local rc = _rc if (!`rc' & `rank'==7) { local NS = e(N) local b1 = _b[x1] local b2 = _b[x2] local b3 = _b[1.a] local b4 = _b[2.a] local b5 = _b[1.b] local b6 = _b[2.b] local se1 = _se[x1] local se2 = _se[x2] local se3 = _se[1.a] local se4 = _se[2.a] local se5 = _se[1.b] local se6 = _se[2.b] qui test _b[x1] == `tb1' local b1r = (r(p)<.05) qui test _b[x2] == `tb2' local b2r = (r(p)<.05) qui test _b[1.a] == `tb3' local b3r = (r(p)<.05) qui test _b[2.a] == `tb4' local b4r = (r(p)<.05) qui test _b[1.b] == `tb5' local b5r = (r(p)<.05) qui test _b[2.b] == `tb6' local b6r = (r(p)<.05) local bs1 = `b1' - `tb1' local bs2 = `b2' - `tb2' local bs3 = `b3' - `tb3' local bs4 = `b4' - `tb4' local bs5 = `b5' - `tb5' local bs6 = `b6' - `tb6' } else { local NS = . local b1 = . local b2 = . local b3 = . local b4 = . local b5 = . local b6 = . local se1 = . local se2 = . local se3 = . local se4 = . local se5 = . local se6 = . local b1r = . local b2r = . local b3r = . local b4r = . local b5r = . local b6r = . local bs1 = . local bs2 = . local bs3 = . local bs4 = . local bs5 = . local bs6 = . local hmx = . local hmn = . } post sims (`i') (4) (`b1') (`b2') (`b3') (`b4') (`b5') (`b6') /// (`se1') (`se2') (`se3') (`se4') (`se5') (`se6') /// (`b1r') (`b2r') (`b3r') (`b4r') (`b5r') (`b6r') /// (`bs1') (`bs2') (`bs3') (`bs4') (`bs5') (`bs6') /// (`hmx') (`hmn') (`NS') (`rc') local rc = _rc if (!`rc' & `rank'==7) { local NS = e(N) local b1 = _b[x1] local b2 = _b[x2] local b3 = _b[1.a] local b4 = _b[2.a] local b5 = _b[1.b] local b6 = _b[2.b] local se1 = _se[x1] local se2 = _se[x2] local se3 = _se[1.a] local se4 = _se[2.a] local se5 = _se[1.b] local se6 = _se[2.b] quietly boottest x1, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b1r = 1 - (`tb1'<=`up')*(`tb1'>=`lo') quietly boottest x2, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b2r = 1 - (`tb2'<=`up')*(`tb2'>=`lo') quietly boottest 1.a, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b3r = 1 - (`tb3'<=`up')*(`tb3'>=`lo') quietly boottest 2.a, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b4r = 1 - (`tb4'<=`up')*(`tb4'>=`lo') quietly boottest 1.b, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b5r = 1 - (`tb5'<=`up')*(`tb5'>=`lo') quietly boottest 2.b, nograph matrix CI = r(CI) local lo = CI[1,1] local up = CI[1,2] local b6r = 1 - (`tb6'<=`up')*(`tb6'>=`lo') local bs1 = `b1' - `tb1' local bs2 = `b2' - `tb2' local bs3 = `b3' - `tb3' local bs4 = `b4' - `tb4' local bs5 = `b5' - `tb5' local bs6 = `b6' - `tb6' } else { local NS = . local b1 = . local b2 = . local b3 = . local b4 = . local b5 = . local b6 = . local se1 = . local se2 = . local se3 = . local se4 = . local se5 = . local se6 = . local b1r = . local b2r = . local b3r = . local b4r = . local b5r = . local b6r = . local bs1 = . local bs2 = . local bs3 = . local bs4 = . local bs5 = . local bs6 = . local hmx = . local hmn = . } post sims (`i') (5) (`b1') (`b2') (`b3') (`b4') (`b5') (`b6') /// (`se1') (`se2') (`se3') (`se4') (`se5') (`se6') /// (`b1r') (`b2r') (`b3r') (`b4r') (`b5r') (`b6r') /// (`bs1') (`bs2') (`bs3') (`bs4') (`bs5') (`bs6') /// (`hmx') (`hmn') (`NS') (`rc') if (`i'/50) == int(`i'/50) { di ". `i'" } else { di _c "." } } postclose sims use gm_20_100_sim, clear label define estvce 1 "OLS" 2 "HC1" 3 "HC2" 4 "HC3" 5 "WILDBOOT" label values vce estvce generate gamma = 2 save gm_20_100_sim, replace