.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/assisted/plot_b03alt_spec.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_assisted_plot_b03alt_spec.py: Catalog for alternative specific coefficients ============================================= Investigate alternative specific parameters: - two specifications for the travel time coefficient: generic, and alternative specific, - two specifications for the travel cost coefficient: generic, and alternative specific, for a total of 4 specifications. See `Bierlaire and Ortelli (2023) `_. :author: Michel Bierlaire, EPFL :date: Thu Jul 13 16:18:10 2023 .. GENERATED FROM PYTHON SOURCE LINES 22-47 .. code-block:: Python import biogeme.biogeme as bio import biogeme.biogeme_logging as blog from biogeme import models from biogeme.expressions import Beta from biogeme.catalog import generic_alt_specific_catalogs from biogeme.results import compile_estimation_results, pareto_optimal from biogeme.data.swissmetro import ( read_data, CHOICE, SM_AV, CAR_AV_SP, TRAIN_AV_SP, TRAIN_TT_SCALED, TRAIN_COST_SCALED, SM_TT_SCALED, SM_COST_SCALED, CAR_TT_SCALED, CAR_CO_SCALED, ) logger = blog.get_screen_logger(level=blog.INFO) .. GENERATED FROM PYTHON SOURCE LINES 48-49 Parameters to be estimated. .. GENERATED FROM PYTHON SOURCE LINES 49-54 .. code-block:: Python ASC_CAR = Beta('ASC_CAR', 0, None, None, 0) ASC_TRAIN = Beta('ASC_TRAIN', 0, None, None, 0) B_TIME = Beta('B_TIME', 0, None, None, 0) B_COST = Beta('B_COST', 0, None, None, 0) .. GENERATED FROM PYTHON SOURCE LINES 55-56 Catalog for travel time coefficient. .. GENERATED FROM PYTHON SOURCE LINES 56-60 .. code-block:: Python (B_TIME_catalog_dict,) = generic_alt_specific_catalogs( generic_name='B_TIME', beta_parameters=[B_TIME], alternatives=('TRAIN', 'SM', 'CAR') ) .. GENERATED FROM PYTHON SOURCE LINES 61-62 Catalog for travel cost coefficient. .. GENERATED FROM PYTHON SOURCE LINES 62-66 .. code-block:: Python (B_COST_catalog_dict,) = generic_alt_specific_catalogs( generic_name='B_COST', beta_parameters=[B_COST], alternatives=('TRAIN', 'SM', 'CAR') ) .. GENERATED FROM PYTHON SOURCE LINES 67-68 Definition of the utility functions. .. GENERATED FROM PYTHON SOURCE LINES 68-83 .. code-block:: Python V1 = ( ASC_TRAIN + B_TIME_catalog_dict['TRAIN'] * TRAIN_TT_SCALED + B_COST_catalog_dict['TRAIN'] * TRAIN_COST_SCALED ) V2 = ( B_TIME_catalog_dict['SM'] * SM_TT_SCALED + B_COST_catalog_dict['SM'] * SM_COST_SCALED ) V3 = ( ASC_CAR + B_TIME_catalog_dict['CAR'] * CAR_TT_SCALED + B_COST_catalog_dict['CAR'] * CAR_CO_SCALED ) .. GENERATED FROM PYTHON SOURCE LINES 84-85 Associate utility functions with the numbering of alternatives. .. GENERATED FROM PYTHON SOURCE LINES 85-87 .. code-block:: Python V = {1: V1, 2: V2, 3: V3} .. GENERATED FROM PYTHON SOURCE LINES 88-89 Associate the availability conditions with the alternatives. .. GENERATED FROM PYTHON SOURCE LINES 89-91 .. code-block:: Python av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP} .. GENERATED FROM PYTHON SOURCE LINES 92-94 Definition of the model. This is the contribution of each observation to the log likelihood function. .. GENERATED FROM PYTHON SOURCE LINES 94-96 .. code-block:: Python logprob = models.loglogit(V, av, CHOICE) .. GENERATED FROM PYTHON SOURCE LINES 97-98 Read the data .. GENERATED FROM PYTHON SOURCE LINES 98-100 .. code-block:: Python database = read_data() .. GENERATED FROM PYTHON SOURCE LINES 101-102 Create the Biogeme object. .. GENERATED FROM PYTHON SOURCE LINES 102-107 .. code-block:: Python the_biogeme = bio.BIOGEME(database, logprob) the_biogeme.modelName = 'b01alt_spec' the_biogeme.generate_html = False the_biogeme.generate_pickle = False .. rst-class:: sphx-glr-script-out .. code-block:: none Biogeme parameters read from biogeme.toml. .. GENERATED FROM PYTHON SOURCE LINES 108-109 Estimate the parameters. .. GENERATED FROM PYTHON SOURCE LINES 109-111 .. code-block:: Python dict_of_results = the_biogeme.estimate_catalog() .. rst-class:: sphx-glr-script-out .. code-block:: none Estimating 4 models. Biogeme parameters read from biogeme.toml. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" *** Initial values of the parameters are obtained from the file __b01alt_spec_000000.iter Cannot read file __b01alt_spec_000000.iter. Statement is ignored. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds] ** Optimization: Newton with trust region for simple bounds Iter. ASC_CAR ASC_TRAIN B_COST B_TIME_CAR B_TIME_SM B_TIME_TRAIN Function Relgrad Radius Rho 0 -0.42 -0.77 -0.68 -0.78 -1 -0.88 8.8e+03 0.076 10 1.1 ++ 1 -0.53 -0.37 -0.78 -0.98 -1.4 -1.5 8.6e+03 0.025 1e+02 1.1 ++ 2 -0.54 -0.17 -0.79 -1 -1.5 -1.7 8.6e+03 0.0028 1e+03 1.1 ++ 3 -0.54 -0.17 -0.79 -1 -1.5 -1.7 8.6e+03 3e-05 1e+03 1 ++ Biogeme parameters read from biogeme.toml. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" *** Initial values of the parameters are obtained from the file __b01alt_spec_000001.iter Cannot read file __b01alt_spec_000001.iter. Statement is ignored. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds] ** Optimization: Newton with trust region for simple bounds Iter. ASC_CAR ASC_TRAIN B_COST_CAR B_COST_SM B_COST_TRAIN B_TIME_CAR B_TIME_SM B_TIME_TRAIN Function Relgrad Radius Rho 0 -0.6 -0.032 -0.33 -0.8 -1 -1.2 -1.4 -1.6 8.6e+03 0.055 10 0.96 ++ 1 -0.59 -0.021 -0.64 -0.77 -1.6 -1 -1.5 -1.5 8.4e+03 0.016 1e+02 1.1 ++ 2 -0.59 -0.019 -0.66 -0.79 -1.8 -1.1 -1.5 -1.4 8.4e+03 0.002 1e+03 1.1 ++ 3 -0.59 -0.019 -0.66 -0.79 -1.8 -1.1 -1.5 -1.4 8.4e+03 3e-05 1e+03 1 ++ Biogeme parameters read from biogeme.toml. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" *** Initial values of the parameters are obtained from the file __b01alt_spec_000002.iter Cannot read file __b01alt_spec_000002.iter. Statement is ignored. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds] ** Optimization: Newton with trust region for simple bounds Iter. ASC_CAR ASC_TRAIN B_COST B_TIME Function Relgrad Radius Rho 0 -0.16 -0.53 -0.66 -0.87 8.8e+03 0.048 10 1.1 ++ 1 -0.003 -0.63 -0.77 -1.2 8.7e+03 0.0073 1e+02 1.1 ++ 2 0.016 -0.65 -0.79 -1.3 8.7e+03 0.00016 1e+03 1 ++ 3 0.016 -0.65 -0.79 -1.3 8.7e+03 7.3e-08 1e+03 1 ++ Biogeme parameters read from biogeme.toml. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" *** Initial values of the parameters are obtained from the file __b01alt_spec_000003.iter Cannot read file __b01alt_spec_000003.iter. Statement is ignored. As the model is not too complex, we activate the calculation of second derivatives. If you want to change it, change the name of the algorithm in the TOML file from "automatic" to "simple_bounds" Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds] ** Optimization: Newton with trust region for simple bounds Iter. ASC_CAR ASC_TRAIN B_COST_CAR B_COST_SM B_COST_TRAIN B_TIME Function Relgrad Radius Rho 0 -0.39 0.098 -0.39 -0.81 -1.8 -1.3 8.5e+03 0.026 1 0.8 + 1 -0.42 -0.044 -0.38 -0.82 -1.9 -1.3 8.4e+03 0.0019 10 1 ++ 2 -0.42 -0.044 -0.38 -0.82 -1.9 -1.3 8.4e+03 1.5e-05 10 1 ++ .. GENERATED FROM PYTHON SOURCE LINES 112-113 Number of estimated models. .. GENERATED FROM PYTHON SOURCE LINES 113-115 .. code-block:: Python print(f'A total of {len(dict_of_results)} models have been estimated') .. rst-class:: sphx-glr-script-out .. code-block:: none A total of 4 models have been estimated .. GENERATED FROM PYTHON SOURCE LINES 116-117 All estimation results .. GENERATED FROM PYTHON SOURCE LINES 117-121 .. code-block:: Python compiled_results, specs = compile_estimation_results( dict_of_results, use_short_names=True ) .. GENERATED FROM PYTHON SOURCE LINES 122-124 .. code-block:: Python compiled_results .. raw:: html
Model_000000 Model_000001 Model_000002 Model_000003
Number of estimated parameters 6 8 4 6
Sample size 10719 10719 10719 10719
Final log likelihood -8579.524042 -8430.710721 -8670.163119 -8448.605446
Akaike Information Criterion 17171.048085 16877.421442 17348.326237 16909.210893
Bayesian Information Criterion 17214.726724 16935.659627 17377.44533 16952.889531
ASC_CAR (t-test) -0.544 (-7.24) -0.595 (-8.17) 0.0162 (0.438) -0.415 (-7.36)
ASC_TRAIN (t-test) -0.144 (-1.73) -0.0197 (-0.234) -0.652 (-12) -0.046 (-0.733)
B_COST (t-test) -0.789 (-17) -0.79 (-15.5)
B_TIME_CAR (t-test) -0.998 (-14.9) -1.06 (-11.1)
B_TIME_SM (t-test) -1.47 (-14.3) -1.46 (-14.4)
B_TIME_TRAIN (t-test) -1.76 (-23.4) -1.4 (-15.8)
B_COST_CAR (t-test) -0.659 (-6.68) -0.383 (-5)
B_COST_SM (t-test) -0.787 (-14.8) -0.823 (-15.5)
B_COST_TRAIN (t-test) -1.85 (-14.2) -1.92 (-16.8)
B_TIME (t-test) -1.28 (-19.5) -1.27 (-16.9)


