table1.do open
file:script:do
| # | content log log |
|---|---|
| 1 [+] | #delimit |
| 2 [+] | cap log close |
| 3 [+] | log using table1.log , |
| 5 [+] | cap log close t1out |
| 6 [+] | qui log using table1_out.csv , |
| 7 [+] | qui log off t1out |
| 9 [+] | clear |
| 10 [+] | set more off |
| 12 [+] | do set_directory_macros |
| 14 [+] | cap prog drop runme |
| 15 [+] | prog def runme |
/* generate state policy variable */ |
|
| 19 [+] | use statefip using "${madedat}/CPS_2012_micro_small" , |
| 20 [+] | contract statefip |
| 21 [+] | set seed 10101 |
| 22 [+] | generate sort_order = uniform() |
| 23 [+] | sort sort_order |
| 24 [+] | gen policy = _n <= 25 |
| 25 [+] | sort statefip |
| 26 [+] | drop sort_order _freq |
| 27 [+] | *list ; |
| 29 [+] | tempfile statelist |
| 30 [+] | qui save `statelist' |
/* load up the micro data set, and merge on the fake policy variable */ *use "${madedat}/CPS_2012_micro_small" , replace ; *use "${madedat}/CPS_2012_micro_medium" , replace ; |
|
| 35 [+] | use "${madedat}/CPS_2012_micro" , |
| 37 [+] | sort statefip |
| 38 [+] | merge m:1 statefip using `statelist' |
| 39 [+] | tab _merge |
| 40 [+] | drop _merge |
| 42 [+] | /***************** ESTIMATE THE MODELS ****************/ |
/*column 1 */ |
|
| 45 [+] | reg lnwage policy age age2 yrseduc |
| 46 [+] | local b_ols = _b[policy] |
| 47 [+] | local se_ols_default = _se[policy] |
| 48 [+] | local N_ols = e(N) |
| 49 [+] | predict tab1_resid , |
| 51 [+] | reg lnwage policy age age2 yrseduc , |
| 52 [+] | estimates store ols_white |
| 53 [+] | local se_ols_robust = _se[policy] |
| 55 [+] | reg lnwage policy age age2 yrseduc , |
| 56 [+] | local se_ols_cluster = _se[policy] |
| 57 [+] | local G_ols = e(N_clust) |
| 59 [+] | reg lnwage policy age age2 yrseduc , |
| 60 [+] | local se_ols_bootstrap = _se[policy] |
/* what is the range of cluster sizes? */ |
|
| 65 [+] | preserve |
| 66 [+] | gen byte one = 1 |
| 67 [+] | collapse (sum) clusize = one , |
| 68 [+] | summ clusize |
| 69 [+] | local clusize_min = r(min) |
| 70 [+] | local clusize_max = r(max) |
| 72 [+] | restore |
| 74 [+] | loneway tab1_resid statefip |
| 75 [+] | local rho = r(rho) |
| 76 [+] | di |
| 77 [+] | di "intraclass correation = `rho'" |
| 78 [+] | /* what else to save? */ |
/* Column 2, "FGLS (Random Effects)" */ |
|
| 83 [+] | xtset statefip |
| 84 [+] | xtreg lnwage policy age age2 yrseduc , |
| 85 [+] | local b_re = _b[policy] |
| 86 [+] | local se_re_default = _se[policy] |
| 87 [+] | local N_re = e(N) |
| 90 [+] | xtreg lnwage policy age age2 yrseduc , |
| 91 [+] | local se_re_cluster = _se[policy] |
/* another way to to random effects model (compare with xtreg output) (not in table) */ |
|
| 101 [+] | set matsize 6000 |
| 102 [+] | xtreg lnwage policy age age2 yrseduc , |
| 103 [+] | /************ END PROPOSED commenting out *********/ |
/* Random Effects model with cluster bootstrap for standard errors */ |
|
| 106 [+] | xtreg lnwage policy age age2 yrseduc , |
| 107 [+] | local se_re_bootstrap = _se[policy] |
| 109 [+] | /* next, display output */ |
| 111 [+] | qui log on t1out |
| 112 [+] | di |
| 113 [+] | di "OLS" |
| 114 [+] | di di |
| 115 [+] | di "beta, " %8.4f `b_ols' |
| 116 [+] | di "se def," %8.4f `se_ols_default' |
| 117 [+] | di "se rob," %8.4f `se_ols_robust' |
| 118 [+] | di "se clu," %8.4f `se_ols_cluster' |
| 119 [+] | di "se boot," %8.4f `se_ols_bootstrap' |
| 120 [+] | di |
| 121 [+] | di "Num obs," %8.0f `N_ols' |
| 122 [+] | di "Num clusters," %8.0f `G_ols' |
| 123 [+] | di "Ng range," " `clusize_min' to `clusize_max'" |
| 124 [+] | di "Rho, " %8.3f `rho' |
| 126 [+] | di |
| 127 [+] | di "Random effects" |
| 128 [+] | di |
| 129 [+] | di |
| 130 [+] | di "beta, " %8.4f `b_re' |
| 131 [+] | di "se def," %8.4f `se_re_default' |
| 132 [+] | di "se rob," " - " |
| 133 [+] | di "se clu," %8.4f `se_re_cluster' |
| 134 [+] | di "se boot," %8.4f `se_re_bootstrap' |
| 135 [+] | di |
| 136 [+] | di "Num obs," %8.0f `N_re' |
| 138 [+] | qui log off t1out |
| 139 [+] | end |
| 141 [+] | runme |
| 142 [+] | qui log close t1out |
| 143 [+] | log close _all |
#delimit ;
cap log close ;
log using table1.log, text replace ;
cap log close t1out ;
qui log using table1_out.csv , text replace name(t1out) ;
qui log off t1out ;
clear ;
set more off ;
do set_directory_macros ;
cap prog drop runme ;
prog def runme ;
/***************** MAKE THE DATA SET ****************/
/* generate state policy variable */
use statefip using "${madedat}/CPS_2012_micro_small" , replace ;
contract statefip ;
set seed 10101 ;
generate sort_order = uniform() ;
sort sort_order ;
gen policy = _n <= 25 ;
sort statefip ;
drop sort_order _freq ;
*list ;
tempfile statelist ;
qui save `statelist' ;
/* load up the micro data set, and merge on the fake policy variable */
*use "${madedat}/CPS_2012_micro_small" , replace ;
*use "${madedat}/CPS_2012_micro_medium" , replace ;
use "${madedat}/CPS_2012_micro" , replace ;
sort statefip ;
merge m:1 statefip using `statelist' ;
tab _merge ;
drop _merge ;
/***************** ESTIMATE THE MODELS ****************/
/*column 1 */
reg lnwage policy age age2 yrseduc ;
local b_ols = _b[policy] ; /* slope coefficient */
local se_ols_default = _se[policy] ; /* default standard errors */
local N_ols = e(N) ; /* number of observations */
predict tab1_resid , resid ;
reg lnwage policy age age2 yrseduc , robust ;
estimates store ols_white ;
local se_ols_robust = _se[policy] ; /* Heteroscedastic robust standard errors */
reg lnwage policy age age2 yrseduc , cluster(statefip) ;
local se_ols_cluster = _se[policy] ; /* Cluster robust (cluster on state) standard errors */
local G_ols = e(N_clust) ; /* Number clusters */
reg lnwage policy age age2 yrseduc , vce(bootstrap , cluster(statefip) reps(399) seed(10101) ) ;
local se_ols_bootstrap = _se[policy] ; /* Pairs cluster bootstrap standard errors */
/* what is the range of cluster sizes? */
preserve ;
gen byte one = 1 ;
collapse (sum) clusize = one , by(statefip) ;
summ clusize ;
local clusize_min = r(min) ;
local clusize_max = r(max) ;
restore ;
loneway tab1_resid statefip ;
local rho = r(rho) ; /* Intraclass correlation */
di ;
di "intraclass correation = `rho'" ;
/* what else to save? */
/* now do RE models */
/* Column 2, "FGLS (Random Effects)" */
xtset statefip ;
xtreg lnwage policy age age2 yrseduc , re ;
local b_re = _b[policy] ;
local se_re_default = _se[policy] ;
local N_re = e(N) ;
xtreg lnwage policy age age2 yrseduc , re cluster(statefip) ;
local se_re_cluster = _se[policy] ;
/*********************************************/
/* COLIN I CANNOT GET THIS TO CONVERGE IN A SHORT AMOUNT OF TIME with full sample.
I PROPOSE WE comment it out in the published code */
/* On Doug's work desktop, takes 2 hours to run when using "full" micro sample. */
/* also, for "small" sample, it doesn't yet give the same thing as the regular re model */
/* another way to to random effects model
(compare with xtreg output)
(not in table) */
set matsize 6000 ;
xtreg lnwage policy age age2 yrseduc , pa corr(exch) robust ;
/************ END PROPOSED commenting out *********/
/* Random Effects model with cluster bootstrap for standard errors */
xtreg lnwage policy age age2 yrseduc , re vce(bootstrap , reps(399) seed(10101) ) ;
local se_re_bootstrap = _se[policy] ;
/* next, display output */
qui log on t1out ;
di ;
di "OLS" ;
di ; di ;
di "beta, " %8.4f `b_ols' ;
di "se def," %8.4f `se_ols_default' ;
di "se rob," %8.4f `se_ols_robust' ;
di "se clu," %8.4f `se_ols_cluster' ;
di "se boot," %8.4f `se_ols_bootstrap' ;
di ;
di "Num obs," %8.0f `N_ols' ;
di "Num clusters," %8.0f `G_ols' ;
di "Ng range," " `clusize_min' to `clusize_max'" ;
di "Rho, " %8.3f `rho' ;
di ;
di "Random effects" ;
di ;
di ;
di "beta, " %8.4f `b_re' ;
di "se def," %8.4f `se_re_default' ;
di "se rob," " - " ;
di "se clu," %8.4f `se_re_cluster' ;
di "se boot," %8.4f `se_re_bootstrap' ;
di ;
di "Num obs," %8.0f `N_re' ;
qui log off t1out ;
end ;
runme ;
qui log close t1out ;
log close _all ;