.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/latent/plot_b07problem.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_latent_plot_b07problem.py: Illustration of a common estimation problem =========================================== This file is the same as b02one_latent_ordered.py, where the starting values for the sigma have been changed in order to illustrate a common issue with the estimation of such models. We set the starting value of a scale parameter (SIGMA_STAR_Envir02) to a small value: 0.01. The resulting likelihood is so close to zero that taking the log generates a numerical issue. Make sure to set large initial values for scale parameters. :author: Michel Bierlaire, EPFL :date: Thu Apr 13 18:19:27 2023 .. GENERATED FROM PYTHON SOURCE LINES 20-49 .. code-block:: default import biogeme.biogeme_logging as blog from biogeme.models import piecewiseFormula import biogeme.biogeme as bio from biogeme.expressions import Beta, log, Elem, bioNormalCdf from optima import ( database, age_65_more, ScaledIncome, moreThanOneCar, moreThanOneBike, individualHouse, male, haveChildren, haveGA, highEducation, Envir01, Envir02, Envir03, Mobil11, Mobil14, Mobil16, Mobil17, ) logger = blog.get_screen_logger(level=blog.INFO) logger.info('Example b07problem.py') .. rst-class:: sphx-glr-script-out .. code-block:: none Example b07problem.py .. GENERATED FROM PYTHON SOURCE LINES 50-51 Parameters to be estimated .. GENERATED FROM PYTHON SOURCE LINES 51-64 .. code-block:: default coef_intercept = Beta('coef_intercept', 0.0, None, None, 0) coef_age_65_more = Beta('coef_age_65_more', 0.0, None, None, 0) coef_haveGA = Beta('coef_haveGA', 0.0, None, None, 0) coef_moreThanOneCar = Beta('coef_moreThanOneCar', 0.0, None, None, 0) coef_moreThanOneBike = Beta('coef_moreThanOneBike', 0.0, None, None, 0) coef_individualHouse = Beta('coef_individualHouse', 0.0, None, None, 0) coef_male = Beta('coef_male', 0.0, None, None, 0) coef_haveChildren = Beta('coef_haveChildren', 0.0, None, None, 0) coef_highEducation = Beta('coef_highEducation', 0.0, None, None, 0) thresholds = [None, 4, 6, 8, 10, None] formula_income = piecewiseFormula(variable=ScaledIncome, thresholds=thresholds) .. GENERATED FROM PYTHON SOURCE LINES 65-66 Latent variable: structural equation. .. GENERATED FROM PYTHON SOURCE LINES 66-79 .. code-block:: default CARLOVERS = ( coef_intercept + coef_age_65_more * age_65_more + formula_income + coef_moreThanOneCar * moreThanOneCar + coef_moreThanOneBike * moreThanOneBike + coef_individualHouse * individualHouse + coef_male * male + coef_haveChildren * haveChildren + coef_haveGA * haveGA + coef_highEducation * highEducation ) .. GENERATED FROM PYTHON SOURCE LINES 80-81 Measurement equations .. GENERATED FROM PYTHON SOURCE LINES 83-84 Intercepts. .. GENERATED FROM PYTHON SOURCE LINES 84-92 .. code-block:: default INTER_Envir01 = Beta('INTER_Envir01', 0, None, None, 1) INTER_Envir02 = Beta('INTER_Envir02', 0, None, None, 0) INTER_Envir03 = Beta('INTER_Envir03', 0, None, None, 0) INTER_Mobil11 = Beta('INTER_Mobil11', 0, None, None, 0) INTER_Mobil14 = Beta('INTER_Mobil14', 0, None, None, 0) INTER_Mobil16 = Beta('INTER_Mobil16', 0, None, None, 0) INTER_Mobil17 = Beta('INTER_Mobil17', 0, None, None, 0) .. GENERATED FROM PYTHON SOURCE LINES 93-94 Coefficients. .. GENERATED FROM PYTHON SOURCE LINES 94-102 .. code-block:: default B_Envir01_F1 = Beta('B_Envir01_F1', -1, None, None, 1) B_Envir02_F1 = Beta('B_Envir02_F1', -1, None, None, 0) B_Envir03_F1 = Beta('B_Envir03_F1', 1, None, None, 0) B_Mobil11_F1 = Beta('B_Mobil11_F1', 1, None, None, 0) B_Mobil14_F1 = Beta('B_Mobil14_F1', 1, None, None, 0) B_Mobil16_F1 = Beta('B_Mobil16_F1', 1, None, None, 0) B_Mobil17_F1 = Beta('B_Mobil17_F1', 1, None, None, 0) .. GENERATED FROM PYTHON SOURCE LINES 103-104 Linear models. .. GENERATED FROM PYTHON SOURCE LINES 104-112 .. code-block:: default MODEL_Envir01 = INTER_Envir01 + B_Envir01_F1 * CARLOVERS MODEL_Envir02 = INTER_Envir02 + B_Envir02_F1 * CARLOVERS MODEL_Envir03 = INTER_Envir03 + B_Envir03_F1 * CARLOVERS MODEL_Mobil11 = INTER_Mobil11 + B_Mobil11_F1 * CARLOVERS MODEL_Mobil14 = INTER_Mobil14 + B_Mobil14_F1 * CARLOVERS MODEL_Mobil16 = INTER_Mobil16 + B_Mobil16_F1 * CARLOVERS MODEL_Mobil17 = INTER_Mobil17 + B_Mobil17_F1 * CARLOVERS .. GENERATED FROM PYTHON SOURCE LINES 113-114 Scale parameters. .. GENERATED FROM PYTHON SOURCE LINES 114-122 .. code-block:: default SIGMA_STAR_Envir01 = Beta('SIGMA_STAR_Envir01', 1, 1.0e-5, None, 1) SIGMA_STAR_Envir02 = Beta('SIGMA_STAR_Envir02', 0.01, 1.0e-5, None, 0) SIGMA_STAR_Envir03 = Beta('SIGMA_STAR_Envir03', 1, 1.0e-5, None, 0) SIGMA_STAR_Mobil11 = Beta('SIGMA_STAR_Mobil11', 1, 1.0e-5, None, 0) SIGMA_STAR_Mobil14 = Beta('SIGMA_STAR_Mobil14', 1, 1.0e-5, None, 0) SIGMA_STAR_Mobil16 = Beta('SIGMA_STAR_Mobil16', 1, 1.0e-5, None, 0) SIGMA_STAR_Mobil17 = Beta('SIGMA_STAR_Mobil17', 1, 1.0e-5, None, 0) .. GENERATED FROM PYTHON SOURCE LINES 123-124 Symmetric thresholds. .. GENERATED FROM PYTHON SOURCE LINES 124-131 .. code-block:: default delta_1 = Beta('delta_1', 0.1, 1.0e-5, None, 0) delta_2 = Beta('delta_2', 0.2, 1.0e-5, None, 0) tau_1 = -delta_1 - delta_2 tau_2 = -delta_1 tau_3 = delta_1 tau_4 = delta_1 + delta_2 .. GENERATED FROM PYTHON SOURCE LINES 132-133 Ordered probit models. .. GENERATED FROM PYTHON SOURCE LINES 133-263 .. code-block:: default Envir01_tau_1 = (tau_1 - MODEL_Envir01) / SIGMA_STAR_Envir01 Envir01_tau_2 = (tau_2 - MODEL_Envir01) / SIGMA_STAR_Envir01 Envir01_tau_3 = (tau_3 - MODEL_Envir01) / SIGMA_STAR_Envir01 Envir01_tau_4 = (tau_4 - MODEL_Envir01) / SIGMA_STAR_Envir01 IndEnvir01 = { 1: bioNormalCdf(Envir01_tau_1), 2: bioNormalCdf(Envir01_tau_2) - bioNormalCdf(Envir01_tau_1), 3: bioNormalCdf(Envir01_tau_3) - bioNormalCdf(Envir01_tau_2), 4: bioNormalCdf(Envir01_tau_4) - bioNormalCdf(Envir01_tau_3), 5: 1 - bioNormalCdf(Envir01_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Envir01 = Elem(IndEnvir01, Envir01) Envir02_tau_1 = (tau_1 - MODEL_Envir02) / SIGMA_STAR_Envir02 Envir02_tau_2 = (tau_2 - MODEL_Envir02) / SIGMA_STAR_Envir02 Envir02_tau_3 = (tau_3 - MODEL_Envir02) / SIGMA_STAR_Envir02 Envir02_tau_4 = (tau_4 - MODEL_Envir02) / SIGMA_STAR_Envir02 IndEnvir02 = { 1: bioNormalCdf(Envir02_tau_1), 2: bioNormalCdf(Envir02_tau_2) - bioNormalCdf(Envir02_tau_1), 3: bioNormalCdf(Envir02_tau_3) - bioNormalCdf(Envir02_tau_2), 4: bioNormalCdf(Envir02_tau_4) - bioNormalCdf(Envir02_tau_3), 5: 1 - bioNormalCdf(Envir02_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Envir02 = Elem(IndEnvir02, Envir02) Envir03_tau_1 = (tau_1 - MODEL_Envir03) / SIGMA_STAR_Envir03 Envir03_tau_2 = (tau_2 - MODEL_Envir03) / SIGMA_STAR_Envir03 Envir03_tau_3 = (tau_3 - MODEL_Envir03) / SIGMA_STAR_Envir03 Envir03_tau_4 = (tau_4 - MODEL_Envir03) / SIGMA_STAR_Envir03 IndEnvir03 = { 1: bioNormalCdf(Envir03_tau_1), 2: bioNormalCdf(Envir03_tau_2) - bioNormalCdf(Envir03_tau_1), 3: bioNormalCdf(Envir03_tau_3) - bioNormalCdf(Envir03_tau_2), 4: bioNormalCdf(Envir03_tau_4) - bioNormalCdf(Envir03_tau_3), 5: 1 - bioNormalCdf(Envir03_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Envir03 = Elem(IndEnvir03, Envir03) Mobil11_tau_1 = (tau_1 - MODEL_Mobil11) / SIGMA_STAR_Mobil11 Mobil11_tau_2 = (tau_2 - MODEL_Mobil11) / SIGMA_STAR_Mobil11 Mobil11_tau_3 = (tau_3 - MODEL_Mobil11) / SIGMA_STAR_Mobil11 Mobil11_tau_4 = (tau_4 - MODEL_Mobil11) / SIGMA_STAR_Mobil11 IndMobil11 = { 1: bioNormalCdf(Mobil11_tau_1), 2: bioNormalCdf(Mobil11_tau_2) - bioNormalCdf(Mobil11_tau_1), 3: bioNormalCdf(Mobil11_tau_3) - bioNormalCdf(Mobil11_tau_2), 4: bioNormalCdf(Mobil11_tau_4) - bioNormalCdf(Mobil11_tau_3), 5: 1 - bioNormalCdf(Mobil11_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Mobil11 = Elem(IndMobil11, Mobil11) Mobil14_tau_1 = (tau_1 - MODEL_Mobil14) / SIGMA_STAR_Mobil14 Mobil14_tau_2 = (tau_2 - MODEL_Mobil14) / SIGMA_STAR_Mobil14 Mobil14_tau_3 = (tau_3 - MODEL_Mobil14) / SIGMA_STAR_Mobil14 Mobil14_tau_4 = (tau_4 - MODEL_Mobil14) / SIGMA_STAR_Mobil14 IndMobil14 = { 1: bioNormalCdf(Mobil14_tau_1), 2: bioNormalCdf(Mobil14_tau_2) - bioNormalCdf(Mobil14_tau_1), 3: bioNormalCdf(Mobil14_tau_3) - bioNormalCdf(Mobil14_tau_2), 4: bioNormalCdf(Mobil14_tau_4) - bioNormalCdf(Mobil14_tau_3), 5: 1 - bioNormalCdf(Mobil14_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Mobil14 = Elem(IndMobil14, Mobil14) Mobil16_tau_1 = (tau_1 - MODEL_Mobil16) / SIGMA_STAR_Mobil16 Mobil16_tau_2 = (tau_2 - MODEL_Mobil16) / SIGMA_STAR_Mobil16 Mobil16_tau_3 = (tau_3 - MODEL_Mobil16) / SIGMA_STAR_Mobil16 Mobil16_tau_4 = (tau_4 - MODEL_Mobil16) / SIGMA_STAR_Mobil16 IndMobil16 = { 1: bioNormalCdf(Mobil16_tau_1), 2: bioNormalCdf(Mobil16_tau_2) - bioNormalCdf(Mobil16_tau_1), 3: bioNormalCdf(Mobil16_tau_3) - bioNormalCdf(Mobil16_tau_2), 4: bioNormalCdf(Mobil16_tau_4) - bioNormalCdf(Mobil16_tau_3), 5: 1 - bioNormalCdf(Mobil16_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Mobil16 = Elem(IndMobil16, Mobil16) Mobil17_tau_1 = (tau_1 - MODEL_Mobil17) / SIGMA_STAR_Mobil17 Mobil17_tau_2 = (tau_2 - MODEL_Mobil17) / SIGMA_STAR_Mobil17 Mobil17_tau_3 = (tau_3 - MODEL_Mobil17) / SIGMA_STAR_Mobil17 Mobil17_tau_4 = (tau_4 - MODEL_Mobil17) / SIGMA_STAR_Mobil17 IndMobil17 = { 1: bioNormalCdf(Mobil17_tau_1), 2: bioNormalCdf(Mobil17_tau_2) - bioNormalCdf(Mobil17_tau_1), 3: bioNormalCdf(Mobil17_tau_3) - bioNormalCdf(Mobil17_tau_2), 4: bioNormalCdf(Mobil17_tau_4) - bioNormalCdf(Mobil17_tau_3), 5: 1 - bioNormalCdf(Mobil17_tau_4), 6: 1.0, -1: 1.0, -2: 1.0, } P_Mobil17 = Elem(IndMobil17, Mobil17) loglike = ( log(P_Envir01) + log(P_Envir02) + log(P_Envir03) + log(P_Mobil11) + log(P_Mobil14) + log(P_Mobil16) + log(P_Mobil17) ) .. GENERATED FROM PYTHON SOURCE LINES 264-265 Create the Biogeme object .. GENERATED FROM PYTHON SOURCE LINES 265-268 .. code-block:: default the_biogeme = bio.BIOGEME(database, loglike) the_biogeme.modelName = 'b07problem' .. rst-class:: sphx-glr-script-out .. code-block:: none File biogeme.toml has been parsed. .. GENERATED FROM PYTHON SOURCE LINES 269-270 Estimate the parameters .. GENERATED FROM PYTHON SOURCE LINES 270-272 .. code-block:: default results = the_biogeme.estimate() .. rst-class:: sphx-glr-script-out .. code-block:: none *** Initial values of the parameters are obtained from the file __b07problem.iter Cannot read file __b07problem.iter. Statement is ignored. Optimization algorithm: hybrid Newton/BFGS with simple bounds [simple_bounds] ** Optimization: Newton with trust region for simple bounds The norm of the gradient at B_Envir02_F1=-1, B_Envir03_F1=1, B_Mobil11_F1=1, B_Mobil14_F1=1, B_Mobil16_F1=1, B_Mobil17_F1=1, INTER_Envir02=0, INTER_Envir03=0, INTER_Mobil11=0, INTER_Mobil14=0, INTER_Mobil16=0, INTER_Mobil17=0, SIGMA_STAR_Envir02=0.01, SIGMA_STAR_Envir03=1, SIGMA_STAR_Mobil11=1 is inf: g=-1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308 The norm of the gradient at B_Envir02_F1=-1, B_Envir03_F1=1, B_Mobil11_F1=1, B_Mobil14_F1=1, B_Mobil16_F1=1, B_Mobil17_F1=1, INTER_Envir02=0, INTER_Envir03=0, INTER_Mobil11=0, INTER_Mobil14=0, INTER_Mobil16=0, INTER_Mobil17=0, SIGMA_STAR_Envir02=0.01, SIGMA_STAR_Envir03=1, SIGMA_STAR_Mobil11=1 is inf: g=-1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308, -1.8e+308 .. GENERATED FROM PYTHON SOURCE LINES 273-279 .. code-block:: default print(f'Estimated betas: {len(results.data.betaValues)}') print(f'final log likelihood: {results.data.logLike:.3f}') print(f'Output file: {results.data.htmlFileName}') results.writeLaTeX() print(f'LaTeX file: {results.data.latexFileName}') .. rst-class:: sphx-glr-script-out .. code-block:: none Estimated betas: 34 final log likelihood: -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000 Output file: None Results saved in file b07problem.tex LaTeX file: b07problem.tex .. GENERATED FROM PYTHON SOURCE LINES 280-281 .. code-block:: default results.getEstimatedParameters() .. raw:: html
Value Rob. Std err Rob. t-test Rob. p-value
B_Envir02_F1 -1.00 0.0 1.797693e+308 0.0
B_Envir03_F1 1.00 0.0 1.797693e+308 0.0
B_Mobil11_F1 1.00 0.0 1.797693e+308 0.0
B_Mobil14_F1 1.00 0.0 1.797693e+308 0.0
B_Mobil16_F1 1.00 0.0 1.797693e+308 0.0
B_Mobil17_F1 1.00 0.0 1.797693e+308 0.0
INTER_Envir02 0.00 0.0 1.797693e+308 0.0
INTER_Envir03 0.00 0.0 1.797693e+308 0.0
INTER_Mobil11 0.00 0.0 1.797693e+308 0.0
INTER_Mobil14 0.00 0.0 1.797693e+308 0.0
INTER_Mobil16 0.00 0.0 1.797693e+308 0.0
INTER_Mobil17 0.00 0.0 1.797693e+308 0.0
SIGMA_STAR_Envir02 0.01 0.0 1.797693e+308 0.0
SIGMA_STAR_Envir03 1.00 0.0 1.797693e+308 0.0
SIGMA_STAR_Mobil11 1.00 0.0 1.797693e+308 0.0
SIGMA_STAR_Mobil14 1.00 0.0 1.797693e+308 0.0
SIGMA_STAR_Mobil16 1.00 0.0 1.797693e+308 0.0
SIGMA_STAR_Mobil17 1.00 0.0 1.797693e+308 0.0
beta_ScaledIncome_10_inf 0.00 0.0 1.797693e+308 0.0
beta_ScaledIncome_4_6 0.00 0.0 1.797693e+308 0.0
beta_ScaledIncome_6_8 0.00 0.0 1.797693e+308 0.0
beta_ScaledIncome_8_10 0.00 0.0 1.797693e+308 0.0
beta_ScaledIncome_minus_inf_4 0.00 0.0 1.797693e+308 0.0
coef_age_65_more 0.00 0.0 1.797693e+308 0.0
coef_haveChildren 0.00 0.0 1.797693e+308 0.0
coef_haveGA 0.00 0.0 1.797693e+308 0.0
coef_highEducation 0.00 0.0 1.797693e+308 0.0
coef_individualHouse 0.00 0.0 1.797693e+308 0.0
coef_intercept 0.00 0.0 1.797693e+308 0.0
coef_male 0.00 0.0 1.797693e+308 0.0
coef_moreThanOneBike 0.00 0.0 1.797693e+308 0.0
coef_moreThanOneCar 0.00 0.0 1.797693e+308 0.0
delta_1 0.10 0.0 1.797693e+308 0.0
delta_2 0.20 0.0 1.797693e+308 0.0


.. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.571 seconds) .. _sphx_glr_download_auto_examples_latent_plot_b07problem.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_b07problem.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_b07problem.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_