.. GENERATED FROM PYTHON SOURCE LINES 125-126 Glossary .. GENERATED FROM PYTHON SOURCE LINES 126-129 .. code-block:: Python for short_name, spec in specs.items(): print(f'{short_name}\t{spec}') .. rst-class:: sphx-glr-script-out .. code-block:: none Model_000000 B_COST_gen_altspec:generic;B_TIME_gen_altspec:altspec Model_000001 B_COST_gen_altspec:altspec;B_TIME_gen_altspec:altspec Model_000002 B_COST_gen_altspec:generic;B_TIME_gen_altspec:generic Model_000003 B_COST_gen_altspec:altspec;B_TIME_gen_altspec:generic .. GENERATED FROM PYTHON SOURCE LINES 130-131 Estimation results of the Pareto optimal models. .. GENERATED FROM PYTHON SOURCE LINES 131-136 .. code-block:: Python pareto_results = pareto_optimal(dict_of_results) compiled_pareto_results, pareto_specs = compile_estimation_results( pareto_results, use_short_names=True ) .. rst-class:: sphx-glr-script-out .. code-block:: none No Pareto file has been provided .. GENERATED FROM PYTHON SOURCE LINES 137-139 .. code-block:: Python compiled_pareto_results .. raw:: html
Model_000000 Model_000001 Model_000002
Number of estimated parameters 4 8 6
Sample size 10719 10719 10719
Final log likelihood -8670.163119 -8430.710721 -8448.605446
Akaike Information Criterion 17348.326237 16877.421442 16909.210893
Bayesian Information Criterion 17377.44533 16935.659627 16952.889531
ASC_CAR (t-test) 0.0162 (0.438) -0.595 (-8.17) -0.415 (-7.36)
ASC_TRAIN (t-test) -0.652 (-12) -0.0197 (-0.234) -0.046 (-0.733)
B_COST (t-test) -0.79 (-15.5)
B_TIME (t-test) -1.28 (-19.5) -1.27 (-16.9)
B_COST_CAR (t-test) -0.659 (-6.68) -0.383 (-5)
B_COST_SM (t-test) -0.787 (-14.8) -0.823 (-15.5)
B_COST_TRAIN (t-test) -1.85 (-14.2) -1.92 (-16.8)
B_TIME_CAR (t-test) -1.06 (-11.1)
B_TIME_SM (t-test) -1.46 (-14.4)
B_TIME_TRAIN (t-test) -1.4 (-15.8)


.. GENERATED FROM PYTHON SOURCE LINES 140-141 Glossary. .. GENERATED FROM PYTHON SOURCE LINES 141-143 .. code-block:: Python for short_name, spec in pareto_specs.items(): print(f'{short_name}\t{spec}') .. rst-class:: sphx-glr-script-out .. code-block:: none Model_000000 B_COST_gen_altspec:generic;B_TIME_gen_altspec:generic Model_000001 B_COST_gen_altspec:altspec;B_TIME_gen_altspec:altspec Model_000002 B_COST_gen_altspec:altspec;B_TIME_gen_altspec:generic .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.286 seconds) .. _sphx_glr_download_auto_examples_assisted_plot_b03alt_spec.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_b03alt_spec.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_b03alt_spec.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_b03alt_spec.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_