File gamma_estimation.py

Michel Bierlaire, EPFL Fri Jul 25 2025, 16:36:50 Estimation of a MDCEV model with the “gamma_profile” specification.

from IPython.core.display_functions import display

import biogeme.biogeme_logging as blog
from biogeme.results_processing import get_pandas_estimated_parameters
from gamma_specification import the_gamma_profile
from process_data import database, number_chosen
from specification import consumed_quantities

# %
logger = blog.get_screen_logger(level=blog.INFO)
logger.info('Example: gamma profile')

# %
results = the_gamma_profile.estimate_parameters(
    database=database,
    number_of_chosen_alternatives=number_chosen,
    consumed_quantities=consumed_quantities,
)
Example: gamma profile
Default values of the Biogeme parameters are used.
File biogeme.toml has been created
*** Initial values of the parameters are obtained from the file __gamma_profile.iter
Cannot read file __gamma_profile.iter. Statement is ignored.
Starting values for the algorithm: {}
As the model is not too complex, we activate the calculation of second derivatives. To change this behavior, modify the algorithm to "simple_bounds" in the TOML file.
Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds]
** Optimization: Newton with trust region for simple bounds
Iter.     Function    Relgrad   Radius      Rho
    0        2e+04       0.19      0.5     -1.7    -
    1        2e+04       0.19     0.25    0.017    -
    2      1.9e+04       0.24     0.25     0.59    +
    3      1.9e+04       0.19     0.25     0.63    +
    4      1.8e+04      0.041      2.5        1   ++
    5      1.8e+04      0.041      1.2    -0.78    -
    6      1.8e+04       0.07      1.2     0.83    +
    7      1.7e+04      0.021      1.2     0.45    +
    8      1.7e+04      0.016       12     0.98   ++
    9      1.7e+04      0.019  1.2e+02      1.2   ++
   10      1.7e+04     0.0098  1.2e+03      1.2   ++
   11      1.7e+04     0.0077  1.2e+04      1.2   ++
   12      1.7e+04     0.0018  1.2e+05      1.1   ++
   13      1.7e+04    0.00058  1.2e+06     0.99   ++
   14      1.7e+04     0.0049  1.2e+07     0.97   ++
   15      1.7e+04    0.00026  1.2e+08        1   ++
   16      1.7e+04    0.00018  1.2e+09        1   ++
   17      1.7e+04    0.00021    1e+10        1   ++
   18      1.7e+04     0.0002    1e+10        1   ++
   19      1.7e+04    0.00017    1e+10        1   ++
   20      1.7e+04    0.00012    1e+10        1   ++
   21      1.7e+04    0.00013    1e+10        1   ++
   22      1.7e+04    0.00018    1e+10        1   ++
   23      1.7e+04    5.2e-05    1e+10        1   ++
   24      1.7e+04    4.5e-05    1e+10        1   ++
   25      1.7e+04    3.3e-05    1e+10        1   ++
   26      1.7e+04    3.7e-05    1e+10        1   ++
   27      1.7e+04    2.5e-05    1e+10        1   ++
   28      1.7e+04    2.8e-05    1e+10        1   ++
   29      1.7e+04    1.8e-05    1e+10        1   ++
   30      1.7e+04    2.1e-05    1e+10        1   ++
   31      1.7e+04    1.3e-05    1e+10        1   ++
   32      1.7e+04    1.7e-05    1e+10        1   ++
   33      1.7e+04    9.5e-06    1e+10        1   ++
   34      1.7e+04    1.2e-05    1e+10        1   ++
   35      1.7e+04    6.8e-06    1e+10        1   ++
   36      1.7e+04    7.6e-06    1e+10        1   ++
   37      1.7e+04    4.9e-06    1e+10        1   ++
Optimization algorithm has converged.
Relative gradient: 4.8904578370420445e-06
Cause of termination: Relative gradient = 4.9e-06 <= 6.1e-06
Number of function evaluations: 109
Number of gradient evaluations: 71
Number of hessian evaluations: 35
Algorithm: Newton with trust region for simple bound constraints
Number of iterations: 38
Proportion of Hessian calculation: 35/35 = 100.0%
Optimization time: 0:00:01.732137
Calculate second derivatives and BHHH
File gamma_profile.html has been generated.
File gamma_profile.yaml has been generated.
print(results.short_summary())
Results for model gamma_profile
Nbr of parameters:              26
Sample size:                    4413
Excluded data:                  0
Final log likelihood:           -16989.22
Akaike Information Criterion:   34030.45
Bayesian Information Criterion: 34196.65

Get the results in a pandas table

pandas_results = get_pandas_estimated_parameters(
    estimation_results=results,
)
display(pandas_results)
{'Estimated parameters':                           Name      Value  ...  Robust t-stat.  Robust p-value
0                        scale   3.831041  ...       17.009966    0.000000e+00
1                 cte_shopping  -0.736251  ...      -13.545542    0.000000e+00
2        metropolitan_shopping   0.061980  ...        2.763032    5.726714e-03
3                male_shopping   0.097870  ...        5.470635    4.484248e-08
4           age_15_40_shopping   0.075520  ...        3.822179    1.322777e-04
5              spouse_shopping   0.062750  ...        3.784934    1.537493e-04
6            employed_shopping   0.046175  ...        2.722006    6.488705e-03
7               gamma_shopping   3.494132  ...       12.111029    0.000000e+00
8              cte_socializing  -0.508505  ...      -13.551799    0.000000e+00
9   number_members_socializing   0.016612  ...        4.053601    5.043514e-05
10            male_socializing   0.126949  ...        8.501752    0.000000e+00
11       age_41_60_socializing  -0.064567  ...       -3.481856    4.979521e-04
12        bachelor_socializing  -0.050956  ...       -3.692338    2.222017e-04
13          sunday_socializing   0.096293  ...        6.727405    1.727152e-11
14           gamma_socializing  11.098233  ...       10.835209    0.000000e+00
15              cte_recreation  -0.836547  ...      -14.796618    0.000000e+00
16   number_members_recreation   0.019841  ...        3.591707    3.285188e-04
17             male_recreation   0.218933  ...       10.818185    0.000000e+00
18        age_15_40_recreation   0.120940  ...        5.810520    6.227900e-09
19           spouse_recreation  -0.065608  ...       -3.999169    6.356529e-05
20            gamma_recreation  15.395488  ...       11.794602    0.000000e+00
21          age_41_60_personal  -0.055063  ...       -2.816263    4.858594e-03
22           bachelor_personal  -0.045510  ...       -2.977941    2.901917e-03
23              white_personal  -0.088410  ...       -5.489020    4.041700e-08
24             sunday_personal   0.090637  ...        6.020147    1.742586e-09
25              gamma_personal   1.562369  ...       12.213517    0.000000e+00

[26 rows x 5 columns]}

Total running time of the script: (0 minutes 3.931 seconds)

Gallery generated by Sphinx-Gallery