1
$\begingroup$

I have a ordinal probit model. The dependent variable, say walkability, is a Likert scale variable (1,2,3). The main independent variable, say connectivity, is also a Likert scale variable (1,2,3). The other variables are dummies. There are two things that I am getting confused by:

  1. When I run the ordinal probit model in Stata, it gives one coefficient, std. error, p-value for the independent variable (connectivity). Shouldn't I have statistics for all options? Is there a specific command for it? Or is it ok to have one value?
  2. How do we compute marginal effects when both dependent and independent variables are discrete (1,2,3 scale variables)?
$\endgroup$
2
$\begingroup$
  1. You only get one coefficient in an ordinal probit model because you are actually fitting the model for a latent continuous variable y* (rather than, say, the log-odds of each alternative relative to the base alternative in a multinomial logit model). Think about it this way: The ordinal variable categories are rankings, such that although your outcomes may have been coded as 0, 1, 2, 3, 4, etc., the "distance" between category 0 and category 1 may not be the same as the distance between category 1 and category 2, and so on. For example, if the ordinal variable was a patient's response to the question of how well he or she can perform a specific activity of daily living unassisted, and the categories are:

    0 - Not well at all
    1 - Somewhat not well
    2 - Neutral
    3 - Somewhat well
    4 - Extremely well
    

    The distance between "Not well at all" and "Somewhat not well" may not be the same as the distance between "Somewhat not well" and "Neutral"

    By definition, y* is unobservable, but we can model the thresholds (boundaries)for each category. In Stata, along with coefficients for your model covariates, you should have also got (k-1) intercepts, where k is the number of categories in your ordinal outcome variable. These intercepts are given as /cut1, /cut2, ... ,/cut(k-1).

  2. You would compute the average marginal effects of a categorical predictor after running -oprobit- just as you would other models, and that is by using the -margins- command. Note that you need to specify which category you want the average marginal effects for, otherwise Stata will choose a category for you.

A trivial example:

First fit the model

. webuse fullauto,clear
(Automobile Models)

. xtile pricequint=price,n(5)

. label define pq 1"Lowest" 2"Lowest" 3"Middle" 4"Higher" 5"Highest",replace

. label value priceq pq

. oprobit rep78  i.pricequint

Iteration 0:   log likelihood = -93.692061  
Iteration 1:   log likelihood = -92.643441  
Iteration 2:   log likelihood = -92.643323  
Iteration 3:   log likelihood = -92.643323  

Ordered probit regression                         Number of obs   =         69
                                                  LR chi2(4)      =       2.10
                                                  Prob > chi2     =     0.7178
Log likelihood = -92.643323                       Pseudo R2       =     0.0112

------------------------------------------------------------------------------
       rep78 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |  -.1271055   .4100538    -0.31   0.757    -.9307962    .6765851
     Middle  |  -.0845474   .3940693    -0.21   0.830     -.856909    .6878142
     Higher  |   .3882535   .4029081     0.96   0.335    -.4014319    1.177939
    Highest  |   .1246315   .4102926     0.30   0.761    -.6795273    .9287903
-------------+----------------------------------------------------------------
       /cut1 |  -1.865516   .3978601                     -2.645308   -1.085725
       /cut2 |  -1.013338   .3095532                     -1.620051    -.406625
       /cut3 |   .2638664   .3002598                     -.3246321    .8523649
       /cut4 |   1.076626   .3157065                      .4578531      1.6954
------------------------------------------------------------------------------

Then run the -margins- command for each category. REP78 category == Poor

. margins, dydx(*) predict(outcome(1)) 

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==1), predict(outcome(1))
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |   .0100147   .0330296     0.30   0.762    -.0547221    .0747515
     Middle  |   .0064042   .0300529     0.21   0.831    -.0524983    .0653067
     Higher  |  -.0189492     .02406    -0.79   0.431    -.0661059    .0282074
    Highest  |  -.0077672   .0258943    -0.30   0.764    -.0585191    .0429847
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

REP78 category == Fair

. margins, dydx(*) predict(outcome(2)) 

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==2), predict(outcome(2))
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |   .0222821   .0722996     0.31   0.758    -.1194225    .1639866
     Middle  |   .0146452    .068373     0.21   0.830    -.1193634    .1486538
     Higher  |  -.0559815    .059961    -0.93   0.350    -.1735029    .0615399
    Highest  |  -.0201156   .0663317    -0.30   0.762    -.1501233    .1098922
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

REP78 category == Average

. margins, dydx(*) predict(outcome(3)) 

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==3), predict(outcome(3))
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |   .0157357   .0511898     0.31   0.759    -.0845945    .1160659
     Middle  |   .0111273   .0523686     0.21   0.832    -.0915133    .1137679
     Higher  |  -.0786234   .0835623    -0.94   0.347    -.2424024    .0851556
    Highest  |  -.0208081   .0692807    -0.30   0.764    -.1565958    .1149797
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

REP78 category == Good

. margins, dydx(*) predict(outcome(4)) 

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==4), predict(outcome(4))
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |  -.0215554   .0697354    -0.31   0.757    -.1582343    .1151234
     Middle  |  -.0141387   .0658856    -0.21   0.830    -.1432722    .1149947
     Higher  |   .0487688   .0536304     0.91   0.363    -.0563448    .1538823
    Highest  |   .0189647   .0623698     0.30   0.761    -.1032778    .1412071
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

REP78 category == Excellent

