Stata: Data Analysis and Statistical Software
   >> Home >> Resources & support >> FAQs >> Obtaining marginal effects for a few independent variables
Note: This FAQ is for Stata 10 and older versions of Stata. In Stata 11, the margins command replaced mfx.

I am only interested in obtaining a few of the marginal effects for a few independent variables. How can I do that?

Title   Obtaining marginal effects for a few independent variables
Author May Boggess, StataCorp
Date April 2004; updated May 2005

We can choose the independent variables for which we want marginal effects by using the varlist() option:

 . sysuse auto, clear
 (1978 Automobile Data)
 
 . constraint define 1 price=weight
 
 . cnsreg mpg price weight, constraint(1)
 
 Constrained linear regression                          Number of obs =      74
                                                        F(  1,    72) =   37.59
                                                        Prob > F      =  0.0000
                                                        Root MSE      =   4.722
  ( 1)  price - weight = 0
 ------------------------------------------------------------------------------
          mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
        price |  -.0009875   .0001611    -6.13   0.000    -.0013086   -.0006664
       weight |  -.0009875   .0001611    -6.13   0.000    -.0013086   -.0006664
        _cons |   30.36718   1.577958    19.24   0.000     27.22158    33.51278
 ------------------------------------------------------------------------------
 
 . mfx, predict(pr(20,30)) nose
 
 Marginal effects after cnsreg
       y  = Pr(20<mpg<30) (predict, pr(20,30))
          =  .57557714
 -------------------------------------------------------------------------------
                         variable |          dy/dx                 X
 ---------------------------------+---------------------------------------------
                            price |       -.0000651            6165.26
                           weight |       -.0000651            3019.46
 -------------------------------------------------------------------------------
 
 . mfx, predict(pr(20,30)) nose varlist(price)
 
 Marginal effects after cnsreg
       y  = Pr(20<mpg<30) (predict, pr(20,30))
          =  .57557714
 -------------------------------------------------------------------------------
                         variable |          dy/dx                 X
 ---------------------------------+---------------------------------------------
                            price |       -.0000651            6165.26
 -------------------------------------------------------------------------------

The varlist() option can understand abbreviations:

 . webuse xmpl2, clear
 
 . blogit deaths pop agecat exposed, or nolog
    
 Logistic regression for grouped data              Number of obs   =        409
                                                   LR chi2(2)      =      22.47
                                                   Prob > chi2     =     0.0000
 Log likelihood =  -142.6212                       Pseudo R2       =     0.0730
 
 ------------------------------------------------------------------------------
     _outcome | Odds Ratio   Std. Err.      z    P>|z|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
       agecat |   4.216299   1.431519     4.24   0.000     2.167361    8.202223
      exposed |   1.404674   .4374454     1.09   0.275     .7629451    2.586175
 ------------------------------------------------------------------------------
 
 . mfx, predict(p)  
 
 Marginal effects after blogit
       y  = Pr(outcome) (predict, p)
          =  .11114585
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
   agecat*|    .146902      .03367    4.36   0.000   .080908  .212896        .5
  exposed*|   .0336358      .03074    1.09   0.274  -.026618   .09389        .5
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1
 
 . mfx, predict(p) varlist(ag)
 
 Marginal effects after blogit
       y  = Pr(outcome) (predict, p)
          =  .11114585
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
   agecat*|    .146902      .03367    4.36   0.000   .080908  .212896        .5
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

