.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/programmers/plot_results.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_programmers_plot_results.py: biogeme.results =============== Examples of use of several functions. This is designed for programmers who need examples of use of the functions of the module. The examples are designed to illustrate the syntax. They do not correspond to any meaningful model. :author: Michel Bierlaire :date: Wed Nov 29 09:44:41 2023 .. GENERATED FROM PYTHON SOURCE LINES 15-23 .. code-block:: default import pandas as pd from biogeme.version import getText import biogeme.biogeme as bio import biogeme.database as db import biogeme.results as res from biogeme.expressions import Beta, Variable, exp .. GENERATED FROM PYTHON SOURCE LINES 24-25 Version of Biogeme. .. GENERATED FROM PYTHON SOURCE LINES 25-27 .. code-block:: default print(getText()) .. rst-class:: sphx-glr-script-out .. code-block:: none biogeme 3.2.13 [2023-12-23] Home page: http://biogeme.epfl.ch Submit questions to https://groups.google.com/d/forum/biogeme Michel Bierlaire, Transport and Mobility Laboratory, Ecole Polytechnique Fédérale de Lausanne (EPFL) .. GENERATED FROM PYTHON SOURCE LINES 28-29 Definition of a database .. GENERATED FROM PYTHON SOURCE LINES 29-43 .. code-block:: default df = pd.DataFrame( { 'Person': [1, 1, 1, 2, 2], 'Exclude': [0, 0, 1, 0, 1], 'Variable1': [1, 2, 3, 4, 5], 'Variable2': [10, 20, 30, 40, 50], 'Choice': [1, 2, 3, 1, 2], 'Av1': [0, 1, 1, 1, 1], 'Av2': [1, 1, 1, 1, 1], 'Av3': [0, 1, 1, 1, 1], } ) df .. raw:: html
Person Exclude Variable1 Variable2 Choice Av1 Av2 Av3
0 1 0 1 10 1 0 1 0
1 1 0 2 20 2 1 1 1
2 1 1 3 30 3 1 1 1
3 2 0 4 40 1 1 1 1
4 2 1 5 50 2 1 1 1


