Note
Go to the end to download the full example code.
File generalized_estimation.py
Michel Bierlaire, EPFL Fri Jul 25 2025, 16:51:40
Estimation of a MDCEV model with the “generalized translated utility” specification.
from IPython.core.display_functions import display
import biogeme.biogeme_logging as blog
from biogeme.results_processing import get_pandas_estimated_parameters
from generalized_specification import the_generalized
from process_data import database, number_chosen
from specification import consumed_quantities
# %
logger = blog.get_screen_logger(level=blog.INFO)
logger.info('Example: generalized translated utility')
# %
results = the_generalized.estimate_parameters(
database=database,
number_of_chosen_alternatives=number_chosen,
consumed_quantities=consumed_quantities,
tolerance=4e-5,
)
Example: generalized translated utility
Biogeme parameters read from biogeme.toml.
*** Initial values of the parameters are obtained from the file __generalized.iter
Cannot read file __generalized.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 1.8e+04 0.37 10 0.91 ++
1 1.8e+04 0.37 0.4 -2.1 -
2 1.8e+04 0.27 0.4 0.32 +
3 1.8e+04 0.42 0.4 0.14 +
4 1.7e+04 0.068 4 0.94 ++
5 1.7e+04 0.068 1.1 -12 -
6 1.7e+04 0.068 0.53 -1.4 -
7 1.7e+04 0.058 0.53 0.22 +
8 1.7e+04 0.013 5.3 1.1 ++
9 1.7e+04 0.013 0.48 0.04 -
10 1.7e+04 0.022 4.8 0.9 ++
11 1.7e+04 0.0076 48 0.99 ++
12 1.7e+04 0.02 4.8e+02 1.2 ++
13 1.7e+04 0.0016 4.8e+03 1 ++
14 1.7e+04 0.01 4.8e+04 1.2 ++
15 1.7e+04 0.00087 4.8e+05 1 ++
16 1.7e+04 0.0013 4.8e+06 1.3 ++
17 1.7e+04 0.00062 4.8e+07 1 ++
18 1.7e+04 0.0078 4.8e+08 1.2 ++
19 1.7e+04 0.00058 4.8e+09 1.1 ++
20 1.7e+04 0.0025 4.8e+09 0.87 +
21 1.7e+04 0.00089 1e+10 1 ++
22 1.7e+04 0.0017 1e+10 1.1 ++
23 1.7e+04 0.00062 1e+10 1 ++
24 1.7e+04 0.0019 1e+10 1 ++
25 1.7e+04 0.00029 1e+10 0.94 ++
26 1.7e+04 0.0003 1e+10 1.1 ++
27 1.7e+04 0.00027 1e+10 0.9 +
28 1.7e+04 0.00025 1e+10 1.1 ++
29 1.7e+04 0.00025 1e+10 0.89 +
30 1.7e+04 0.00024 1e+10 1.1 ++
31 1.7e+04 0.0015 1e+10 1.3 ++
32 1.7e+04 0.00015 1e+10 0.99 ++
33 1.7e+04 0.00033 1e+10 1 ++
34 1.7e+04 0.00013 1e+10 1 ++
35 1.7e+04 0.00014 1e+10 1 ++
36 1.7e+04 0.00014 1e+10 0.96 ++
37 1.7e+04 0.00014 1e+10 1 ++
38 1.7e+04 0.00014 1e+10 0.97 ++
39 1.7e+04 0.00014 1e+10 1 ++
40 1.7e+04 0.00014 1e+10 0.97 ++
41 1.7e+04 0.00013 1e+10 1 ++
42 1.7e+04 0.00014 1e+10 0.97 ++
43 1.7e+04 0.00013 1e+10 1 ++
44 1.7e+04 0.00015 1e+10 0.97 ++
45 1.7e+04 0.00013 1e+10 1 ++
46 1.7e+04 0.00012 1e+10 1 ++
47 1.7e+04 0.00012 1.1 -3 -
48 1.7e+04 0.0014 1.1 0.44 +
49 1.7e+04 0.00013 11 1 ++
50 1.7e+04 0.00011 1.1e+02 1 ++
51 1.7e+04 0.00011 1.3 -3 -
52 1.7e+04 0.0014 1.3 0.6 +
53 1.7e+04 0.00012 13 1 ++
54 1.7e+04 0.0001 1.3e+02 1 ++
55 1.7e+04 8.1e-05 1.3e+03 0.98 ++
56 1.7e+04 9.9e-05 1.3e+04 1 ++
57 1.7e+04 8.8e-05 1.3e+05 0.98 ++
58 1.7e+04 9.5e-05 1.3e+06 1 ++
59 1.7e+04 0.00011 1.3e+07 0.97 ++
60 1.7e+04 9.6e-05 1.3e+08 1 ++
61 1.7e+04 0.00021 1.3e+09 0.97 ++
62 1.7e+04 0.0001 1e+10 1 ++
63 1.7e+04 9.8e-05 1e+10 1 ++
64 1.7e+04 9e-05 1e+10 1 ++
65 1.7e+04 9e-05 3.2 -60 -
66 1.7e+04 9e-05 1.6 -5.8 -
67 1.7e+04 0.002 1.6 0.38 +
68 1.7e+04 0.0001 16 1 ++
69 1.7e+04 8.2e-05 1.6e+02 1 ++
70 1.7e+04 0.00012 1.6e+03 1 ++
71 1.7e+04 8.1e-05 1.6e+04 1 ++
72 1.7e+04 8e-05 1.6e+05 1 ++
73 1.7e+04 5.1e-05 1.6e+06 0.99 ++
74 1.7e+04 9.1e-05 1.6e+07 1 ++
75 1.7e+04 8.1e-05 1.6e+08 1 ++
76 1.7e+04 7.8e-05 1.6e+09 1 ++
77 1.7e+04 0.00017 1e+10 1 ++
78 1.7e+04 7.4e-05 1e+10 1 ++
79 1.7e+04 4.6e-05 1e+10 0.99 ++
80 1.7e+04 8.4e-05 1e+10 1 ++
81 1.7e+04 7.6e-05 1e+10 1 ++
82 1.7e+04 7.4e-05 1e+10 1 ++
83 1.7e+04 0.00022 1e+10 1 ++
84 1.7e+04 7.3e-05 1e+10 1 ++
85 1.7e+04 7.1e-05 1e+10 1 ++
86 1.7e+04 5.1e-05 1e+10 0.99 ++
87 1.7e+04 8.1e-05 1e+10 1 ++
88 1.7e+04 0.00011 1e+10 1 ++
89 1.7e+04 8.8e-05 1e+10 1 ++
90 1.7e+04 7e-05 1e+10 1 ++
91 1.7e+04 4.1e-05 1e+10 1 ++
92 1.7e+04 7.2e-05 1e+10 1 ++
93 1.7e+04 7e-05 1e+10 1 ++
94 1.7e+04 6.8e-05 1e+10 1 ++
95 1.7e+04 0.00024 1e+10 1 ++
96 1.7e+04 6.2e-05 1e+10 1 ++
97 1.7e+04 4.6e-05 1e+10 1 ++
98 1.7e+04 6.6e-05 1e+10 1 ++
99 1.7e+04 6.4e-05 1e+10 1 ++
100 1.7e+04 3.6e-05 1e+10 0.99 ++
Optimization algorithm has converged.
Relative gradient: 3.552063021006307e-05
Cause of termination: Relative gradient = 3.6e-05 <= 4e-05
Number of function evaluations: 288
Number of gradient evaluations: 187
Number of hessian evaluations: 93
Algorithm: Newton with trust region for simple bound constraints
Number of iterations: 101
Proportion of Hessian calculation: 93/93 = 100.0%
Optimization time: 0:00:03.605825
Calculate second derivatives and BHHH
File generalized.html has been generated.
File generalized.yaml has been generated.
print(results.short_summary())
Results for model generalized
Nbr of parameters: 30
Sample size: 4413
Excluded data: 0
Final log likelihood: -16963.25
Akaike Information Criterion: 33986.51
Bayesian Information Criterion: 34178.28
Get the results in a pandas table
pandas_results = get_pandas_estimated_parameters(
estimation_results=results,
)
display(pandas_results)
{'Estimated parameters': Name Value ... Robust p-value Active bound
0 scale 6.303650 ... 2.617906e-13 False
1 cte_shopping -0.444308 ... 6.705303e-12 False
2 metropolitan_shopping 0.037571 ... 9.819136e-03 False
3 male_shopping 0.060013 ... 7.391579e-06 False
4 age_15_40_shopping 0.045919 ... 6.036156e-04 False
5 spouse_shopping 0.037958 ... 8.366987e-04 False
6 employed_shopping 0.028262 ... 9.638150e-03 False
7 alpha_shopping 0.598947 ... 2.220446e-16 False
8 gamma_shopping 2.070326 ... 1.294476e-09 False
9 cte_socializing -0.302124 ... 6.328937e-12 False
10 number_members_socializing 0.010207 ... 4.047780e-04 False
11 male_socializing 0.077207 ... 8.156199e-09 False
12 age_41_60_socializing -0.039601 ... 1.239482e-03 False
13 bachelor_socializing -0.029909 ... 8.734051e-04 False
14 sunday_socializing 0.059543 ... 1.323992e-07 False
15 alpha_socializing 0.780531 ... 0.000000e+00 False
16 gamma_socializing 2.868730 ... 6.641354e-13 False
17 cte_recreation -0.506586 ... 2.020828e-12 False
18 number_members_recreation 0.012189 ... 1.235823e-03 False
19 male_recreation 0.134111 ... 1.989271e-10 False
20 age_15_40_recreation 0.073541 ... 1.292171e-06 False
21 spouse_recreation -0.040493 ... 2.126226e-04 False
22 alpha_recreation 0.000100 ... 9.994634e-01 True
23 gamma_recreation 25.970931 ... 7.656160e-04 False
24 age_41_60_personal -0.033524 ... 7.536776e-03 False
25 bachelor_personal -0.027666 ... 4.837983e-03 False
26 white_personal -0.054425 ... 7.059435e-06 False
27 sunday_personal 0.055520 ... 1.128913e-06 False
28 alpha_personal 0.308225 ... 3.634916e-03 False
29 gamma_personal 1.863421 ... 0.000000e+00 False
[30 rows x 6 columns]}
Total running time of the script: (0 minutes 6.301 seconds)