.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/assisted/everything_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_everything_spec.py: .. _everything_spec_section: Combination of many specifications ================================== We combine the following specifications: - 3 models - logit - nested logit with two nests: public and private transportation - nested logit with two nests existing and future modes - 3 functional forms for the travel time variables - linear specification, - Box-Cox transform, - power series, - 2 specifications for the cost coefficients: - generic - alternative specific - 2 specifications for the travel time coefficients: - generic - alternative specific - 4 segmentations for the constants: - not segmented - segmented by GA (yearly subscription to public transport) - segmented by luggage - segmented both by GA and luggage - 3 segmentations for the time coefficients: - not segmented - segmented with first class - segmented with trip purpose This leads to a total of 432 specifications. See `Bierlaire and Ortelli (2023) `_. :author: Michel Bierlaire, EPFL :date: Sat Jul 15 15:40:33 2023 .. GENERATED FROM PYTHON SOURCE LINES 52-62 .. code-block:: default import numpy as np from biogeme import models from biogeme.expressions import Expression, Beta from biogeme.nests import OneNestForNestedLogit, NestsForNestedLogit from biogeme.catalog import ( Catalog, segmentation_catalogs, generic_alt_specific_catalogs, ) .. GENERATED FROM PYTHON SOURCE LINES 63-64 See :ref:`swissmetro_data`. .. GENERATED FROM PYTHON SOURCE LINES 64-78 .. code-block:: default from swissmetro_data import ( database, 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, ) .. GENERATED FROM PYTHON SOURCE LINES 79-80 Definition of the segmentations. .. GENERATED FROM PYTHON SOURCE LINES 80-92 .. code-block:: default segmentation_ga = database.generate_segmentation( variable='GA', mapping={0: 'noGA', 1: 'GA'} ) segmentation_luggage = database.generate_segmentation( variable='LUGGAGE', mapping={0: 'no_lugg', 1: 'one_lugg', 3: 'several_lugg'} ) segmentation_first = database.generate_segmentation( variable='FIRST', mapping={0: '2nd_class', 1: '1st_class'} ) .. GENERATED FROM PYTHON SOURCE LINES 93-95 We consider two trip purposes: 'commuters' and anything else. We need to define a binary variable first. .. GENERATED FROM PYTHON SOURCE LINES 95-101 .. code-block:: default database.data['COMMUTERS'] = np.where(database.data['PURPOSE'] == 1, 1, 0) segmentation_purpose = database.generate_segmentation( variable='COMMUTERS', mapping={0: 'non_commuters', 1: 'commuters'} ) .. GENERATED FROM PYTHON SOURCE LINES 102-103 Parameters to be estimated. .. GENERATED FROM PYTHON SOURCE LINES 103-108 .. code-block:: default 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 109-110 Parameter of the Box-Cox transform. .. GENERATED FROM PYTHON SOURCE LINES 110-112 .. code-block:: default ell_travel_time = Beta('lambda_travel_time', 1, -10, 10, 0) .. GENERATED FROM PYTHON SOURCE LINES 113-114 Coefficients of the power series. .. GENERATED FROM PYTHON SOURCE LINES 114-118 .. code-block:: default square_tt_coef = Beta('square_tt_coef', 0, None, None, 0) cube_tt_coef = Beta('cube_tt_coef', 0, None, None, 0) .. GENERATED FROM PYTHON SOURCE LINES 119-120 Function calculation the power series. .. GENERATED FROM PYTHON SOURCE LINES 120-132 .. code-block:: default def power_series(the_variable: Expression) -> Expression: """Generate the expression of a polynomial of degree 3 :param the_variable: variable of the polynomial """ return ( the_variable + square_tt_coef * the_variable**2 + cube_tt_coef * the_variable * the_variable**3 ) .. GENERATED FROM PYTHON SOURCE LINES 133-134 Train travel time .. GENERATED FROM PYTHON SOURCE LINES 136-137 Linear specification. .. GENERATED FROM PYTHON SOURCE LINES 137-139 .. code-block:: default linear_train_tt = TRAIN_TT_SCALED .. GENERATED FROM PYTHON SOURCE LINES 140-141 Box-Cox transform. .. GENERATED FROM PYTHON SOURCE LINES 141-143 .. code-block:: default boxcox_train_tt = models.boxcox(TRAIN_TT_SCALED, ell_travel_time) .. GENERATED FROM PYTHON SOURCE LINES 144-145 Power series. .. GENERATED FROM PYTHON SOURCE LINES 145-147 .. code-block:: default power_train_tt = power_series(TRAIN_TT_SCALED) .. GENERATED FROM PYTHON SOURCE LINES 148-149 Definition of the catalog. .. GENERATED FROM PYTHON SOURCE LINES 149-158 .. code-block:: default train_tt_catalog = Catalog.from_dict( catalog_name='train_tt_catalog', dict_of_expressions={ 'linear': linear_train_tt, 'boxcox': boxcox_train_tt, 'power': power_train_tt, }, ) .. GENERATED FROM PYTHON SOURCE LINES 159-160 Swissmetro travel time .. GENERATED FROM PYTHON SOURCE LINES 162-163 Linear specification. .. GENERATED FROM PYTHON SOURCE LINES 163-165 .. code-block:: default linear_sm_tt = SM_TT_SCALED .. GENERATED FROM PYTHON SOURCE LINES 166-167 Box-Cox transform. .. GENERATED FROM PYTHON SOURCE LINES 167-169 .. code-block:: default boxcox_sm_tt = models.boxcox(SM_TT_SCALED, ell_travel_time) .. GENERATED FROM PYTHON SOURCE LINES 170-171 Power series. .. GENERATED FROM PYTHON SOURCE LINES 171-173 .. code-block:: default power_sm_tt = power_series(SM_TT_SCALED) .. GENERATED FROM PYTHON SOURCE LINES 174-175 Definition of the catalog. Note that the controller is the same as for train. .. GENERATED FROM PYTHON SOURCE LINES 175-185 .. code-block:: default sm_tt_catalog = Catalog.from_dict( catalog_name='sm_tt_catalog', dict_of_expressions={ 'linear': linear_sm_tt, 'boxcox': boxcox_sm_tt, 'power': power_sm_tt, }, controlled_by=train_tt_catalog.controlled_by, ) .. GENERATED FROM PYTHON SOURCE LINES 186-187 Car travel time .. GENERATED FROM PYTHON SOURCE LINES 189-190 Linear specification. .. GENERATED FROM PYTHON SOURCE LINES 190-192 .. code-block:: default linear_car_tt = CAR_TT_SCALED .. GENERATED FROM PYTHON SOURCE LINES 193-194 Box-Cox transform. .. GENERATED FROM PYTHON SOURCE LINES 194-196 .. code-block:: default boxcox_car_tt = models.boxcox(CAR_TT_SCALED, ell_travel_time) .. GENERATED FROM PYTHON SOURCE LINES 197-198 Power series. .. GENERATED FROM PYTHON SOURCE LINES 198-200 .. code-block:: default power_car_tt = power_series(CAR_TT_SCALED) .. GENERATED FROM PYTHON SOURCE LINES 201-202 Definition of the catalog. Note that the controller is the same as for train. .. GENERATED FROM PYTHON SOURCE LINES 202-213 .. code-block:: default car_tt_catalog = Catalog.from_dict( catalog_name='car_tt_catalog', dict_of_expressions={ 'linear': linear_car_tt, 'boxcox': boxcox_car_tt, 'power': power_car_tt, }, controlled_by=train_tt_catalog.controlled_by, ) .. GENERATED FROM PYTHON SOURCE LINES 214-215 Catalogs for the alternative specific constants. .. GENERATED FROM PYTHON SOURCE LINES 215-226 .. code-block:: default ASC_TRAIN_catalog, ASC_CAR_catalog = segmentation_catalogs( generic_name='ASC', beta_parameters=[ASC_TRAIN, ASC_CAR], potential_segmentations=( segmentation_ga, segmentation_luggage, ), maximum_number=2, ) .. GENERATED FROM PYTHON SOURCE LINES 227-228 Catalog for the travel time coefficient. .. GENERATED FROM PYTHON SOURCE LINES 228-239 .. code-block:: default (B_TIME_catalog_dict,) = generic_alt_specific_catalogs( generic_name='B_TIME', beta_parameters=[B_TIME], alternatives=['TRAIN', 'SM', 'CAR'], potential_segmentations=( segmentation_first, segmentation_purpose, ), maximum_number=1, ) .. GENERATED FROM PYTHON SOURCE LINES 240-241 Catalog for the travel cost coefficient. .. GENERATED FROM PYTHON SOURCE LINES 241-245 .. code-block:: default (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 246-247 Definition of the utility functions. .. GENERATED FROM PYTHON SOURCE LINES 247-262 .. code-block:: default V1 = ( ASC_TRAIN_catalog + B_TIME_catalog_dict['TRAIN'] * train_tt_catalog + B_COST_catalog_dict['TRAIN'] * TRAIN_COST_SCALED ) V2 = ( B_TIME_catalog_dict['SM'] * sm_tt_catalog + B_COST_catalog_dict['SM'] * SM_COST_SCALED ) V3 = ( ASC_CAR_catalog + B_TIME_catalog_dict['CAR'] * car_tt_catalog + B_COST_catalog_dict['CAR'] * CAR_CO_SCALED ) .. GENERATED FROM PYTHON SOURCE LINES 263-264 Associate utility functions with the numbering of alternatives. .. GENERATED FROM PYTHON SOURCE LINES 264-266 .. code-block:: default V = {1: V1, 2: V2, 3: V3} .. GENERATED FROM PYTHON SOURCE LINES 267-268 Associate the availability conditions with the alternatives. .. GENERATED FROM PYTHON SOURCE LINES 268-270 .. code-block:: default av = {1: TRAIN_AV_SP, 2: SM_AV, 3: CAR_AV_SP} .. GENERATED FROM PYTHON SOURCE LINES 271-273 Definition of the logit model. This is the contribution of each observation to the log likelihood function. .. GENERATED FROM PYTHON SOURCE LINES 273-275 .. code-block:: default logprob_logit = models.loglogit(V, av, CHOICE) .. GENERATED FROM PYTHON SOURCE LINES 276-277 Nested logit model: nest with existing alternatives. .. GENERATED FROM PYTHON SOURCE LINES 277-285 .. code-block:: default mu_existing = Beta('mu_existing', 1, 1, 10, 0) existing = OneNestForNestedLogit( nest_param=mu_existing, list_of_alternatives=[1, 3], name='Existing' ) nests_existing = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(existing,)) logprob_nested_existing = models.lognested(V, av, nests_existing, CHOICE) .. GENERATED FROM PYTHON SOURCE LINES 286-287 Nested logit model: nest with public transportation alternatives. .. GENERATED FROM PYTHON SOURCE LINES 287-295 .. code-block:: default mu_public = Beta('mu_public', 1, 1, 10, 0) public = OneNestForNestedLogit( nest_param=mu_public, list_of_alternatives=[1, 2], name='Public' ) nests_public = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(public,)) logprob_nested_public = models.lognested(V, av, nests_public, CHOICE) .. GENERATED FROM PYTHON SOURCE LINES 296-297 Catalo for models. .. GENERATED FROM PYTHON SOURCE LINES 297-305 .. code-block:: default model_catalog = Catalog.from_dict( catalog_name='model_catalog', dict_of_expressions={ 'logit': logprob_logit, 'nested existing': logprob_nested_existing, 'nested public': logprob_nested_public, }, ) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.000 seconds) .. _sphx_glr_download_auto_examples_assisted_everything_spec.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: everything_spec.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: everything_spec.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_