. margins, dydx(*) predict(outcome(5)) 

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==5), predict(outcome(5))
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |   -.026477   .0854652    -0.31   0.757    -.1939857    .1410317
     Middle  |   -.018038   .0843658    -0.21   0.831    -.1833919    .1473159
     Higher  |   .1047854   .1095801     0.96   0.339    -.1099878    .3195585
    Highest  |   .0297262   .0983159     0.30   0.762    -.1629695    .2224219
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

What happens when we don't specify a category in our -margins- command?

. margins, dydx(*)

Conditional marginal effects                      Number of obs   =         69
Model VCE    : OIM

Expression   : Pr(rep78==1), predict()
dy/dx w.r.t. : 2.pricequint 3.pricequint 4.pricequint 5.pricequint

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  pricequint |
     Lowest  |   .0100147   .0330296     0.30   0.762    -.0547221    .0747515
     Middle  |   .0064042   .0300529     0.21   0.831    -.0524983    .0653067
     Higher  |  -.0189492     .02406    -0.79   0.431    -.0661059    .0282074
    Highest  |  -.0077672   .0258943    -0.30   0.764    -.0585191    .0429847
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

Stata chose a category for us for the marginal effects calculation, in this case, the category chosen was 1 (lowest)

$\endgroup$
  • $\begingroup$ In Stata 13 & 14, margins, dydx(*) gives the MEs for all outcomes. $\endgroup$ – Dimitriy V. Masterov Apr 11 '15 at 20:44
  • $\begingroup$ @DimitriyV.Masterov are you sure about Stata 13? I have Stata 13, and margins, dydx(*) most definitely does not give the AME for all categories of the outcome vbl for -oprobit-. Maybe in Stata 14 :) $\endgroup$ – Marquis de Carabas Apr 12 '15 at 2:48
  • 2
    $\begingroup$ @marquidecarabas Nope, you're right. I must have run that right after I upgraded. $\endgroup$ – Dimitriy V. Masterov Apr 12 '15 at 2:53
  • $\begingroup$ Your example was indeed very helpful for me. One last thing, do we need to run any tests for ordinal probit models like these? any pre or pst estimations test? $\endgroup$ – numra Apr 15 '15 at 12:15
1
$\begingroup$
  1. You need to use the i. prefix in front of connectivity to let Stata know that it is dealing with a categorical variable. Otherwise Stata will assume that it is continuous, which is why you only get one parameter. Some people do treat Likert scale variables as if they were continuous, but I would avoid it since it bakes in some strong assumptions.
  2. You can use margins to get the average marginal effects of the categorical variable for each possible outcomes.

Here's an example with the cars data. The outcome is repair record (1=Poor, Fair, Average, Good, and 5=Excellent) and the explanatory variable is rounded and scaled version of miles per gallon (1=low mileage,2,3,4=high mileage), cat_var:

webuse fullauto, clear
gen cat_var = round(mpg,10) 
replace cat_var = cat_var/10

oprobit rep78 i.cat_var 
margins, dydx(cat_var)

The last line yields:

Conditional marginal effects                    Number of obs     =         69
Model VCE    : OIM

dy/dx w.r.t. : 2.cat_var 3.cat_var 4.cat_var
1._predict   : Pr(rep78==1), predict(pr outcome(1))
2._predict   : Pr(rep78==2), predict(pr outcome(2))
3._predict   : Pr(rep78==3), predict(pr outcome(3))
4._predict   : Pr(rep78==4), predict(pr outcome(4))
5._predict   : Pr(rep78==5), predict(pr outcome(5))

------------------------------------------------------------------------------
             |            Delta-method
             |      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
2.cat_var    |
    _predict |
          1  |  -.0010489   .0357763    -0.03   0.977    -.0711693    .0690714
          2  |  -.0023935   .0810853    -0.03   0.976    -.1613178    .1565307
          3  |  -.0010249   .0338153    -0.03   0.976    -.0673017     .065252
          4  |   .0027114   .0917155     0.03   0.976    -.1770477    .1824706
          5  |   .0017559   .0589478     0.03   0.976    -.1137797    .1172914
-------------+----------------------------------------------------------------
3.cat_var    |
    _predict |
          1  |  -.0362813   .0401879    -0.90   0.367     -.115048    .0424855
          2  |  -.1305657   .0828541    -1.58   0.115    -.2929568    .0318254
          3  |  -.2607216    .104809    -2.49   0.013    -.4661434   -.0552998
          4  |   .1308751   .0953367     1.37   0.170    -.0559813    .3177316
          5  |   .2966935   .1270194     2.34   0.020       .04774    .5456469
-------------+----------------------------------------------------------------
4.cat_var    |
    _predict |
          1  |  -.0379775   .0411425    -0.92   0.356    -.1186154    .0426604
          2  |  -.1477191   .0843946    -1.75   0.080    -.3131294    .0176912
          3  |  -.4194057   .1213036    -3.46   0.001    -.6571563    -.181655
          4  |   .0323166   .1558637     0.21   0.836    -.2731707    .3378039
          5  |   .5727857   .2405893     2.38   0.017     .1012393    1.044332
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.

So for example, the AME for 4 versus 1 for outcome 5 (Excellent) is .5727857, which means that the probability that a car's repair record is rated as excellent goes up by .57 on a 0-1 scale as we go from the lowest mileage bucket to the highest.

You can control the omitted category for the categorical variable by adjusting the prefix:

oprobit rep78 ib2.cat_var

This makes the AMEs relative to 2 rather than 1.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.