AMMBR - final stuff xtmixed (and xtreg) (checking for normality, random slopes)

16
AMMBR - final stuff xtmixed (and xtreg) (checking for normality, random slopes)

Transcript of AMMBR - final stuff xtmixed (and xtreg) (checking for normality, random slopes)

AMMBR - final stuff

xtmixed (and xtreg)

(checking for normality, random slopes)

xtreg(with assumption

checking)

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 differentfor 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.

We knew already ...

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 independent.

A note on xtreg:Replacing the dummies by a delta

• This is only allowed when the dummies themselves follow a normal distribution

TO CHECK THIS:

• First run your model with all the dummies included (if possible)

• Then check whether the coefs of these dummies follow a normal distribution through the following Stata-code:

* Run a regression (with numbered dummies)reg y d2 ... d40 x1 x2

* Write the coefficients to a new variablegen coef = .forvalues i=2/40 {

replace coef = _b[d`i’] if _n==`i’}

swilk coef // test for normality

xtmixed

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

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.

xtmixed can deal with nested clusters (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!

[show this in Stata]

(compare empty xtmixed with xtreg)

Horrors

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.

(first: you now have a wealth of opportunities with clustered data. All effects might depend on the cluster-level.)

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)

There are two separate issues:- which coefficients do you want to vary per cluster?- which variables do you want to include?