unzipfile "output7717034280080927434.zip", replace
use cntry essround happy using ESS1-6e01_0_F1, clear
// Generate country-year variable
levelsof cntry, local(levels1)
levelsof essround, local(levels2)
gen cyear = ""
foreach country of local levels1 {
foreach round of local levels2 {
replace cyear = "`country'" + "`round'" if cntry == "`country'" & essround == `round'
di "`country'" "`round'"
}
}
label var cyear "Country-Year"
// Fit three-level model
mixed happy || cntry: || cyear:
estat icc
capture drop u1* u0*
predict u1 u0, reffects
predict u1se u0se, reses
// Plot country-level variation
preserve
egen pickone = tag(cntry)
keep if pickone
egen order_ = rank(-u1), unique
labmask order_, value(cntry)
gen high = u1 + (1.96 * u1se)
gen low = u1 - (1.96 * u1se)
twoway (rcap u1 u1 order_, dsymbol(x)) ///
(rspike high low order_) , ///
yline(0) xlabel(1/32, val ang(v)) ///
xtitle("") ///
ytitle("Country-level residuals") ///
legend(off) ///
name(cntry, replace)
restore
// Plot country-year level variation
preserve
egen pickone = tag(cyear)
keep if pickone
egen order_ = rank(-u0), unique
labmask order_, value(cyear)
gen high = u0 + (1.96 * u0se)
gen low = u0 - (1.96 * u0se)
twoway (rcap u0 u0 order_, dsymbol(x) horizontal) ///
(rspike high low order_, horizontal) , ///
xline(0) ylabel(none) ///
xscale(alt) ///
ytitle("") ///
xtitle("Country{c 150}year-level residuals") ///
legend(off) ///
name(cyear, replace) ysize(8)
restore