Discrete Choice Models Overview
1 2 3 | <span class = "kn" > from < / span> <span class = "nn" >__future__< / span> <span class = "kn" > import < / span> <span class = "n" >print_function< / span> <span class = "kn" > import < / span> <span class = "nn" >numpy< / span> <span class = "kn" >as< / span> <span class = "nn" >np< / span> <span class = "kn" > import < / span> <span class = "nn" >statsmodels.api< / span> <span class = "kn" >as< / span> <span class = "nn" >sm< / span> |
Data
Load data from Spector and Mazzeo (1980). Examples follow Greene's Econometric Analysis Ch. 21 (5th Edition).
1 2 | <span class = "n" >spector_data< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >spector< / span><span class = "o" >.< / span><span class = "n" >load< / span><span class = "p" >()< / span> <span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >add_constant< / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >,< / span> <span class = "n" >prepend< / span><span class = "o" > = < / span><span class = "bp" > False < / span><span class = "p" >)< / span> |
Inspect the data:
1 2 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >[:< / span><span class = "mi" > 5 < / span><span class = "p" >,:])< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >[:< / span><span class = "mi" > 5 < / span><span class = "p" >])< / span> |
Linear Probability Model (OLS)
1 2 3 | <span class = "n" >lpm_mod< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >OLS< / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >)< / span> <span class = "n" >lpm_res< / span> <span class = "o" > = < / span> <span class = "n" >lpm_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "s" > 'Parameters: ' < / span><span class = "p" >,< / span> <span class = "n" >lpm_res< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >[:< / span><span class = "o" > - < / span><span class = "mi" > 1 < / span><span class = "p" >])< / span> |
Logit Model
1 2 3 | <span class = "n" >logit_mod< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >Logit< / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >)< / span> <span class = "n" >logit_res< / span> <span class = "o" > = < / span> <span class = "n" >logit_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >(< / span><span class = "n" >disp< / span><span class = "o" > = < / span><span class = "mi" > 0 < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "s" > 'Parameters: ' < / span><span class = "p" >,< / span> <span class = "n" >logit_res< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >)< / span> |
Marginal Effects
1 2 | <span class = "n" >margeff< / span> <span class = "o" > = < / span> <span class = "n" >logit_res< / span><span class = "o" >.< / span><span class = "n" >get_margeff< / span><span class = "p" >()< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >margeff< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
As in all the discrete data models presented below, we can print a nice summary of results:
1 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >logit_res< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
Probit Model
1 2 3 4 5 6 | <span class = "n" >probit_mod< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >Probit< / span><span class = "p" >(< / span><span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >spector_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >)< / span> <span class = "n" >probit_res< / span> <span class = "o" > = < / span> <span class = "n" >probit_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "n" >probit_margeff< / span> <span class = "o" > = < / span> <span class = "n" >probit_res< / span><span class = "o" >.< / span><span class = "n" >get_margeff< / span><span class = "p" >()< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "s" > 'Parameters: ' < / span><span class = "p" >,< / span> <span class = "n" >probit_res< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "s" > 'Marginal effects: ' < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >probit_margeff< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
Multinomial Logit
Load data from the American National Election Studies:
1 2 3 | <span class = "n" >anes_data< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >anes96< / span><span class = "o" >.< / span><span class = "n" >load< / span><span class = "p" >()< / span> <span class = "n" >anes_exog< / span> <span class = "o" > = < / span> <span class = "n" >anes_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span> <span class = "n" >anes_exog< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >add_constant< / span><span class = "p" >(< / span><span class = "n" >anes_exog< / span><span class = "p" >,< / span> <span class = "n" >prepend< / span><span class = "o" > = < / span><span class = "bp" > False < / span><span class = "p" >)< / span> |
Inspect the data:
1 2 | <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >anes_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >[:< / span><span class = "mi" > 5 < / span><span class = "p" >,:])< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >anes_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >[:< / span><span class = "mi" > 5 < / span><span class = "p" >])< / span> |
Fit MNL model:
1 2 3 | <span class = "n" >mlogit_mod< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >MNLogit< / span><span class = "p" >(< / span><span class = "n" >anes_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >anes_exog< / span><span class = "p" >)< / span> <span class = "n" >mlogit_res< / span> <span class = "o" > = < / span> <span class = "n" >mlogit_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >()< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >mlogit_res< / span><span class = "o" >.< / span><span class = "n" >params< / span><span class = "p" >)< / span> |
Poisson
Load the Rand data. Note that this example is similar to Cameron and Trivedi's Microeconometrics
Table 20.5, but it is slightly different because of minor changes in the data.
1 2 3 | <span class = "n" >rand_data< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >datasets< / span><span class = "o" >.< / span><span class = "n" >randhie< / span><span class = "o" >.< / span><span class = "n" >load< / span><span class = "p" >()< / span> <span class = "n" >rand_exog< / span> <span class = "o" > = < / span> <span class = "n" >rand_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "o" >.< / span><span class = "n" >view< / span><span class = "p" >(< / span><span class = "nb" > float < / span><span class = "p" >)< / span><span class = "o" >.< / span><span class = "n" >reshape< / span><span class = "p" >(< / span><span class = "nb" > len < / span><span class = "p" >(< / span><span class = "n" >rand_data< / span><span class = "o" >.< / span><span class = "n" >exog< / span><span class = "p" >),< / span> <span class = "o" > - < / span><span class = "mi" > 1 < / span><span class = "p" >)< / span> <span class = "n" >rand_exog< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >add_constant< / span><span class = "p" >(< / span><span class = "n" >rand_exog< / span><span class = "p" >,< / span> <span class = "n" >prepend< / span><span class = "o" > = < / span><span class = "bp" > False < / span><span class = "p" >)< / span> |
Fit Poisson model:
1 2 3 | <span class = "n" >poisson_mod< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >Poisson< / span><span class = "p" >(< / span><span class = "n" >rand_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >rand_exog< / span><span class = "p" >)< / span> <span class = "n" >poisson_res< / span> <span class = "o" > = < / span> <span class = "n" >poisson_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >(< / span><span class = "n" >method< / span><span class = "o" > = < / span><span class = "s" > "newton" < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >poisson_res< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
Negative Binomial
The negative binomial model gives slightly different results.
1 2 3 | <span class = "n" >mod_nbin< / span> <span class = "o" > = < / span> <span class = "n" >sm< / span><span class = "o" >.< / span><span class = "n" >NegativeBinomial< / span><span class = "p" >(< / span><span class = "n" >rand_data< / span><span class = "o" >.< / span><span class = "n" >endog< / span><span class = "p" >,< / span> <span class = "n" >rand_exog< / span><span class = "p" >)< / span> <span class = "n" >res_nbin< / span> <span class = "o" > = < / span> <span class = "n" >mod_nbin< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >(< / span><span class = "n" >disp< / span><span class = "o" > = < / span><span class = "bp" > False < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >res_nbin< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
Alternative solvers
The default method for fitting discrete data MLE models is Newton-Raphson. You can use other solvers by using the method
argument:
1 2 | <span class = "n" >mlogit_res< / span> <span class = "o" > = < / span> <span class = "n" >mlogit_mod< / span><span class = "o" >.< / span><span class = "n" >fit< / span><span class = "p" >(< / span><span class = "n" >method< / span><span class = "o" > = < / span><span class = "s" > 'bfgs' < / span><span class = "p" >,< / span> <span class = "n" >maxiter< / span><span class = "o" > = < / span><span class = "mi" > 100 < / span><span class = "p" >)< / span> <span class = "k" > print < / span><span class = "p" >(< / span><span class = "n" >mlogit_res< / span><span class = "o" >.< / span><span class = "n" >summary< / span><span class = "p" >())< / span> |
Please login to continue.