Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# st: Computing predicted probabilities in multi-level model (xtmelogit)

 From "Michael.Stuetzer" To statalist@hsphsun2.harvard.edu Subject st: Computing predicted probabilities in multi-level model (xtmelogit) Date Fri, 22 Oct 2010 10:52:15 +0200

```Dear Colleagues,

```
I want to visualize a moderation effect in a multi-level model and would like to ask whether or not the code (adapted from www.ats.ucla.edu/stat/stata/faq/xtmelogit_prob.htm) below is suitable to produce the predicted probabilities to do this. To be more precise: I have data at two levels. The dependent variable is at level 1 and binary. Some predictors are at level 1 (Zopport Zknowent Zownmge) and one is from level 2 (Zbipwachstum_l1t5). I'm interested in the cross-level interaction between Zownmge and Zbipwachstum_l1t5 (int_knowent_bipwachstum5). In order to compute predicted probabilities I followed the recommendations to hold the other variables at their respective mean.
```
However, I have a couple of questions.
```
1. In the code below, I use the mean of the level 2 variable over the entire dataset. However, for different regions (this is the level 2) I have different number of observations at the level 1, which has an impact on the mean. Wouldn't it be more correct to use the mean of the level 2 variable accross the (lets say) 300 regions?
```
```
2. From my experience with the prvalue command, I also hold the interaction term at the respective mean when computing the predicted probabilities. Is this also correct in multi-level modeling?
```
```
3. In this first step I compute the predicted probabilities at the mean of Zbipwachstum_l1t5, thereafter at mean + sd, and mean - sd. Do I also have to alter the level of the interaction term int_knowent_bipwachstum5 or does this interaction term is always held constant at the mean?
```

Thanks a lot
Michael

use...
quietly summarize Zopport
global opport=r(mean)
quietly summarize Zknowent
global knowent=r(mean)
quietly summarize Zbipwachstum_l1t5
global bipwachstum_l1t5=r(mean)-r(sd)
quietly summarize int_ownmge_bipwachstum5
global int_ownmge_bipwachstum=r(mean)

```
xtmelogit latent Zownmge Zknowent Zopport Zbipwachstum_l1t5 int_ownmge_bipwachstum5 || kreis:,
```

/* get vector of logistic coefficients */
matrix b = e(b)
matrix list b

/* keep only the elements of b that are of interest */
matrix b = b[1,2..7]
matrix list b

/* predict random effects */
predict b1, reffects

/* create vector of random effects */
quietly tab b1, matrow(b1)
matrix list b1

*
mata
/*  bring vectors b and b1 into Mata */
b  = st_matrix("b")
b1 = st_matrix("b1")

/* bring the global macro variables into Mata */
knowent    =  strtoreal(st_global("knowent"))
opport    =  strtoreal(st_global("opport"))
bipwachstum_l1t5=  strtoreal(st_global("bipwachstum_l1t5"))
bipwachstum_l1t5
int_ownmge_bipwachstum = strtoreal(st_global("int_ownmge_bipwachstum"))
end

mata
/* loop to compute probabilities for knowent and not knowent */
for (ownmge=0; ownmge<=1; ownmge++) {
```
x=(ownmge \ knowent \ opport \ bipwachstum_l1t1 \ int_ownmge_bipwachstum \ 1)
``` xb = b*x
xbr = xb:+b1
expxbr = exp(xbr)
p = expxbr:/(1:+expxbr)
mean(p)
}
end

*****

--

Dipl.-Vw. Michael Stützer
Thüringer Gründer Studie/
Lehrstuhl für Mikroökonomik
Friedrich-Schiller-Universität Jena
Carl-Zeiß-Str. 3
D-07743 Jena

Tel.: +49 03641 943207
Fax.: +49 03641 943202

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```