.. GENERATED FROM PYTHON SOURCE LINES 44-46 .. code-block:: default my_data = db.Database('test', df) .. GENERATED FROM PYTHON SOURCE LINES 47-48 Definition of various expressions .. GENERATED FROM PYTHON SOURCE LINES 48-56 .. code-block:: default Variable1 = Variable('Variable1') Variable2 = Variable('Variable2') beta1 = Beta('beta1', -1.0, -3, 3, 0) beta2 = Beta('beta2', 2.0, -3, 10, 0) likelihood = -(beta1**2) * Variable1 - exp(beta2 * beta1) * Variable2 - beta2**4 simul = beta1 / Variable1 + beta2 / Variable2 dict_of_expressions = {'loglike': likelihood, 'beta1': beta1, 'simul': simul} .. GENERATED FROM PYTHON SOURCE LINES 57-58 Creation of the BIOGEME object .. GENERATED FROM PYTHON SOURCE LINES 58-64 .. code-block:: default my_biogeme = bio.BIOGEME(my_data, dict_of_expressions) my_biogeme.modelName = 'simple_example' my_biogeme.bootstrap_samples = 10 results = my_biogeme.estimate(run_bootstrap=True) print(results) .. rst-class:: sphx-glr-script-out .. code-block:: none 0%| | 0/10 [00:00 %%Database name: test %% General statistics \section{General statistics} \begin{tabular}{ll} Number of estimated parameters & 2 \\ Sample size & 5 \\ Excluded observations & 0 \\ Init log likelihood & -67.38866 \\ Final log likelihood & -67.06549 \\ Likelihood ratio test for the init. model & 0.64633 \\ Rho-square for the init. model & 0.0048 \\ Rho-square-bar for the init. model & -0.0249 \\ Akaike Information Criterion & 138.131 \\ Bayesian Information Criterion & 137.3499 \\ Final gradient norm & 8.3680E-05 \\ Bootstrapping time & 0:00:00.016320 \\ Nbr of threads & 12 \\ Relative gradient & \verb$1.5409993756401287e-06$ \\ Cause of termination & \verb$Relative gradient = 1.5e-06 <= 6.1e-06$ \\ Number of function evaluations & \verb$3$ \\ Number of gradient evaluations & \verb$3$ \\ Number of hessian evaluations & \verb$2$ \\ Algorithm & \verb$Newton with trust region for simple bound constraints$ \\ Number of iterations & \verb$2$ \\ Proportion of Hessian calculation & \verb$2/2 = 100.0%$ \\ Optimization time & \verb$0:00:00.003161$ \\ \end{tabular} %%Parameter estimates \section{Parameter estimates} \begin{tabular}{lrrrr} & Value & Rob. Std err & Rob. t-test & Rob. p-value \\ beta1 & -1.27 & 0.0137 & -92.8 & 0.0 \\ beta2 & 1.25 & 0.0591 & 21.1 & 0.0 \\ \end{tabular} %%Correlation \section{Correlation} \begin{tabular}{lrrrrrrrrrrrr} & Covariance & Correlation & t-test & p-value & Rob. cov. & Rob. corr. & Rob. t-test & Rob. p-value & Boot. cov. & Boot. corr. & Boot. t-test & Boot. p-value \\ beta2-beta1 & 0.00167 & 0.171 & 19.3 & 0.0 & 0.000811 & 1.0 & 55.6 & 0.0 & 0.000531 & 1.0 & 68.6 & 0.0 \\ \end{tabular} .. GENERATED FROM PYTHON SOURCE LINES 79-80 Results can be formatted in HTML .. GENERATED FROM PYTHON SOURCE LINES 80-82 .. code-block:: default print(read_results.getHtml()) .. rst-class:: sphx-glr-script-out .. code-block:: none simple_example - Report from biogeme 3.2.13 [2023-12-23]

biogeme 3.2.13 [2023-12-23]

Python package

Home page: http://biogeme.epfl.ch

Submit questions to https://groups.google.com/d/forum/biogeme

Michel Bierlaire, Transport and Mobility Laboratory, Ecole Polytechnique Fédérale de Lausanne (EPFL)

This file has automatically been generated on 2023-12-23 19:11:07.630521

Report file: simple_example~00.html
Database name: test

Estimation report

Number of estimated parameters: 2
Sample size: 5
Excluded observations: 0
Init log likelihood: -67.38866
Final log likelihood: -67.06549
Likelihood ratio test for the init. model: 0.64633
Rho-square for the init. model: 0.0048
Rho-square-bar for the init. model: -0.0249
Akaike Information Criterion: 138.131
Bayesian Information Criterion: 137.3499
Final gradient norm: 8.3680E-05
Bootstrapping time: 0:00:00.016320
Nbr of threads: 12
Relative gradient: 1.5409993756401287e-06
Cause of termination: Relative gradient = 1.5e-06 <= 6.1e-06
Number of function evaluations: 3
Number of gradient evaluations: 3
Number of hessian evaluations: 2
Algorithm: Newton with trust region for simple bound constraints
Number of iterations: 2
Proportion of Hessian calculation: 2/2 = 100.0%
Optimization time: 0:00:00.003161

Estimated parameters

NameValueRob. Std errRob. t-testRob. p-value
beta1-1.270.0137-92.80
beta21.250.059121.10

Correlation of coefficients

Coefficient1Coefficient2CovarianceCorrelationt-testp-valueRob. cov.Rob. corr.Rob. t-testRob. p-valueBoot. cov.Boot. corr.Boot. t-testBoot. p-value
beta2beta10.001670.17119.300.000811155.600.000531168.60

Smallest eigenvalue: 73.054

Largest eigenvalue: 147.802

Condition number: 2.02319

.. GENERATED FROM PYTHON SOURCE LINES 83-84 General statistics, including a suggested format. .. GENERATED FROM PYTHON SOURCE LINES 84-87 .. code-block:: default statistics = read_results.getGeneralStatistics() statistics .. rst-class:: sphx-glr-script-out .. code-block:: none {'Number of estimated parameters': GeneralStatistic(value=2, format=''), 'Sample size': GeneralStatistic(value=5, format=''), 'Excluded observations': GeneralStatistic(value=0, format=''), 'Init log likelihood': GeneralStatistic(value=-67.38865550201763, format='.7g'), 'Final log likelihood': GeneralStatistic(value=-67.0654904794877, format='.7g'), 'Likelihood ratio test for the init. model': GeneralStatistic(value=0.646330045059841, format='.7g'), 'Rho-square for the init. model': GeneralStatistic(value=0.004795540438111923, format='.3g'), 'Rho-square-bar for the init. model': GeneralStatistic(value=-0.024883045447017027, format='.3g'), 'Akaike Information Criterion': GeneralStatistic(value=138.1309809589754, format='.7g'), 'Bayesian Information Criterion': GeneralStatistic(value=137.34985678384362, format='.7g'), 'Final gradient norm': GeneralStatistic(value=8.367978491514103e-05, format='.4E'), 'Bootstrapping time': GeneralStatistic(value=datetime.timedelta(microseconds=16320), format=''), 'Nbr of threads': GeneralStatistic(value=12, format='')} .. GENERATED FROM PYTHON SOURCE LINES 88-89 The suggested format can be used as follows .. GENERATED FROM PYTHON SOURCE LINES 89-92 .. code-block:: default for k, (v, p) in statistics.items(): print(f'{k}:\t{v:{p}}') .. rst-class:: sphx-glr-script-out .. code-block:: none Number of estimated parameters: 2 Sample size: 5 Excluded observations: 0 Init log likelihood: -67.38866 Final log likelihood: -67.06549 Likelihood ratio test for the init. model: 0.64633 Rho-square for the init. model: 0.0048 Rho-square-bar for the init. model: -0.0249 Akaike Information Criterion: 138.131 Bayesian Information Criterion: 137.3499 Final gradient norm: 8.3680E-05 Bootstrapping time: 0:00:00.016320 Nbr of threads: 12 .. GENERATED FROM PYTHON SOURCE LINES 93-94 This result can be generated directly with the following function .. GENERATED FROM PYTHON SOURCE LINES 94-96 .. code-block:: default print(results.printGeneralStatistics()) .. rst-class:: sphx-glr-script-out .. code-block:: none Number of estimated parameters: 2 Sample size: 5 Excluded observations: 0 Init log likelihood: -67.38866 Final log likelihood: -67.06549 Likelihood ratio test for the init. model: 0.64633 Rho-square for the init. model: 0.0048 Rho-square-bar for the init. model: -0.0249 Akaike Information Criterion: 138.131 Bayesian Information Criterion: 137.3499 Final gradient norm: 8.3680E-05 Bootstrapping time: 0:00:00.016320 Nbr of threads: 12 .. GENERATED FROM PYTHON SOURCE LINES 97-98 Estimated parameters as pandas dataframe .. GENERATED FROM PYTHON SOURCE LINES 98-100 .. code-block:: default read_results.getEstimatedParameters() .. raw:: html
Value Rob. Std err Rob. t-test Rob. p-value
beta1 -1.273264 0.013724 -92.776551 0.0
beta2 1.248769 0.059086 21.134825 0.0


.. GENERATED FROM PYTHON SOURCE LINES 101-102 Correlation results .. GENERATED FROM PYTHON SOURCE LINES 102-104 .. code-block:: default read_results.getCorrelationResults() .. raw:: html
Covariance Correlation t-test p-value Rob. cov. Rob. corr. Rob. t-test Rob. p-value Boot. cov. Boot. corr. Boot. t-test Boot. p-value
beta2-beta1 0.001671 0.171121 19.280045 0.0 0.000811 1.0 55.598081 0.0 0.000531 0.999983 68.644339 0.0


.. GENERATED FROM PYTHON SOURCE LINES 105-106 Obtain the values of the parameters .. GENERATED FROM PYTHON SOURCE LINES 106-108 .. code-block:: default read_results.getBetaValues() .. rst-class:: sphx-glr-script-out .. code-block:: none {'beta1': -1.2732639720980743, 'beta2': 1.2487693919282536} .. GENERATED FROM PYTHON SOURCE LINES 109-110 Obtain the value of one or several specific parameters .. GENERATED FROM PYTHON SOURCE LINES 110-112 .. code-block:: default read_results.getBetaValues(myBetas=['beta2']) .. rst-class:: sphx-glr-script-out .. code-block:: none {'beta2': 1.2487693919282536} .. GENERATED FROM PYTHON SOURCE LINES 113-114 Variance-covariance matrix (Rao-Cramer) .. GENERATED FROM PYTHON SOURCE LINES 114-116 .. code-block:: default read_results.getVarCovar() .. raw:: html
beta1 beta2
beta1 0.013258 0.001671
beta2 0.001671 0.007196


.. GENERATED FROM PYTHON SOURCE LINES 117-118 Variance-covariance matrix (robust) .. GENERATED FROM PYTHON SOURCE LINES 118-120 .. code-block:: default read_results.getRobustVarCovar() .. raw:: html
beta1 beta2
beta1 0.000188 0.000811
beta2 0.000811 0.003491


.. GENERATED FROM PYTHON SOURCE LINES 121-122 Variance-covaraince matrix (bootstrap) .. GENERATED FROM PYTHON SOURCE LINES 122-124 .. code-block:: default read_results.getBootstrapVarCovar() .. raw:: html
beta1 beta2
beta1 0.000123 0.000531
beta2 0.000531 0.002289


.. GENERATED FROM PYTHON SOURCE LINES 125-128 Draws for sensitivity analysis are generated using bootstrapping. Any indicator can be generated by the model for each draw, and its empirical distribution can be investigate . .. GENERATED FROM PYTHON SOURCE LINES 128-130 .. code-block:: default read_results.getBetasForSensitivityAnalysis(['beta1', 'beta2'], size=10) .. rst-class:: sphx-glr-script-out .. code-block:: none [{'beta1': -1.2873325336225045, 'beta2': 1.1875198317410949}, {'beta1': -1.2823937362841489, 'beta2': 1.2091956038649867}, {'beta1': -1.2690260405244391, 'beta2': 1.2669668838389574}, {'beta1': -1.2823937362841489, 'beta2': 1.2091956038649867}, {'beta1': -1.2573978799505356, 'beta2': 1.3165120809997202}, {'beta1': -1.2873325336225045, 'beta2': 1.1875198317410949}, {'beta1': -1.269026040524439, 'beta2': 1.2669668838389574}, {'beta1': -1.2777126116343218, 'beta2': 1.2295568140736606}, {'beta1': -1.2573978799505356, 'beta2': 1.3165120809997202}, {'beta1': -1.2732639720980743, 'beta2': 1.2487693919282536}] .. GENERATED FROM PYTHON SOURCE LINES 131-132 Results can be produced in the ALOGIT F12 format .. GENERATED FROM PYTHON SOURCE LINES 132-134 .. code-block:: default print(read_results.getF12()) .. rst-class:: sphx-glr-script-out .. code-block:: none simple_example From biogeme 3.2.13 2023-12-23 19:11:07 END 0 beta1 F -1.273263972098e+00 +1.372398469903e-02 0 beta2 F +1.248769391928e+00 +5.908586258958e-02 -1 5 0 0 -6.706549047949e+01 0 0 2023-12-23 19:11:07 99999 .. GENERATED FROM PYTHON SOURCE LINES 135-136 Miscellaneous functions .. GENERATED FROM PYTHON SOURCE LINES 138-139 Likelihood ratio test. Let's first estimate a constrained model .. GENERATED FROM PYTHON SOURCE LINES 141-152 .. code-block:: default beta2_constrained = Beta('beta2_constrained', 2.0, -3, 10, 1) likelihood_constrained = ( -(beta1**2) * Variable1 - exp(beta2_constrained * beta1) * Variable2 - beta2_constrained**4 ) my_biogeme_constrained = bio.BIOGEME(my_data, likelihood_constrained) my_biogeme_constrained.modelName = 'simple_example_constrained' results_constrained = my_biogeme_constrained.estimate() print(results_constrained.short_summary()) .. rst-class:: sphx-glr-script-out .. code-block:: none Results for model simple_example_constrained Nbr of parameters: 1 Sample size: 5 Excluded data: 0 Final log likelihood: -114.7702 Akaike Information Criterion: 231.5403 Bayesian Information Criterion: 231.1498 .. GENERATED FROM PYTHON SOURCE LINES 153-154 We can now perform a likelihood ratio test. .. GENERATED FROM PYTHON SOURCE LINES 154-159 .. code-block:: default test_results = results.likelihood_ratio_test(results_constrained, 0.95) print(test_results.message) print(f'Statistic: {test_results.statistic}') print(f'Threshold: {test_results.threshold}') .. rst-class:: sphx-glr-script-out .. code-block:: none H0 can be rejected at level 95.0% Statistic: 95.40936413211196 Threshold: 0.003932140000019531 .. GENERATED FROM PYTHON SOURCE LINES 160-161 Calculation of the :math:`p`-value .. GENERATED FROM PYTHON SOURCE LINES 161-163 .. code-block:: default res.calcPValue(1.96) .. rst-class:: sphx-glr-script-out .. code-block:: none 0.04999579029644097 .. GENERATED FROM PYTHON SOURCE LINES 164-165 Compilation of results .. GENERATED FROM PYTHON SOURCE LINES 165-167 .. code-block:: default dict_of_results = {'Model A': read_results, 'Model B': the_pickle_file} .. GENERATED FROM PYTHON SOURCE LINES 168-170 .. code-block:: default df = res.compile_estimation_results(dict_of_results) df .. rst-class:: sphx-glr-script-out .. code-block:: none ( Model A Model B Number of estimated parameters 2 2 Sample size 5 5 Final log likelihood -67.06549 -67.06549 Akaike Information Criterion 138.130981 138.130981 Bayesian Information Criterion 137.349857 137.349857 beta1 (t-test) -1.27 (-92.8) -1.27 (-92.8) beta2 (t-test) 1.25 (21.1) 1.25 (21.1), {'Model A': 'Model A', 'Model B': 'Model B'}) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.081 seconds) .. _sphx_glr_download_auto_examples_programmers_plot_results.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_results.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_results.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_