# Re: st: predict with adjusted constant in e(b) returns probabilities out of range after logit

 From "Arne Risa Hole" To statalist@hsphsun2.harvard.edu Subject Re: st: predict with adjusted constant in e(b) returns probabilities out of range after logit Date Wed, 15 Nov 2006 10:22:43 +0000

```Hi Daniel,

When you use -predict- following your "eret post b V" command you get
the linear prediction xb instead of the probability of a positive
outcome exp(xb)/(1+exp(xb)). Try replacing the last block of commands

mat li e(b)
mat b = e(b)
mat score double xb = b
su pfor* xb

Hope this helps
Arne

. // predictions with constant-adjusted e(b)
. mat li e(b)

e(b)[1,4]
mpg       price      weight       _cons
y1  -.12109183   .00092639  -.00684974    13.56217

. mat b = e(b)

. mat score double xb = b

. gen double pfor_adj = exp(xb)/(1+exp(xb))

. su pfor* xb

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
pfor_base |        74    .2972973    .3698118   .0000411   .9838551
pfor_adj |        74    .2313865    .3184607   .0000174   .9626613
xb |        74   -3.987828    4.049815     -10.96   3.249673

On 15/11/06, Daniel Mueller <dm_lists@gmx.net> wrote:
```
```Greetings!

After disproportionate sampling in a -logit- model I adjust the constant
term in e(b), leaving all other elements of e(b) unchanged. The adjustment
procedure is based on Maddala (2001, p. 352). There, he states that coefficients
are unaffected by disproportionate sampling in logit while the constant term
needs to be decreased by log(p_1)-log(p_0) where p_1 and p_0 are the proportion
of observations selected from each groups of y=1 and y=0.

I use the procedure pasted below to adjust the constant in e(b). But it returns
predicted probabilities that are out of the range of 0 to 1 (between -11 and +3,
see bottom of page). What have I overlooked? Why, in any case, is -predict-
after logit returning predicted values that are out of range? How can I fix that?

Thank you in advance for any insights!

Daniel

version 9
syntax , coef(int) val(real)
mat b = e(b)
mat V = e(V)
mat b[1,`coef'] = `val'
eret post b V
end
// (prog based on a post from Kit Baum)

sysuse auto, clear
loc samobs = 20

// generate proportions
qui cou if foreign == 0
loc for0 = (`samobs'/`r(N)') * 100
qui cou if foreign == 1
loc for1 = (`samobs'/`r(N)') * 100
loc constadj = log(`for1') - log(`for0')
loc depvar "mpg price weight"
qui logit foreign `depvar', nolo
qui predict pfor_base

mat li e(b)
loc newcons = _b[_cons] - `constadj'
loc coefno0 : word count `depvar'
loc coefno = `coefno0' + 1

mat li e(b)
su pfor*

--- relevant output
. mat li e(b)

e(b)[1,4]
mpg       price      weight       _cons
y1  -.12109183   .00092639  -.00684974   14.422375

. // e(b) with adjusted constant
. mat li e(b)

e(b)[1,4]
mpg       price      weight       _cons
y1  -.12109183   .00092639  -.00684974    13.56217

. // adjusted predictions - incorrect..

. su pfor*

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
pfor_base |        74    .2972973    .3698118   .0000411   .9838551
pfor_adj |        74   -3.987828    4.049815     -10.96   3.249673

Maddala, G.S. (2001) Introduction to Econometrics, Chichester: John Wiley & Sons.

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

```
```*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```