2
$\begingroup$

I am running a probit regression model to test my hypothesis. As one cannot deduce the magnitude of the effect of the independent variables on my dependent one, I have calculated the average marginal effects of my regression. My problem is, that there are AME in the output table (I used margins(regression) to calculate this) that are bigger than 1, for example, 1.2713. Does this mean that by an increase in my variable Y the chances of obtaining 1 for my X increase by 127%? Can this be? Or could there be a problem with how I operationalized by Y variable?

probitdd <- glm(escape ~ avg_polity2 + log(avg_gdp) + avg_durable + log(avg_totmipopula) + avg_accountability + log(avg_libdem), family = binomial(link = "probit"), data = coilp5dd)

================================================
                         Dependent variable:    
                     ---------------------------
                               escape           
------------------------------------------------
avg_polity2                     -0.2            
                                (0.4)           
                                                
log(avg_gdp)                    0.9*            
                                (0.5)           
                                                
avg_durable                     -0.02           
                               (0.02)           
                                                
log(avg_totmipopula)            -0.7*           
                                (0.4)           
                                                
avg_accountability              -3.9            
                                (3.3)           
                                                
avg_libdem                       4.7            
                                (8.1)           
                                                
Constant                         6.9            
                                (5.1)           
                                                
m2 <- margins(probitdd)
summary(m2)


AME

1   avg_accountability  -1.0469 

2   avg_durable -0.0059 

3   avg_gdp 0.0014
        
4   avg_libdem  1.2713  

5   avg_polity2 -0.0537 

6   avg_totmipopula -0.0000 
$\endgroup$
8
  • $\begingroup$ Can you show us the code? I suspect you are calculating the effects on the index function scale. You also try calculating it by hand using $\frac{1}{N}\sum_{i=1}^{N}\frac{\partial \Pr \left( y_{i}=1|x_{1},...,x_{k}\right) }{\partial x_{j}}=\frac{1}{N} \sum_{i=1}^{N}\phi \left( \alpha +\beta _{1}x_{1i}+...+\beta _{k}x_{ki}\right) \beta _{j},$ were $\phi()$ is the standard normal pdf. $\endgroup$
    – dimitriy
    Commented Dec 19, 2022 at 13:59
  • $\begingroup$ @dimitriy how can I best share my code? Just copy paste it? $\endgroup$
    – EmStaLo
    Commented Dec 19, 2022 at 14:31
  • $\begingroup$ Just put the probit and the AME part at the bottom of the question. $\endgroup$
    – dimitriy
    Commented Dec 19, 2022 at 14:36
  • $\begingroup$ @dimitriy I hope it works like that? $\endgroup$
    – EmStaLo
    Commented Dec 19, 2022 at 14:48
  • $\begingroup$ You need to include the commands you used to get those results. $\endgroup$
    – dimitriy
    Commented Dec 19, 2022 at 14:56

1 Answer 1

3
$\begingroup$

A clue as to what's happening is the presence of log()s around the names of the index function coefficients for the logged variables but their absence in the AMEs table below.

In a probit model, you have something like $$\mathbf{Pr}[y = 1 \vert \ln(x),z ] = \Phi(\alpha + \beta \cdot \ln(x) +\gamma \cdot z).$$

The marginal effect of $\ln x$ is $$ME_1 = \frac{\partial \mathbf{Pr}[y = 1 \vert \ln(x),z ]}{\partial \ln x}=\varphi(\alpha + \beta \cdot \ln(x) +\gamma \cdot z) \cdot \beta$$

This is constrained to be in [0,1].

The marginal effect of $x$ when you log it is $$ME_2 = \frac{\partial \mathbf{Pr}[y = 1 \vert \ln(x),z ]}{\partial x}=\varphi(\alpha + \beta \cdot \ln(x) +\gamma \cdot z) \cdot \beta \cdot \frac{1}{x}$$ since $\frac{d \ln(x)}{dx} = \frac{1}{x}$

Given the way you specified the index function, R is helpfully calculating the average of the second quantity for you (though the $ME_1$ is reasonable too, more below). It's the multiplication by $\frac{1}{x}$ that is causing the out-of-bounds issue. I would wager that $\ln(avg_libdem)$ tends to be less than one.

You can interpret $AME_1$ as an semi-elasticity since $$\frac{\partial \mathbf{Pr}[y = 1 \vert \ln(x),z ]}{\partial x}=\varphi(\alpha + \beta \cdot \ln(x) +\gamma \cdot z) \cdot \beta \cdot \frac{1}{x}$$ can be rearranged as

$$\frac{\partial \mathbf{Pr}[y = 1 \vert \ln(x),z ]}{100 \cdot\frac{\partial x}{x}}=\frac{1}{100} \cdot \varphi(\alpha + \beta \cdot \ln(x) +\gamma \cdot z) \cdot \beta$$

The numerator is a change in probability. The denominator is a 1% change in x. Note that without scaling by $\frac{1}{100}$, you would have a $100\%$ change in the denominator, and since derivatives are approximations of a small change, you can get very large effects when you consider a doubling.

So 1.2713 can be interpreted as the model saying that a 1% change in avg_libdem is associated with a $\frac{1.2713}{100}=.012713$ percentage point increase in the probability of escape (or 1.27 percentage points on a [0,100] scale). I like dividing since the other MEs are on the [0,1] scale to keep it apples-to-apples.

Personally, I also find the $ME_1$ more intuitive, so I would trick R by logging myself or I would just not log RHS variables (unless there was some good reason to do so, like being consistent with previous literature).

Here's some R code showing this calculation on another dataset:

> library(foreign)
> library(margins)
> auto <- read.dta("https://www.stata-press.com/data/r12/auto.dta")
> auto$log.price <- log(auto$price)
> m1 <- glm(foreign ~ log.price + mpg, data=auto, family = binomial(link="probit"))
> (margins(m1))
Average marginal effects
glm(formula = foreign ~ log.price + mpg, family = binomial(link = "probit"),     data = auto)

 log.price     mpg
    0.4009 0.04127
> (AME_price_m1 <- mean(dnorm(predict(m2, type = c("link")))*m2$coefficients['log.price']*1/auto$price))
[1] 7.310459e-05
> m2 <- glm(foreign ~ log(price) + mpg, data=auto, family = binomial(link="probit"))
> (margins(m2))
Average marginal effects
glm(formula = foreign ~ log(price) + mpg, family = binomial(link = "probit"),     data = auto)

    price     mpg
 7.31e-05 0.04127

Here 0.0000731 means that a $1 increase in price is associated with an infinitesimal change in the probability of foreign manufacture, on a [0,1] scale.

And 0.4009 means that $1\%$ increase in price is associated with an $\frac{0.4009}{100}=0.004$ increase in the probability of being foreign on a [0,1] scale. Or a doubling of price is associated with 40 percentage point increase on a [0,100] scale.

$\endgroup$
2
  • $\begingroup$ Thank you very much for this very very helpful answer! I really appreciate it!! $\endgroup$
    – EmStaLo
    Commented Dec 19, 2022 at 19:21
  • $\begingroup$ @EmStaLo No need to thank me. Just upvote and/or pick it as the answer by clicking on the check mark on the left. $\endgroup$
    – dimitriy
    Commented Dec 19, 2022 at 21:49

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