I have been trying to create the three-level data without covariates. When I do
clear
program checkit, rclass
version 13
drop _all
set obs 6
generate school = _n
generate u_i = rnormal(0,2)
expand 10
bysort school: generate classroom = _n
generate u_ij = rnormal(0,3)
expand 16+int((25-16+1)*runiform())
bysort school classroom: generate child = _n
generate e_ijk = rnormal(0,5)
generate y = 70 + u_i + u_ij + e_ijk
mixed y || school: || classroom: , stddev iterate(300)
return scalar intercept = _b[_cons] // Obtain intercept
matrix b = e(b) // Get matrix for variance components
return scalar sd_e_ijk = exp(b[1,4]) // Get SD of residual variance
return scalar sd_u_ij = exp(b[1,3]) // Get SD of classroom variance
return scalar sd_u_i = exp(b[1,2]) // Get SD of school variance
return scalar n = e(N) // Get sample size
end
simulate constant = r(intercept) ///
res_var = r(sd_e_ijk) ///
clas_var = r(sd_u_ij) ///
scho_var = r(sd_u_i) ///
n = r(n) ///
, seed(3171) reps(10000): checkit
-sum- gives me a school-level variance component of 1.6, not 2.0:
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
constant | 10000 70.00696 .9110622 66.54556 73.34476
res_var | 10000 4.997051 .1042258 4.638548 5.409982
clas_var | 10000 2.986707 .3304136 1.791261 4.274279
scho_var | 10000 1.5931 .7894726 4.43e-11 5.00181
n | 10000 1229.93 22.152 1144 1311
Am I doing something wrong?