Home  /  Resources & support  /  FAQs  /  Marginal effects and the travelvl option
Note: This FAQ is for Stata 10 and older versions of Stata.

In Stata 11, the margins command replaced mfx.

Running mfx on my dataset takes a long time, and I am worried it may have stopped. How can I tell if it is still running?

Title   Marginal effects and the travelvl option
Author May Boggess, StataCorp

The tracelvl(1) option is very useful for watching mfx at work. Let’s look at an example:

 . sysuse auto, clear
 (1978 Automobile Data)
 
 . mlogit rep78 length displacement turn gear_ratio, nolog 
 
 Multinomial logistic regression                   Number of obs   =         69
                                                   LR chi2(16)     =      50.40
                                                   Prob > chi2     =     0.0000
 Log likelihood = -68.492767                       Pseudo R2       =     0.2690
 
 ------------------------------------------------------------------------------
        rep78 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
 1            |
       length |  -.0077791   .0857701    -0.09   0.928    -.1758855    .1603272
 displacement |  -.0203556   .0217033    -0.94   0.348    -.0628933    .0221822
         turn |   .2606348   .4279448     0.61   0.542    -.5781215    1.099391
   gear_ratio |   -1.84238   3.056085    -0.60   0.547    -7.832197    4.147436
        _cons |  -2.307812   16.15227    -0.14   0.886    -33.96567    29.35005
 -------------+----------------------------------------------------------------
 2            |
       length |  -.0257227   .0503671    -0.51   0.610    -.1244405    .0729951
 displacement |  -.0227271   .0139469    -1.63   0.103    -.0500626    .0046083
         turn |   .5413776   .2719147     1.99   0.046     .0084346    1.074321
   gear_ratio |  -3.959613   2.582289    -1.53   0.125    -9.020805     1.10158
        _cons |  -2.896173    9.00731    -0.32   0.748    -20.55018    14.75783
 -------------+----------------------------------------------------------------
 4            |
       length |   .0485892   .0351597     1.38   0.167    -.0203226     .117501
 displacement |  -.0006782    .009394    -0.07   0.942    -.0190901    .0177337
         turn |  -.2454005   .1682703    -1.46   0.145    -.5752041    .0844032
   gear_ratio |   1.615741   1.430829     1.13   0.259    -1.188633    4.420116
        _cons |  -4.694191   7.392889    -0.63   0.525    -19.18399    9.795606
 -------------+----------------------------------------------------------------
 5            |
       length |   .2154726   .0826013     2.61   0.009      .053577    .3773682
 displacement |  -.1231205   .0456459    -2.70   0.007    -.2125848   -.0336562
         turn |   -.561081   .2635563    -2.13   0.033    -1.077642   -.0445202
   gear_ratio |  -4.795507   2.475835    -1.94   0.053    -9.648054    .0570406
        _cons |    14.0879   11.59243     1.22   0.224    -8.632844    36.80864
 ------------------------------------------------------------------------------
 (rep78==3 is the base outcome)
 
 . mfx, predict(p outcome(2)) tracelvl(1)
 
 calculating dydx (nonlinear method)
 
 -------------------------
 variable |      dy/dx
 ---------+---------------
   length |      -.00184
 displa~t |      -.00094
     turn |       .02686
 gear_r~o |      -.19349
 -------------------------
  
  
 calculating standard errors (nonlinear method)
 
 length ... continuous
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20 
 length: Std. Err. = .00272748
 
 displacement ... continuous
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20 
 displacement: Std. Err. = .00066346
 
 turn ... continuous
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20 
 turn: Std. Err. = .01852245
 
 gear_ratio ... continuous
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20 
 gear_ratio: Std. Err. = .11812354
 
 Marginal effects after mlogit
       y  = Pr(rep78==2) (predict, p outcome(2))
          =  .04557427
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
   length |  -.0018412      .00273   -0.68   0.500  -.007187  .003505    188.29
 displa~t |  -.0009443      .00066   -1.42   0.155  -.002245  .000356       198
     turn |   .0268613      .01852    1.45   0.147  -.009442  .063165   39.7971
 gear_r~o |  -.1934947      .11812   -1.64   0.101  -.425013  .038023   2.99928
  ------------------------------------------------------------------------------

I’ve chosen mlogit as an example because it is a multiple-equation estimation with many coefficients, so mfx can take quite some time to complete its calculations.

Let’s go through the extra output that tracelvl(1) has created and see what it means. The first part of the output is

 calculating dydx (nonlinear method)
  
 -------------------------
 variable |      dy/dx
 ---------+---------------
   length |      -.00184
 displa~t |      -.00094
     turn |       .02686
 gear_r~o |      -.19349
 -------------------------

