»  Home »  Resources & support »  FAQs »  Marginal effects after estimations with weights
Note: This FAQ is for Stata 10 and older versions of Stata.

In Stata 11, the margins command replaced mfx.

## Can I use mfx on survey data with unweighted means?

 Title Marginal effects after estimations with weights Author May Boggess, StataCorp

Yes, using the nowght option. Let’s first make sure we understand how mfx handles weights for survey data, and then we'll see how to ignore the weights when we need to.

 . clear

. set mem 2M
(output omitted)

. webuse nhanes2d

. svy: logit highbp height black, offset(hlthstat)
(running logit on estimation sample)

Survey: Logistic regression

Number of strata   =        31                  Number of obs      =     10349
Number of PSUs     =        62                  Population size    = 1.171e+08
Design df          =        31
F(   2,     30)    =     10.30
Prob > F           =    0.0004

------------------------------------------------------------------------------
|             Linearized
highbp |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
height |   .0216824   .0049413     4.39   0.000     .0116046    .0317603
black |  -.0805318   .1565209    -0.51   0.611    -.3997582    .2386946
_cons |  -8.669328   .8423297   -10.29   0.000    -10.38727   -6.951385
hlthstat |   (offset)
------------------------------------------------------------------------------

. mfx, predict(p)

Marginal effects after svy:logit
y  = Pr(highbp) (predict, p)
=  .06750846
------------------------------------------------------------------------------
variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
---------+--------------------------------------------------------------------
height |   .0013649      .00033    4.19   0.000   .000727  .002003   168.462
black*|  -.0049292      .00943   -0.52   0.601  -.023409   .01355   .095527
hlthstat |  (offset)                                                   2.39875
------------------------------------------------------------------------------
(*) dy/dx is for discrete change of dummy variable from 0 to 1

. summarize height [aweight=finalwgt] if e(sample)

Variable |     Obs      Weight        Mean   Std. Dev.       Min        Max
-------------+-----------------------------------------------------------------
height |   10349   117131111     168.462   9.698747      135.5        200

. replace height = r(mean)

. summarize black [aweight=finalwgt] if e(sample)

Variable |     Obs      Weight        Mean   Std. Dev.       Min        Max
-------------+-----------------------------------------------------------------
black |   10349   117131111    .0955274   .2939563          0          1

. replace black = r(mean)
black was byte now float

. summarize hlthstat [aweight=finalwgt] if e(sample)

Variable |     Obs      Weight        Mean   Std. Dev.       Min        Max
-------------+-----------------------------------------------------------------
hlthstat |   10349   117131111    2.398746   1.163176          1          8

. replace hlthstat = r(mean)
hlthstat was byte now float

. predict y, p

. summarize y

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
y |     10351    .0675085           0   .0675085   .0675085

. replace black=0

. predict p0, p

. replace black=1

. predict p1, p

. generate marg=p1-p0

. summarize marg

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
marg |     10351   -.0049292           0  -.0049292  -.0049292


In the previous example, we correctly calculated the predicted value for y, and we even calculated the marginal effect for black and found that checked out OK, too. We also saw that all the means and the offset have taken the weight into account, as well.

mfx obtains the pweight variable from svyset and uses it as an aweight variable with summarize. This gives the same mean as svy: mean but not the same standard deviation. However, because we don’t need the standard deviation, we can get away with this here.

This trick is actually making things a bit easier because using svy: mean would change our estimation results, and we wouldn't be able to use mfx after svy: mean.

Now let’s redo the above example without weights by specifying the nowght option of mfx:

 . clear

. set mem 2M
(output omitted)

. webuse nhanes2d

. svy: logit highbp height weight black, offset(hlthstat)
(running logit on estimation sample)

Survey: Logistic regression

Number of strata   =        31                  Number of obs      =     10349
Number of PSUs     =        62                  Population size    = 1.171e+08
Design df          =        31
F(   3,     29)    =     55.69
Prob > F           =    0.0000

------------------------------------------------------------------------------
|             Linearized
highbp |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
height |  -.0142804   .0053408    -2.67   0.012    -.0251729   -.0033879
weight |   .0490184   .0037007    13.25   0.000     .0414709     .056566
black |  -.2857725   .1423184    -2.01   0.053    -.5760329    .0044878
_cons |  -6.318211   .8832654    -7.15   0.000    -8.119643    -4.51678
hlthstat |   (offset)
------------------------------------------------------------------------------

. mfx, predict(p) nowght

Marginal effects after svy:logit
y  = Pr(highbp) (predict, p)
=  .06758168
------------------------------------------------------------------------------
variable |      dy/dx    Std. Err.     z    P>|z|  [    95% C.I.   ]      X
---------+--------------------------------------------------------------------
height |  -.0008999      .00036   -2.49   0.013  -.001609 -.000191   167.653
weight |   .0030889      .00035    8.76   0.000   .002398   .00378   71.8998
black*|  -.0163564      .00788   -2.08   0.038  -.031792 -.000921   .104938
hlthstat |  (offset)                                                   2.59349
------------------------------------------------------------------------------
(*) dy/dx is for discrete change of dummy variable from 0 to 1

. summarize height if e(sample)

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
height |     10349    167.6526    9.655687      135.5        200

. replace height = r(mean)

. summarize weight if e(sample)

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
weight |     10349    71.89977    15.35705      30.84     175.88

. replace weight = r(mean)

. summarize black if e(sample)

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
black |     10349    .1049377    .3064879          0          1

. replace black = r(mean)
black was byte now float

. summarize hlthstat if e(sample)

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
hlthstat |     10349    2.593487    1.221695          1          8

. replace hlthstat = r(mean)
hlthstat was byte now float

. predict y, p

. summarize y

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
y |     10351    .0675817           0   .0675817   .0675817

. replace black=0

. predict p0, p

. replace black=1

. predict p1, p

. generate marg=p1-p0

. summarize marg

Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
marg |     10351   -.0163564           0  -.0163564  -.0163564


nowght does exactly what we want. All the means have been calculated without weights. Even the offset is calculated without weights. The predicted y value and the marginal effect for black checks out OK.