slides - Chrissnijders

Toolkit + “show your skills”
from xtreg to xtmixed
(+checking for normality, and random slopes, and
cross-classified models, and then we are almost
done in terms of theory)
(with assumption
We knew already ...
We have the standard regression model (here with only one x):
but think that the data are clustered, and that the intercept (c0) might be different
for different clusters
… where the S-variables are dummies per cluster.
Because k can be large, this is not always feasible to estimate. Instead we estimate:
… with the delta normally distributed with zero mean and variance to be estimated.
And this you can do with xtreg
xtset <clustervariable>
xtreg y x1
… and by doing this, we are trying to take into
account the fact that the errors are otherwise not
replacing the dummies by a delta
• This is only allowed when the dummies themselves
follow a normal distribution (and when delta and epsilon
do not correlate)
• First run your model with all the dummies included
(if possible – might not be feasible)
• Then check whether the coefs of these dummies
follow a normal distribution through the following
* Run a regression (with numbered dummies)
reg y d2 ... d40 x1 x2
* Write the coefficients to a new variable
gen coef = .
forvalues i=2/40 {
replace coef = _b[d`i’] if _n==`i’
for num 2/40: replace coef = _b[dX] if _n==X
swilk coef
// test for normality
Note: with all the dummies included, you
consider the “within-effects” (the d_ variables)
• Compare the “dummy-estimates” with the “deltaestimates”:
xtset id
xtreg y x1 x2, fe
estimates store fixed
xtreg y x1 x2, re
estimates store random
hausman fixed random
// “fe” for “fixed effects”
// store these estimates
// “re” for “random effects”*
// store these estimates
// compare the estimates
<show this in Stata>
Try it yourselves - The THKS data
(Tobacco, Health and Knowledge Scale)
• PostTHKS
Target variable is PostTHKS
(random slopes, and >2 levels)
What if c1 varies as well?
The same argument applies. We already had:
… and now make the c1 coefficient dependent on the cluster (“random slopes”)
This is not feasible to estimate for large k, so instead we want to model:
… with zeta a normally distributed variable with zero mean and variance to be estimated
xtreg does not do this
(it only does random intercepts)
And this you can do with xtmixed
xtmixed y x1 || <clustervar>:
is just like the xtreg command, but if you want
random slopes for x1, you add x1 after the “:”
xtmixed y x1 || <clustervar>: x1
Your output then gives you estimates for the
variance (or standard deviation) of delta and zeta.
The THKS data
(Tobacco, Health and Knowledge Scale)
• PostTHKS
Target variable is PostTHKS
xtmixed postthks cc || schoolid: cc
xtmixed can deal with nested clusters too!
(here: “classes within schools”)
Again the same kind of argument applies. We already had:
… and we want separate constant terms per class and per school
So we estimate instead:
… where delta is again a normally distributed variable at the school level with zero
mean and variance to be estimated, and tau is a normally distributed variable at the
class level with zero mean and variance to be estimated.
And this you can do with xtmixed as well
xtmixed y x1 || school: || class:
Remember to put the bigger cluster on the left!
xtmixed postthks || schoolid: || classid:
[show this in Stata]
(compare empty xtmixed with xtreg)
(first: you now have a wealth of opportunities
with clustered data. All effects might depend
on any kind of cluster-level.)
xtmixed finds its estimates using an iterative process.
This can complicate matters:
– it might not converge
– it might converge but to the wrong values (and you can’t tell)
– it might converge to different estimates for different algorithms in the
iterative process
You have only a couple of weapons against that:
– run again using a different algorithm (use option “, mle”)
– Allow estimation of correlations as well (use option “, cov(unstr)”)
– (run the dummy-variant (with lots of dummies) anyway)
I do not know if any of these horrors will happen in the data you get! This is
also something you can pre-check yourselves.
Splitting up variables (within vs across clusters)
Basically this is completely unrelated to the previous.
The important thing is that it can be done in
clustered data, and can lead to different
interpretations (see before)
HOWEVER: Note that if you have three or more
levels (pupils within classes within schools) then you
can average out on each level …
There is more...
• Multilevel data and Y = binary  xtlogit
• Multilevel data and levels are not nested  “crossclassified” multilevel models  xtmixed
• The random utility model  clogit
Exam material, clogit and xtlogit are not
Cross-classified multi-level models
• You use the xt-commands to “summarize a large set
of dummies”, so to speak
• … and you have seen this happening
– … with the intercept (xtreg)
– … with the slope (xtmixed)
– … with nested intercepts (xtmixed)
• And you can also apply it on non-nested clusters
(“cross-classified multilevel models”)
And you do this also with xtmixed
xtmixed Y X || _all: || _all:
In this example, Y is the target variable, predicted with
X, using that there are two non-overlapping clusters:
school and club. Note: you could try this, for instance,
on the motoroccasion.dta data set.
(NB you only need to know this basic option, no more
complicated ones)
Exam approaching ...

similar documents