First mfx tells us that it is calculating the marginal effects and that it is using the nonlinear method (see the FAQ stata.com/support/faqs/statistics/marginal-effects-methods for an explanation of what nonlinear means). We see this output appear very quickly indeed. Let’s look at the next piece of output:

 calculating standard errors (nonlinear method)
  
 length ... continuous
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20 
 length: Std. Err. = .00272748

mfx begins by letting us know it is doing the standard errors, again using the nonlinear method. Then, for each independent variable in the estimation, we have numbers counting across the screen in front of us. It is comforting to see them because at least we know mfx is still at work, but what do they mean?

To compute the standard error of each marginal effect, we need to compute a number corresponding to each coefficient in the estimation (see the FAQ stata.com/support/faqs/statistics/marginal-effects-methods for a full description of exactly what they are). So, the list of numbers tells you which variable it is up to in the computation. We can use tracelvl(2) if we want to see each of those numbers as mfx computes it:

 . webuse fish, clear
 
 . zip count persons, inf(child camper) vuong nolog
 
 Zero-inflated Poisson regression                  Number of obs   =        250
                                                   Nonzero obs     =        108
                                                   Zero obs        =        142
 
 Inflation model = logit                           LR chi2(1)      =     417.56
 Log likelihood  = -895.1643                       Prob > chi2     =     0.0000
 
 ------------------------------------------------------------------------------
        count |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
 count        |
      persons |   .8061845   .0460454    17.51   0.000     .7159371    .8964318
        _cons |  -.5040989   .1658804    -3.04   0.002    -.8292184   -.1789793
 -------------+----------------------------------------------------------------
 inflate      |
        child |   1.513283   .2652983     5.70   0.000     .9933076    2.033258
       camper |  -1.007936   .3499951    -2.88   0.004    -1.693914   -.3219581
        _cons |  -.3299887   .2913634    -1.13   0.257    -.9010505    .2410732
 ------------------------------------------------------------------------------
 Vuong test of zip vs. standard Poisson:            z =     3.94  Pr>z = 0.0000
 
 . mfx, predict(n) nonlinear tracelvl(1)
 
 calculating dydx (nonlinear method)
 
 -------------------------
 variable |      dy/dx
 ---------+---------------
  persons |       1.7639
    child |      -1.7485
   camper |       1.1334
 -------------------------
 
 
 calculating standard errors (nonlinear method)
 
 persons ... continuous
  1  2  3  4  5 
 persons: Std. Err. = .17607926
  
 child ... continuous
  1  2  3  4  5 
 child: Std. Err. = .2973726
 
 camper ... discrete
  1  2  3  4  5 
 camper: Std. Err. = .37428072
 
 Marginal effects after zip
       y  = predicted number of events (predict, n)
          =  2.1880131
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
  persons |   1.763942      .17608   10.02   0.000   1.41883  2.10905     2.528
    child |   -1.74851      .29737   -5.88   0.000  -2.33135 -1.16567      .684
   camper*|    1.13338      .37428    3.03   0.002   .399803  1.86696      .588
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1
 
 . mfx, predict(n) nonlinear tracelvl(2)
 
 calculating dydx (nonlinear method)
 
 -------------------------
 variable |      dy/dx
 ---------+---------------
  persons |       1.7639
    child |      -1.7485
   camper |       1.1334
 -------------------------
 
 
 calculating standard errors (nonlinear method)

 persons ... continuous
  1  d^2f/dxdb = 6.6472574
  2  d^2f/dxdb = 1.7639419
  3  d^2f/dxdb = -.63714517
  4  d^2f/dxdb = -.54772145
  5  d^2f/dxdb = -.93149901
 persons: Std. Err. = .17607926
  
 child ... continuous
  1  d^2f/dxdb = -4.4202341
  2  d^2f/dxdb = -1.7485094
  3  d^2f/dxdb = -1.0882794
  4  d^2f/dxdb = .05773436
  5  d^2f/dxdb = .09819149
 child: Std. Err. = .2973726
 
 camper ... discrete
  1  d^2f/dxdb = 2.8651844
  2  d^2f/dxdb = 1.1333799
  3  d^2f/dxdb = -.0730116
  4  d^2f/dxdb = -1.1329221
  5  d^2f/dxdb = -.10674212
 camper: Std. Err. = .37428072
 
 Marginal effects after zip
       y  = predicted number of events (predict, n)
          =  2.1880131
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
  persons |   1.763942      .17608   10.02   0.000   1.41883  2.10905     2.528
    child |   -1.74851      .29737   -5.88   0.000  -2.33135 -1.16567      .684
   camper*|    1.13338      .37428    3.03   0.002   .399803  1.86696      .588
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1