It even understands the wildcard character *:

 . sysuse auto, clear
 (1978 Automobile Data)
 
 . svyset [pweight=turn]
 
       pweight: turn
           VCE: linearized
   Single unit: missing
      Strata 1: <one>
          SU 1: <observations>
         FPC 1: <zero>
 
 . xi: svy: regress mpg weight length i.rep78
 i.rep78           _Irep78_1-5         (naturally coded; _Irep78_1 omitted)
 (running regress on estimation sample)
 
 Survey: Linear regression
 
 Number of strata   =         1                  Number of obs      =        69
 Number of PSUs     =        69                  Population size    =      2746
                                                 Design df          =        68
                                                 F(   6,     63)    =     35.77
                                                 Prob > F           =    0.0000
                                                 R-squared          =    0.6995
 
 ------------------------------------------------------------------------------
              |             Linearized
          mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
       weight |  -.0023266   .0018753    -1.24   0.219    -.0060687    .0014154
       length |  -.1123922   .0658759    -1.71   0.093    -.2438454     .019061
    _Irep78_2 |  -.1298266   1.060557    -0.12   0.903    -2.246136    1.986483
    _Irep78_3 |  -.5064828   .8987613    -0.56   0.575    -2.299933    1.286967
    _Irep78_4 |  -.2704473   .9751403    -0.28   0.782    -2.216309    1.675415
    _Irep78_5 |   2.340767   2.190164     1.07   0.289    -2.029638    6.711171
        _cons |    49.4272   6.987183     7.07   0.000     35.48449    63.36991
 ------------------------------------------------------------------------------

 . mfx, predict(xb)
    
 Marginal effects after svy: regress
       y  = Linear prediction (predict, xb)
          =  20.815368
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
   weight |  -.0023266      .00188   -1.24   0.215  -.006002  .001349    3107.1
   length |  -.1123922      .06588   -1.71   0.088  -.241507  .016722   190.449
 _Irep7~2*|  -.1298266     1.06056   -0.12   0.903  -2.20848  1.94883   .126366
 _Irep7~3*|  -.5064828      .89876   -0.56   0.573  -2.26802  1.25506   .448653
 _Irep7~4*|  -.2704473      .97514   -0.28   0.782  -2.18169  1.64079   .252367
 _Irep7~5*|   2.340767     2.19016    1.07   0.285  -1.95188  6.63341   .142753
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

 
 . mfx, predict(xb) varlist(_Irep*)

 Marginal effects after svy: regress
       y  = Linear prediction (predict, xb)
          =  20.815368
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
 _Irep7~2*|  -.1298266     1.06056   -0.12   0.903  -2.20848  1.94883   .126366
 _Irep7~3*|  -.5064828      .89876   -0.56   0.573  -2.26802  1.25506   .448653
 _Irep7~4*|  -.2704473      .97514   -0.28   0.782  -2.18169  1.64079   .252367
 _Irep7~5*|   2.340767     2.19016    1.07   0.285  -1.95188  6.63341   .142753
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

The varlist() option can understand time-series operators:

 . sysuse auto, clear
 (1978 Automobile Data)
    
 . generate t=_n
    
 . tsset t
         time variable:  t, 1 to 74
                 delta:  1 unit
    
 . regress mpg l(1/3).length head turn

       Source |       SS       df       MS              Number of obs =      71
 -------------+------------------------------           F(  5,    65) =   18.06
        Model |  1409.28532     5  281.857063           Prob > F      =  0.0000
     Residual |  1014.60201    65  15.6092617           R-squared     =  0.5814
 -------------+------------------------------           Adj R-squared =  0.5492
        Total |  2423.88732    70  34.6269618           Root MSE      =  3.9509
 
 ------------------------------------------------------------------------------
          mpg |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
       length |
          L1. |  -.0372479   .0236292    -1.58   0.120    -.0844386    .0099429
          L2. |   .0557295   .0248165     2.25   0.028     .0061675    .1052915
          L3. |  -.0283338   .0238291    -1.19   0.239    -.0759237    .0192561
     headroom |  -.7995216   .6130181    -1.30   0.197    -2.023803    .4247601
         turn |   -.876568   .1295939    -6.76   0.000    -1.135385    -.617751
        _cons |   60.39905    5.75474    10.50   0.000     48.90604    71.89205
 ------------------------------------------------------------------------------
 
 . mfx, varlist(l(1/3).length)
 
 Marginal effects after regress
       y  = Fitted values (predict)
          =  21.338028
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
 L.length |  -.0372479      .02363   -1.58   0.115   -.08356  .009064   188.099
 L2.len~h |   .0557295      .02482    2.25   0.025    .00709  .104369   188.338
 L3.len~h |  -.0283338      .02383   -1.19   0.234  -.075038   .01837   188.775
 ------------------------------------------------------------------------------

