Press "Enter" to skip to content

Marginal Effect at Mean vs. Average Marginal Effect

Based on this post by Michael Norman Mitchell, I want to remember the difference between the Marginal Effect at Mean and the Average Marginal Effect.

I conduct an ordered logistic regression (proportional odds model) to predict the effect of sex on likelihood of voting:

ologit vote c.age i.female c.chfreq c.edu_years, allbase coeflegend

Marginal Effect at Mean
To obtain the probability of vote = “certainly not” at the mean of the other covariates, I execute this margins-command:

margins i.female, predict(outcome(1)) atmeans // .0511123; .0596168
margins, dydx(i.female) predict(outcome(1)) atmeans // direct calculation of the MEM

Alternatively by hand:

lincom  _b[vote:age] * 37.62104 + _b[vote:1.female] * 1 + _b[vote:chfreq] * 7.235061 + _b[vote:edu_years] * 12.02012
di 1 / (1 + exp(3.333369-_b[cut1:_cons])) // .051112

lincom _b[vote:age] * 37.62104 + _b[vote:1.female] * 0 + _b[vote:chfreq] * 7.235061 + _b[vote:edu_years] * 12.02012 
di 1 / (1 + exp(3.496284-_b[cut1:_cons])) // .0596168

The marginal effect of being female on likelihood of voting at the mean of age, chfreq and edu_years then is -.0085045.

Average Marginal Effect
Instead of setting all covariates to their respective means, the average marginal effects leaves (besides female) all covariates like they were observed. The probability of voting = “certainly not” is then calculated assuming first every observation in the data-set is female and second every observation in the data-set is male. The average marginal effect is the difference in those predicted probabilities. The margins command offers the most convenient way to do this:

margins i.female, predict(outcome(1)) // .0583623; .0677809
margins, dydx(i.female) predict(outcome(1)) // direct calculation of the AME

If one wishes to do this by hand, follow these steps:
Leaving all other covariates like they were observed, I change the data in the sense, that everybody is female now and predict the probability of vote = “certainly not. Then I do the opposite, namely assuming every individual is male. The AME is the difference in those predicted probabilities:

clonevar female_backup = female // As I have to recode female, I create a copy of it

replace female = 1
predict y1, pr outcome(1)

replace female = 0
predict y0, pr outcome(1)

replace female = female_backup // I change female back to it's original values

sum y1 y0 
di .0583623 - .0677809 // -.0094186

The average marginal effects of being female on the likelihood on voting then is -.0094348.
In this example MEM (-.0085045) and AME (-.0094186) are very close together. This might not be the case if atmeans is not representative for the sample. (Example???)

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *