The binary logit model can be interpreted in three ways:
y* metric
Odds ratios
Predicted probabilities
The binary logit or probit model can be interpreted in terms of y*
This is uncommon in typical applications of the models
It is not the method I recommend/prefer
But useful to understand and used sometimes (e.g., in structural equation modeling [SEM])
Also, useful for ordinal logit/probit models (more later)
The coefficients can be directly interpreted in terms of y* . Remember the model is linear in the y* metric
For a unit change in xk , y* is expected to change by βk units, holding all other variables constant
use "https://tdmize.github.io/data/data/cda_anes" , clear
(American National Election Study 2020 - Pre-election | CDA | 2021-09-26)
drop if missing (age, hhincome, woman, lgb, race4, ///
edyrs, relimport, wrongtrack)
(948 observations deleted)
logit vote_trump hhincome edyrs i.woman i.lgb i.race4 ///
i.relimport i.wrongtrack c.age##c.age
Iteration 0: Log likelihood = -4658.8753
Iteration 1: Log likelihood = -2888.204
Iteration 2: Log likelihood = -2862.3173
Iteration 3: Log likelihood = -2862.0466
Iteration 4: Log likelihood = -2862.0463
Logistic regression Number of obs = 6,857
LR chi2(14) = 3593.66
Prob > chi2 = 0.0000
Log likelihood = -2862.0463 Pseudo R2 = 0.3857
-------------------------------------------------------------------------------
vote_trump | Coefficient Std. err. z P>|z| [95% conf. interval]
--------------+----------------------------------------------------------------
hhincome | -0.000 0.001 -0.897 0.370 -0.002 0.001
edyrs | -0.140 0.015 -9.539 0.000 -0.169 -0.111
|
woman |
Woman | -0.355 0.067 -5.289 0.000 -0.486 -0.223
|
lgb |
LGB | -1.164 0.176 -6.607 0.000 -1.510 -0.819
|
race4 |
Black | -2.928 0.188 -15.543 0.000 -3.297 -2.559
Hispanic | -1.185 0.126 -9.382 0.000 -1.433 -0.938
Other | -0.648 0.120 -5.419 0.000 -0.883 -0.414
|
relimport |
2. Very im.. | -0.598 0.097 -6.170 0.000 -0.788 -0.408
3. Moderat.. | -0.950 0.097 -9.817 0.000 -1.140 -0.760
4. A littl.. | -1.200 0.111 -10.841 0.000 -1.417 -0.983
5. Not imp.. | -1.949 0.107 -18.279 0.000 -2.158 -1.740
|
wrongtrack |
Wrong track | -3.308 0.098 -33.781 0.000 -3.500 -3.116
age | 0.027 0.013 2.129 0.033 0.002 0.053
|
c.age#c.age | -0.000 0.000 -2.509 0.012 -0.001 -0.000
|
_cons | 5.268 0.385 13.692 0.000 4.514 6.023
-------------------------------------------------------------------------------
library (haven) # import Stata data and labels
library (dplyr) # data manipulation
anes <- read_dta ("https://tdmize.github.io/data/data/cda_anes.dta" )
# Drop any missing data on the model IVs
anes <- anes[complete.cases (anes[c ("age" , "hhincome" , "woman" , "lgb" , "race4" ,
"edyrs" , "relimport" , "wrongtrack" )]), ]
# Treat binary/nominal variables as factors using their value labels
anes <- anes |>
mutate (woman = as_factor (woman), lgb = as_factor (lgb), race4 = as_factor (race4),
relimport = as_factor (relimport), wrongtrack = as_factor (wrongtrack)) |>
droplevels ()
logitmod <- glm (vote_trump ~ hhincome + edyrs + woman + lgb + race4 + relimport +
wrongtrack + age + I (age^ 2 ), family = binomial (link = "logit" ), data = anes)
summary (logitmod)
Call:
glm(formula = vote_trump ~ hhincome + edyrs + woman + lgb + race4 +
relimport + wrongtrack + age + I(age^2), family = binomial(link = "logit"),
data = anes)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.2684570 0.3847783 13.692 < 2e-16 ***
hhincome -0.0004911 0.0005477 -0.897 0.3698
edyrs -0.1401283 0.0146899 -9.539 < 2e-16 ***
womanWoman -0.3547981 0.0670774 -5.289 1.23e-07 ***
lgbLGB -1.1642765 0.1762055 -6.607 3.91e-11 ***
race4Black -2.9277400 0.1883485 -15.544 < 2e-16 ***
race4Hispanic -1.1850771 0.1263068 -9.383 < 2e-16 ***
race4Other -0.6484143 0.1196631 -5.419 6.00e-08 ***
relimport2. Very important -0.5977685 0.0968775 -6.170 6.81e-10 ***
relimport3. Moderately important -0.9499901 0.0967647 -9.818 < 2e-16 ***
relimport4. A little important -1.2000537 0.1106925 -10.841 < 2e-16 ***
relimport5. Not important at all -1.9488242 0.1066167 -18.279 < 2e-16 ***
wrongtrackWrong track -3.3081474 0.0979287 -33.781 < 2e-16 ***
age 0.0274182 0.0128806 2.129 0.0333 *
I(age^2) -0.0003113 0.0001241 -2.509 0.0121 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9317.8 on 6856 degrees of freedom
Residual deviance: 5724.1 on 6842 degrees of freedom
(475 observations deleted due to missingness)
AIC: 5754.1
Number of Fisher Scoring iterations: 5
Each additional year of education leads to a 0.140 decrease in y* (propensity to vote for Trump)
Women are about 0.35 lower on y* (propensity to vote for Trump) than men
Example y* interpretations
“The problem with this interpretation is that the variance of y* is unknown, so the meaning of a change of βk in y* is unclear.” (Long 1997 p.70)
Results from a binary probit model illustrate Long’s point:
probit vote_trump hhincome edyrs i.woman i.lgb i.race4 ///
i.relimport i.wrongtrack c.age##c.age
Iteration 0: Log likelihood = -4658.8753
Iteration 1: Log likelihood = -2884.606
Iteration 2: Log likelihood = -2872.7891
Iteration 3: Log likelihood = -2872.7698
Iteration 4: Log likelihood = -2872.7698
Probit regression Number of obs = 6,857
LR chi2(14) = 3572.21
Prob > chi2 = 0.0000
Log likelihood = -2872.7698 Pseudo R2 = 0.3834
-------------------------------------------------------------------------------
vote_trump | Coefficient Std. err. z P>|z| [95% conf. interval]
--------------+----------------------------------------------------------------
hhincome | -0.000 0.000 -1.085 0.278 -0.001 0.000
edyrs | -0.078 0.008 -9.444 0.000 -0.095 -0.062
|
woman |
Woman | -0.197 0.038 -5.170 0.000 -0.272 -0.122
|
lgb |
LGB | -0.623 0.092 -6.798 0.000 -0.802 -0.443
|
race4 |
Black | -1.531 0.089 -17.253 0.000 -1.704 -1.357
Hispanic | -0.642 0.069 -9.285 0.000 -0.778 -0.507
Other | -0.348 0.067 -5.225 0.000 -0.479 -0.218
|
relimport |
2. Very im.. | -0.346 0.056 -6.152 0.000 -0.456 -0.236
3. Moderat.. | -0.543 0.056 -9.713 0.000 -0.653 -0.433
4. A littl.. | -0.687 0.063 -10.831 0.000 -0.811 -0.563
5. Not imp.. | -1.091 0.059 -18.475 0.000 -1.206 -0.975
|
wrongtrack |
Wrong track | -1.897 0.050 -37.652 0.000 -1.995 -1.798
age | 0.015 0.007 2.096 0.036 0.001 0.030
|
c.age#c.age | -0.000 0.000 -2.399 0.016 -0.000 -0.000
|
_cons | 2.952 0.213 13.854 0.000 2.534 3.370
-------------------------------------------------------------------------------
probitmod <- glm (vote_trump ~ hhincome + edyrs + woman + lgb + race4 + relimport +
wrongtrack + age + I (age^ 2 ), family = binomial (link = "probit" ), data = anes)
summary (probitmod)
Call:
glm(formula = vote_trump ~ hhincome + edyrs + woman + lgb + race4 +
relimport + wrongtrack + age + I(age^2), family = binomial(link = "probit"),
data = anes)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.952e+00 2.148e-01 13.744 < 2e-16 ***
hhincome -3.339e-04 3.083e-04 -1.083 0.2787
edyrs -7.832e-02 8.283e-03 -9.456 < 2e-16 ***
womanWoman -1.971e-01 3.806e-02 -5.179 2.23e-07 ***
lgbLGB -6.225e-01 9.161e-02 -6.796 1.08e-11 ***
race4Black -1.531e+00 9.049e-02 -16.913 < 2e-16 ***
race4Hispanic -6.424e-01 6.966e-02 -9.222 < 2e-16 ***
race4Other -3.483e-01 6.718e-02 -5.185 2.16e-07 ***
relimport2. Very important -3.461e-01 5.618e-02 -6.161 7.22e-10 ***
relimport3. Moderately important -5.431e-01 5.586e-02 -9.722 < 2e-16 ***
relimport4. A little important -6.869e-01 6.343e-02 -10.830 < 2e-16 ***
relimport5. Not important at all -1.091e+00 5.910e-02 -18.453 < 2e-16 ***
wrongtrackWrong track -1.897e+00 5.042e-02 -37.618 < 2e-16 ***
age 1.524e-02 7.296e-03 2.089 0.0367 *
I(age^2) -1.688e-04 7.045e-05 -2.396 0.0166 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 9317.8 on 6856 degrees of freedom
Residual deviance: 5745.5 on 6842 degrees of freedom
(475 observations deleted due to missingness)
AIC: 5775.5
Number of Fisher Scoring iterations: 5
y* standardized interpretations
One solution is to y* standardize the coefficient; i.e. put it in standard deviation of y* units
First, need to calculate the variance/standard deviation of y*
\[\widehat{Var}(y^{*}) = \widehat{\boldsymbol{\beta}}' Var(\mathbf{x}) \widehat{\boldsymbol{\beta}} + Var(\varepsilon)\]
Where the variance of the error is assumed (1 in probit; π2 /3 in logit)
Then, put coefficient in y* standard deviation units:
\[\beta_{k}^{Sy*} = \frac{\beta_{k}}{\sigma_{y*}}\]
For a unit increase in xk , y* is expected to increase by \(\boldsymbol{\beta_{k}^{Sy*}}\) standard deviations, holding all other variables constant
y* standardized coefficients
(results logitmod are active now)
logit (N=6857): Unstandardized and standardized estimates
Observed SD: 0.4932
Latent SD: 2.7871
-------------------------------------------------------------------------------
| b z P>|z| bStdX bStdY bStdXY SDofX
-------------+-----------------------------------------------------------------
hhincome | -0.0005 -0.897 0.370 -0.033 -0.000 -0.012 67.851
edyrs | -0.1401 -9.539 0.000 -0.349 -0.050 -0.125 2.493
|
woman |
Woman | -0.3548 -5.289 0.000 -0.177 -0.127 -0.063 0.499
|
lgb |
LGB | -1.1643 -6.607 0.000 -0.290 -0.418 -0.104 0.249
|
race4 |
Black | -2.9277 -15.543 0.000 -0.839 -1.050 -0.301 0.287
Hispanic | -1.1851 -9.382 0.000 -0.335 -0.425 -0.120 0.283
Other | -0.6484 -5.419 0.000 -0.182 -0.233 -0.065 0.281
|
relimport |
2. Very i.. | -0.5978 -6.170 0.000 -0.235 -0.214 -0.084 0.393
3. Modera.. | -0.9500 -9.817 0.000 -0.375 -0.341 -0.135 0.395
4. A litt.. | -1.2001 -10.841 0.000 -0.406 -0.431 -0.146 0.338
5. Not im.. | -1.9488 -18.279 0.000 -0.802 -0.699 -0.288 0.412
|
wrongtrack |
Wrong track | -3.3081 -33.781 0.000 -1.448 -1.187 -0.520 0.438
age | 0.0274 2.129 0.033 0.468 0.010 0.168 17.075
|
c.age#c.age | -0.0003 -2.509 0.012 -0.548 -0.000 -0.197 1761.316
|
constant | 5.2685 13.692 0.000 . . . .
-------------------------------------------------------------------------------
(results probitmod are active now)
probit (N=6857): Unstandardized and standardized estimates
Observed SD: 0.4932
Latent SD: 1.5524
-------------------------------------------------------------------------------
| b z P>|z| bStdX bStdY bStdXY SDofX
-------------+-----------------------------------------------------------------
hhincome | -0.0003 -1.085 0.278 -0.023 -0.000 -0.015 67.851
edyrs | -0.0783 -9.444 0.000 -0.195 -0.050 -0.126 2.493
|
woman |
Woman | -0.1971 -5.170 0.000 -0.098 -0.127 -0.063 0.499
|
lgb |
LGB | -0.6225 -6.798 0.000 -0.155 -0.401 -0.100 0.249
|
race4 |
Black | -1.5305 -17.253 0.000 -0.439 -0.986 -0.283 0.287
Hispanic | -0.6424 -9.285 0.000 -0.182 -0.414 -0.117 0.283
Other | -0.3483 -5.225 0.000 -0.098 -0.224 -0.063 0.281
|
relimport |
2. Very i.. | -0.3461 -6.152 0.000 -0.136 -0.223 -0.088 0.393
3. Modera.. | -0.5431 -9.713 0.000 -0.214 -0.350 -0.138 0.395
4. A litt.. | -0.6869 -10.831 0.000 -0.232 -0.442 -0.150 0.338
5. Not im.. | -1.0906 -18.475 0.000 -0.449 -0.702 -0.289 0.412
|
wrongtrack |
Wrong track | -1.8966 -37.652 0.000 -0.830 -1.222 -0.535 0.438
age | 0.0152 2.096 0.036 0.260 0.010 0.168 17.075
|
c.age#c.age | -0.0002 -2.399 0.016 -0.297 -0.000 -0.192 1761.316
|
constant | 2.9520 13.854 0.000 . . . .
-------------------------------------------------------------------------------
# Latent SD: variance of the linear predictor + variance of the error
sd_ystar_logit <- sqrt (var (predict (logitmod, type = "link" )) + pi^ 2 / 3 )
sd_ystar_probit <- sqrt (var (predict (probitmod, type = "link" )) + 1 )
c (logit = sd_ystar_logit, probit = sd_ystar_probit)
logit probit
2.787081 1.552388
# y* standardized coefficients
data.frame (b_logit = coef (logitmod), bStdY_logit = coef (logitmod) / sd_ystar_logit,
b_probit = coef (probitmod), bStdY_probit = coef (probitmod) / sd_ystar_probit)[- 1 , ] |>
round (4 )
b_logit bStdY_logit b_probit bStdY_probit
hhincome -0.0005 -0.0002 -0.0003 -0.0002
edyrs -0.1401 -0.0503 -0.0783 -0.0505
womanWoman -0.3548 -0.1273 -0.1971 -0.1270
lgbLGB -1.1643 -0.4177 -0.6225 -0.4010
race4Black -2.9277 -1.0505 -1.5305 -0.9859
race4Hispanic -1.1851 -0.4252 -0.6424 -0.4138
race4Other -0.6484 -0.2326 -0.3483 -0.2244
relimport2. Very important -0.5978 -0.2145 -0.3461 -0.2230
relimport3. Moderately important -0.9500 -0.3409 -0.5431 -0.3498
relimport4. A little important -1.2001 -0.4306 -0.6869 -0.4425
relimport5. Not important at all -1.9488 -0.6992 -1.0906 -0.7025
wrongtrackWrong track -3.3081 -1.1870 -1.8966 -1.2217
age 0.0274 0.0098 0.0152 0.0098
I(age^2) -0.0003 -0.0001 -0.0002 -0.0001
y* coefficients differ noticeably; y* standardized coefficients are virtually identical in both logit and probit model
Each additional year of education is associated with a 0.05 standard deviation decrease in the propensity to vote for Trump
Compared to men, women are 0.127 standard deviations lower on propensity to vote for Trump
Advice on y* interpretations
y* interpretations only really make sense if you think an underlying latent continuum exists and you can name and talk about it cogently
Standardized coefficients are useful to facilitate comparisons across models: all are on the same standard deviation scale
If you are going to use y* interpretations, I recommend y* standardized coefficients
Ultimately, the interpretations are not very satisfying as the substantive magnitude of an effect is unclear—even with y* standardized coefficients
Back to top