Here’s another example:

 . webuse labor, clear

 . generate wc=(we>12)
    
 . treatreg ww wa cit, treat(wc=wmed wfed cit) nolog
    
 Treatment-effects model -- MLE                  Number of obs      =       250
 
                                                 Wald chi2(3)       =      4.25
 Log likelihood = -703.17446                     Prob > chi2        =    0.2361
 
 ------------------------------------------------------------------------------
              |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
 -------------+----------------------------------------------------------------
 ww           |
           wa |  -.0121192    .019932    -0.61   0.543    -.0511852    .0269467
          cit |   .1598895   .3545804     0.45   0.652    -.5350753    .8548544
           wc |   1.146174   .7460483     1.54   0.124    -.3160537    2.608402
        _cons |   2.379273     .90795     2.62   0.009     .5997236    4.158822
 -------------+----------------------------------------------------------------
 wc           |
         wmed |   .1359134   .0334665     4.06   0.000     .0703203    .2015065
         wfed |   .0866335   .0295276     2.93   0.003     .0287605    .1445066
          cit |   .5669854   .2075585     2.73   0.006     .1601782    .9737927
        _cons |  -3.082537   .3866133    -7.97   0.000    -3.840285   -2.324789
 -------------+----------------------------------------------------------------
      /athrho |   .0546227   .1916721     0.28   0.776    -.3210477    .4302931
     /lnsigma |   .9246445   .0449341    20.58   0.000     .8365752    1.012714
 -------------+----------------------------------------------------------------
          rho |   .0545685   .1911013                     -.3104539    .4055663
        sigma |   2.520972   .1132777                      2.308448    2.753062
       lambda |   .1375656   .4824063                     -.8079333    1.083064
 ------------------------------------------------------------------------------
 LR test of indep. eqns. (rho = 0):   chi2(1) =     0.08   Prob > chi2 = 0.7752
 ------------------------------------------------------------------------------
    
 . mfx, predict(xb)
 
    Marginal effects after treatreg
       y  = Linear prediction (predict, xb)
          =    2.27523
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
       wa |  -.0121192      .01993   -0.61   0.543  -.051185  .026947     42.92
      cit*|   .1598895      .35458    0.45   0.652  -.535075  .854854      .624
       wc*|   1.146174      .74605    1.54   0.124  -.316054   2.6084      .276
     wmed |          0           0       .       .         0        0     9.136
     wfed |          0           0       .       .         0        0     8.608
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

 . mfx, predict(xbtrt)
 
 Marginal effects after treatreg
       y  = Linear prediction of wc (predict, xbtrt)
          = -.74129165
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
       wa |          0           0       .       .         0        0     42.92
      cit*|   .5669854      .20756    2.73   0.006   .160178  .973793      .624
       wc*|          0           0       .       .         0        0      .276
     wmed |   .1359134      .03347    4.06   0.000    .07032  .201507     9.136
     wfed |   .0866335      .02953    2.93   0.003    .02876  .144507     8.608
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

In the above example, we can see that, when the prediction equation is xb, a variable that does not appear in the regression equation will have zero derivative (marginal effect). The same is true when the prediction equation is xbtrt: a variable that does not appear in the treatment equation will have zero derivative. So, there is little point having mfx calculate something that we know will be zero:

 . mfx, predict(xb) varlist(wa cit wc)
    
 Marginal effects after treatreg
       y  = Linear prediction (predict, xb)
          =    2.27523
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
       wa |  -.0121192      .01993   -0.61   0.543  -.051185  .026947     42.92
      cit*|   .1598895      .35458    0.45   0.652  -.535075  .854854      .624
       wc*|   1.146174      .74605    1.54   0.124  -.316054   2.6084      .276
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1
 
 . mfx, predict(xbtrt) varlist(wmed wfed cit)
 
 Marginal effects after treatreg
       y  = Linear prediction of wc (predict, xbtrt)
          = -.74129165
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
      cit*|   .5669854      .20756    2.73   0.006   .160178  .973793      .624
     wmed |   .1359134      .03347    4.06   0.000    .07032  .201507     9.136
     wfed |   .0866335      .02953    2.93   0.003    .02876  .144507     8.608
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1

The same is true, of course, when predicting the probability:

 . mfx, predict(ptrt) 
    
 Marginal effects after treatreg
       y  = Pr(wc) (predict, ptrt)
          =  .22925831
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
       wa |          0           0       .       .         0        0     42.92
      cit*|   .1619747      .05464    2.96   0.003   .054877  .269072      .624
       wc*|          0           0       .       .         0        0      .276
     wmed |   .0411952      .00998    4.13   0.000   .021644  .060747     9.136
     wfed |   .0262586      .00897    2.93   0.003   .008669  .043848     8.608
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1
 
 . mfx, predict(ptrt)  varlist(wmed wfed cit)
 
 Marginal effects after treatreg
       y  = Pr(wc) (predict, ptrt)
          =  .22925831
 ------------------------------------------------------------------------------
 variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
 ---------+--------------------------------------------------------------------
      cit*|   .1619747      .05464    2.96   0.003   .054877  .269072      .624
     wmed |   .0411952      .00998    4.13   0.000   .021644  .060747     9.136
     wfed |   .0262586      .00897    2.93   0.003   .008669  .043848     8.608
 ------------------------------------------------------------------------------
 (*) dy/dx is for discrete change of dummy variable from 0 to 1
Bookmark and Share 
FAQs
What's new?
Statistics
Data management
Graphics
Programming Stata
Mata
Resources
Internet capabilities
Stata for Windows
Stata for Unix
Stata for Mac
Technical support
Like us on Facebook Follow us on Twitter Follow us on LinkedIn Google+ Watch us on YouTube
Follow us
© Copyright 1996–2013 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index   |   View mobile site