.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/programmers/plot_models.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_models.py: biogeme.models ============== 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 22 15:24:34 2023 .. GENERATED FROM PYTHON SOURCE LINES 15-30 .. code-block:: default import numpy as np import pandas as pd import matplotlib.pyplot as plt from biogeme.version import getText import biogeme.database as db from biogeme import models from biogeme.nests import ( OneNestForNestedLogit, OneNestForCrossNestedLogit, NestsForNestedLogit, NestsForCrossNestedLogit, ) from biogeme.expressions import Variable, Beta .. GENERATED FROM PYTHON SOURCE LINES 31-32 Version of Biogeme. .. GENERATED FROM PYTHON SOURCE LINES 32-35 .. 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 36-38 Definition of a database ++++++++++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 38-52 .. 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, 0, 1, 1], 'Av3': [0, 1, 1, 1, 0], } ) 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 0 1
3 2 0 4 40 1 1 1 1
4 2 1 5 50 2 1 1 0


.. GENERATED FROM PYTHON SOURCE LINES 53-55 .. code-block:: default my_data = db.Database('test', df) .. GENERATED FROM PYTHON SOURCE LINES 56-58 Piecewise linear specification ++++++++++++++++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 60-103 A piecewise linear specification (sometimes called 'spline') is a continuous but not differentiable function of the variable. It is defined based on thresholds. Between two thresholds, the function is linear. And the slope is changing after each threshold. Consider a variable :math:`t` and an interval :math:`[a, a+b]`. We define a new variable .. math:: x_{[a,b]}(t) = \max(0,\min(t-a,b)) = \left\{ \begin{array}{ll} 0 & \text{if } t < a, \\ t-a & \text{if } a \leq t < a+b, \\ b & \text{otherwise}. \end{array} \right. For each interval :math:`]-\infty,a]`, we have .. math:: x_{]-\infty,a]}(t) = \min(t,a) = \left\{ \begin{array}{ll} t & \text{if } t < a, \\ a & \text{otherwise}. \end{array} \right.. For each interval :math:`[a,+\infty[`, we have .. math:: x_{]-\infty,a]}(t) = \max(0,t-a) = \left\{ \begin{array}{ll} 0& \text{if } t < a, \\ t-a & \text{otherwise}. \end{array} \right.. If we consider a series of threshold .. math:: \alpha_1 < \alpha_2 < \ldots <\alpha_K, the piecewise linear transform of variable :math:`t` is .. math:: \sum_{k=1}^{K-1} \beta_k x_{[\alpha_k,\alpha_{k+1}]}, where :math:`\beta_k` is the slope of the linear function in interval :math:`[\alpha_k,\alpha_{k+1}]`. .. GENERATED FROM PYTHON SOURCE LINES 105-108 The next statement generates the variables, given the thresholds. A `None` is equivalent to :math:`\infty`, and can only appear first (and it means :math:`-\infty`) or last (and it means :math:`+\infty`). .. GENERATED FROM PYTHON SOURCE LINES 108-113 .. code-block:: default x = Variable('x') thresholds = [None, 90, 180, 270, None] variables = models.piecewiseVariables(x, thresholds) print(variables) .. rst-class:: sphx-glr-script-out .. code-block:: none [bioMin(x, `90.0`), bioMax(`0.0`, bioMin((x - `90.0`), `90.0`)), bioMax(`0.0`, bioMin((x - `180.0`), `90.0`)), bioMax(`0.0`, (x - `270.0`))] .. GENERATED FROM PYTHON SOURCE LINES 114-116 The next statement automatically generates the formula, including the Beta parameters, that are initialized to zero. .. GENERATED FROM PYTHON SOURCE LINES 116-119 .. code-block:: default formula = models.piecewiseFormula('x', thresholds) print(formula) .. rst-class:: sphx-glr-script-out .. code-block:: none bioMultSum((Beta('beta_x_minus_inf_90', 0, -1.3407807929942596e+154, 1.3407807929942596e+154, 0) * bioMin(x, `90.0`)), (Beta('beta_x_90_180', 0, -1.3407807929942596e+154, 1.3407807929942596e+154, 0) * bioMax(`0.0`, bioMin((x - `90.0`), `90.0`))), (Beta('beta_x_180_270', 0, -1.3407807929942596e+154, 1.3407807929942596e+154, 0) * bioMax(`0.0`, bioMin((x - `180.0`), `90.0`))), (Beta('beta_x_270_inf', 0, -1.3407807929942596e+154, 1.3407807929942596e+154, 0) * bioMax(`0.0`, (x - `270.0`)))) .. GENERATED FROM PYTHON SOURCE LINES 120-123 It is also possible to initialize the Beta parameters with other values. Note also that the first argument can be either the name of the variable (as in the previous call) or the variable itself. .. GENERATED FROM PYTHON SOURCE LINES 123-127 .. code-block:: default betas = [-0.016806308, -0.010491137, -0.002012234, -0.020051303] formula = models.piecewiseFormula(x, thresholds, betas) print(formula) .. rst-class:: sphx-glr-script-out .. code-block:: none bioMultSum((`-0.016806308` * bioMin(x, `90.0`)), (`-0.010491137` * bioMax(`0.0`, bioMin((x - `90.0`), `90.0`))), (`-0.002012234` * bioMax(`0.0`, bioMin((x - `180.0`), `90.0`))), (`-0.020051303` * bioMax(`0.0`, (x - `270.0`)))) .. GENERATED FROM PYTHON SOURCE LINES 128-129 We provide a plot of a piecewise linear specification. .. GENERATED FROM PYTHON SOURCE LINES 131-140 .. code-block:: default X = np.arange(0, 300, 0.1) Y = [ models.piecewiseFunction( x, thresholds, [-0.016806308, -0.010491137, -0.002012234, -0.020051303] ) for x in X ] plt.plot(X, Y) .. image-sg:: /auto_examples/programmers/images/sphx_glr_plot_models_001.png :alt: plot models :srcset: /auto_examples/programmers/images/sphx_glr_plot_models_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none [] .. GENERATED FROM PYTHON SOURCE LINES 141-143 Logit +++++ .. GENERATED FROM PYTHON SOURCE LINES 145-148 .. code-block:: default V = {1: Variable('Variable1'), 2: 0.1, 3: -0.1} av = {1: Variable('Av1'), 2: Variable('Av2'), 3: Variable('Av3')} .. GENERATED FROM PYTHON SOURCE LINES 149-151 Calculation of the (log of the) logit for the three alternatives, based on their availability. .. GENERATED FROM PYTHON SOURCE LINES 153-154 Alternative 1 .. GENERATED FROM PYTHON SOURCE LINES 154-157 .. code-block:: default p1 = models.logit(V, av, 1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0. , 0.78614804, 0.95689275, 0.9644926 , 0.99260846]) .. GENERATED FROM PYTHON SOURCE LINES 158-161 .. code-block:: default p1 = models.loglogit(V, av, 1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-1.79769313e+308, -2.40610156e-001, -4.40639679e-002, -3.61531156e-002, -7.41899415e-003]) .. GENERATED FROM PYTHON SOURCE LINES 162-163 Alternative 2 .. GENERATED FROM PYTHON SOURCE LINES 163-166 .. code-block:: default p2 = models.logit(V, av, 2) p2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([1. , 0.11758308, 0. , 0.01952317, 0.00739154]) .. GENERATED FROM PYTHON SOURCE LINES 167-170 .. code-block:: default p2 = models.loglogit(V, av, 2) p2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([ 0.00000000e+000, -2.14061016e+000, -1.79769313e+308, -3.93615312e+000, -4.90741899e+000]) .. GENERATED FROM PYTHON SOURCE LINES 171-172 Alternative 3 .. GENERATED FROM PYTHON SOURCE LINES 172-175 .. code-block:: default p3 = models.logit(V, av, 3) p3.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0. , 0.09626888, 0.04310725, 0.01598422, 0. ]) .. GENERATED FROM PYTHON SOURCE LINES 176-179 .. code-block:: default p3 = models.loglogit(V, av, 3) p3.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-1.79769313e+308, -2.34061016e+000, -3.14406397e+000, -4.13615312e+000, -1.79769313e+308]) .. GENERATED FROM PYTHON SOURCE LINES 180-182 Calculation of the log of the logit for the three alternatives, **assuming that they are all available**. .. GENERATED FROM PYTHON SOURCE LINES 184-185 Alternative 1 .. GENERATED FROM PYTHON SOURCE LINES 185-188 .. code-block:: default pa1 = models.logit(V, av=None, i=1) pa1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.57489742, 0.78614804, 0.90903106, 0.9644926 , 0.98663764]) .. GENERATED FROM PYTHON SOURCE LINES 189-192 .. code-block:: default pa1 = models.loglogit(V, av=None, i=1) pa1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.55356365, -0.24061016, -0.09537602, -0.03615312, -0.01345244]) .. GENERATED FROM PYTHON SOURCE LINES 193-194 Alternative 2 .. GENERATED FROM PYTHON SOURCE LINES 194-197 .. code-block:: default pa2 = models.logit(V, av=None, i=2) pa2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.23373585, 0.11758308, 0.05001782, 0.01952317, 0.00734708]) .. GENERATED FROM PYTHON SOURCE LINES 198-201 .. code-block:: default pa2 = models.loglogit(V, av=None, i=2) pa2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-1.45356365, -2.14061016, -2.99537602, -3.93615312, -4.91345244]) .. GENERATED FROM PYTHON SOURCE LINES 202-203 Alternative 3 .. GENERATED FROM PYTHON SOURCE LINES 203-206 .. code-block:: default pa3 = models.logit(V, av=None, i=3) pa3.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.19136673, 0.09626888, 0.04095112, 0.01598422, 0.00601528]) .. GENERATED FROM PYTHON SOURCE LINES 207-210 .. code-block:: default pa3 = models.loglogit(V, av=None, i=3) pa3.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-1.65356365, -2.34061016, -3.19537602, -4.13615312, -5.11345244]) .. GENERATED FROM PYTHON SOURCE LINES 211-213 Boxcox transform ++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 215-223 The Box-Cox transform of a variable :math:`x` is defined as .. math:: B(x,\ell) =\frac{x^{\ell}-1}{\ell}, where :math:`\ell` is a parameter that can be estimated from data. It has the property that .. math:: \lim_{\ell \to 0} B(x,\ell)=\log(x). .. GENERATED FROM PYTHON SOURCE LINES 223-226 .. code-block:: default x = Variable('Variable1') models.boxcox(x, 4) .. rst-class:: sphx-glr-script-out .. code-block:: none {{0:{{0:(((Variable1 ** `4.0`) - `1.0`) / `4.0`), 1:(((log(Variable1) + (`4.0` * (log(Variable1) ** `2.0`))) + ((`16.0` * (log(Variable1) ** `3.0`)) / `6.0`)) + ((`64.0` * (log(Variable1) ** `4.0`)) / `24.0`))}[((`1e-05` > `4.0`) * ((-`1e-05`) < `4.0`))], 1:`0.0`}[(Variable1 == `0.0`)] .. GENERATED FROM PYTHON SOURCE LINES 227-230 .. code-block:: default x = Variable('Variable1') models.boxcox(x, 0) .. rst-class:: sphx-glr-script-out .. code-block:: none {{0:{{0:(((Variable1 ** `0.0`) - `1.0`) / `0.0`), 1:(((log(Variable1) + (`0.0` * (log(Variable1) ** `2.0`))) + ((`0.0` * (log(Variable1) ** `3.0`)) / `6.0`)) + ((`0.0` * (log(Variable1) ** `4.0`)) / `24.0`))}[((`1e-05` > `0.0`) * ((-`1e-05`) < `0.0`))], 1:`0.0`}[(Variable1 == `0.0`)] .. GENERATED FROM PYTHON SOURCE LINES 231-235 .. code-block:: default ell = Variable('Variable2') e = models.boxcox(x, ell) print(e) .. rst-class:: sphx-glr-script-out .. code-block:: none {{0:{{0:(((Variable1 ** Variable2) - `1.0`) / Variable2), 1:(((log(Variable1) + (Variable2 * (log(Variable1) ** `2.0`))) + (((Variable2 ** `2.0`) * (log(Variable1) ** `3.0`)) / `6.0`)) + (((Variable2 ** `3.0`) * (log(Variable1) ** `4.0`)) / `24.0`))}[((Variable2 < `1e-05`) * (Variable2 > (-`1e-05`)))], 1:`0.0`}[(Variable1 == `0.0`)] .. GENERATED FROM PYTHON SOURCE LINES 236-238 .. code-block:: default e.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.00000000e+00, 5.24287500e+04, 6.86303774e+12, 3.02231455e+22, 1.77635684e+33]) .. GENERATED FROM PYTHON SOURCE LINES 239-241 We numerically illustrate that, when :math:`\lambda` goes to 0, the BoxCox transform of :math:`x` converges to the log of :math:`x`. .. GENERATED FROM PYTHON SOURCE LINES 243-249 .. code-block:: default for ell in range(1, 16): x = 3 bc = models.boxcox(x, 10**-ell).getValue() print(f'ell=l0^(-{ell}): {bc:.6g} - {np.log(x):.6g} = {bc - np.log(x):.6g}') .. rst-class:: sphx-glr-script-out .. code-block:: none ell=l0^(-1): 1.16123 - 1.09861 = 0.0626195 ell=l0^(-2): 1.10467 - 1.09861 = 0.00605691 ell=l0^(-3): 1.09922 - 1.09861 = 0.000603696 ell=l0^(-4): 1.09867 - 1.09861 = 6.03497e-05 ell=l0^(-5): 1.09862 - 1.09861 = 6.03476e-06 ell=l0^(-6): 1.09861 - 1.09861 = 1.20695e-06 ell=l0^(-7): 1.09861 - 1.09861 = 1.20695e-07 ell=l0^(-8): 1.09861 - 1.09861 = 1.20695e-08 ell=l0^(-9): 1.09861 - 1.09861 = 1.20695e-09 ell=l0^(-10): 1.09861 - 1.09861 = 1.20695e-10 ell=l0^(-11): 1.09861 - 1.09861 = 1.20695e-11 ell=l0^(-12): 1.09861 - 1.09861 = 1.20703e-12 ell=l0^(-13): 1.09861 - 1.09861 = 1.20792e-13 ell=l0^(-14): 1.09861 - 1.09861 = 1.19904e-14 ell=l0^(-15): 1.09861 - 1.09861 = 1.11022e-15 .. GENERATED FROM PYTHON SOURCE LINES 250-252 MEV models ++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 254-262 MEV models are defined as .. math:: \frac{e^{V_i + \ln G_i(e^{V_1},\ldots,e^{V_J})}}{\sum_j e^{V_j + \ln G_j(e^{V_1},\ldots,e^{V_J})}}, where :math:`G` is a generating function, and .. math:: G_i=\frac{\partial G}{\partial y_i}(e^{V_1},\ldots,e^{V_J}). .. GENERATED FROM PYTHON SOURCE LINES 264-276 **Nested logit model**: the :math:`G` function for the nested logit model is defined such that .. math:: G_i=\frac{\partial G}{\partial y_i}(e^{V_1},\ldots,e^{V_J}) = \mu e^{(\mu_m-1)V_i} \left(\sum_{i=1}^{J_m} e^{\mu_m V_i}\right)^{\frac{\mu}{\mu_m}-1}, where the choice set is partitioned into :math:`J_m` nests, each associated with a parameter :math:`\mu_m`, and :math:`\mu` is the scale parameter. The condition is :math:`0 \leq \mu \leq \mu_m` must be verified. In general, :math:`\mu` is normalized to 1.0. .. GENERATED FROM PYTHON SOURCE LINES 278-282 This is an example with 5 alternatives. Nest A contains alternatives 1, 2 and 4, and is associated with a scale parameter :math:`\mu_A=1.2`. Nest B contains alternatives 3 and 5, and is associated with a scale parameter :math:`\mu_B=2.3`. .. GENERATED FROM PYTHON SOURCE LINES 284-287 .. code-block:: default V = {1: Variable('Variable1'), 2: 0.1, 3: -0.1, 4: -0.2, 5: 0.2} av = {1: 1, 2: 0, 3: 1, 4: 1, 5: 1} .. GENERATED FROM PYTHON SOURCE LINES 288-289 Definition of the nests. .. GENERATED FROM PYTHON SOURCE LINES 289-298 .. code-block:: default nest_a = OneNestForNestedLogit( nest_param=1.2, list_of_alternatives=[1, 2, 4], name='nest_a' ) nest_b = OneNestForNestedLogit( nest_param=2.3, list_of_alternatives=[3, 5], name='name_b' ) nests = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) .. GENERATED FROM PYTHON SOURCE LINES 299-302 .. code-block:: default p1 = models.nested(V, availability=av, nests=nests, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.55789028, 0.78684631, 0.9138115 , 0.96786857, 0.98836318]) .. GENERATED FROM PYTHON SOURCE LINES 303-304 If all the alternatives are available, define the availability dictionary as None. .. GENERATED FROM PYTHON SOURCE LINES 304-307 .. code-block:: default p1 = models.nested(V, availability=None, nests=nests, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.46404048, 0.72661956, 0.88850463, 0.959216 , 0.98563615]) .. GENERATED FROM PYTHON SOURCE LINES 308-309 The syntax is similar to obtain the log of the probability. .. GENERATED FROM PYTHON SOURCE LINES 309-312 .. code-block:: default p2 = models.lognested(V, availability=av, nests=nests, choice=1) p2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.58359296, -0.23972233, -0.09013096, -0.03265898, -0.01170506]) .. GENERATED FROM PYTHON SOURCE LINES 313-316 .. code-block:: default p2 = models.lognested(V, availability=None, nests=nests, choice=1) p2.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.7677835 , -0.31935224, -0.11821542, -0.04163899, -0.01446801]) .. GENERATED FROM PYTHON SOURCE LINES 317-321 If the value of the parameter :math:`\mu` is not 1, there is another function to call. Note that, for the sake of computational efficiency, it is not verified by the code if the condition :math:`0 \leq \mu \leq \mu_m` is valid. .. GENERATED FROM PYTHON SOURCE LINES 321-324 .. code-block:: default p1 = models.nestedMevMu(V, availability=av, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.57151598, 0.80643395, 0.92814743, 0.9755475 , 0.9919295 ]) .. GENERATED FROM PYTHON SOURCE LINES 325-328 .. code-block:: default p1 = models.nestedMevMu(V, availability=None, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.47623579, 0.74427029, 0.90223305, 0.96678265, 0.98918584]) .. GENERATED FROM PYTHON SOURCE LINES 329-332 .. code-block:: default p1 = models.lognestedMevMu(V, availability=av, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.55946283, -0.21513329, -0.07456469, -0.02475643, -0.00810324]) .. GENERATED FROM PYTHON SOURCE LINES 333-336 .. code-block:: default p1 = models.lognestedMevMu(V, availability=None, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.74184219, -0.29535101, -0.10288243, -0.03378157, -0.01087306]) .. GENERATED FROM PYTHON SOURCE LINES 337-338 The validity of the nested structure can be verified. .. GENERATED FROM PYTHON SOURCE LINES 338-343 .. code-block:: default nest_c = OneNestForNestedLogit(nest_param=2.3, list_of_alternatives=[3], name='name_c') nests = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) is_valid, msg = nests.check_partition() .. GENERATED FROM PYTHON SOURCE LINES 344-346 .. code-block:: default is_valid .. rst-class:: sphx-glr-script-out .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 347-349 .. code-block:: default print(msg) .. rst-class:: sphx-glr-script-out .. code-block:: none ; .. GENERATED FROM PYTHON SOURCE LINES 350-351 If an alternative belongs to two nests .. GENERATED FROM PYTHON SOURCE LINES 353-358 .. code-block:: default nest_a = OneNestForNestedLogit(nest_param=1.2, list_of_alternatives=[1, 2, 3, 4]) nest_b = OneNestForNestedLogit(nest_param=2.3, list_of_alternatives=[3, 5]) nests = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) is_valid, msg = nests.check_partition() .. GENERATED FROM PYTHON SOURCE LINES 359-361 .. code-block:: default is_valid .. rst-class:: sphx-glr-script-out .. code-block:: none False .. GENERATED FROM PYTHON SOURCE LINES 362-364 .. code-block:: default print(msg) .. rst-class:: sphx-glr-script-out .. code-block:: none ; The following alternatives appear both in nests nest_1 and nest_2: {3}. .. GENERATED FROM PYTHON SOURCE LINES 365-381 **Cross-nested logit model**: the :math:`G` function for the cross nested logit model is defined such that .. math:: G_i=\frac{\partial G}{\partial y_i}(e^{V_1},\ldots,e^{V_J}) = \mu \sum_{m=1}^{M} \alpha_{im}^{\frac{\mu_m}{\mu}} e^{(\mu_m-1) V_i}\left( \sum_{j=1}^{J} \alpha_{jm}^{\frac{\mu_m}{\mu}} e^{\mu_m V_j} \right)^{\frac{\mu}{\mu_m}-1}, where each nest :math:`m` is associated with a parameter :math:`\mu_m` and, for each alternative :math:`i`, a parameter :math:`\alpha_{im} \geq 0` that captures the degree of membership of alternative :math:`i` to nest :math:`m`. :math:`\mu` is the scale parameter. For each alternative :math:`i`, there must be at least one nest :math:`m` such that :math:`\alpha_{im}>0`. The condition :math:`0 \leq \mu \leq \mu_m` must be also verified. In general, :math:`\mu` is normalized to 1.0. .. GENERATED FROM PYTHON SOURCE LINES 383-390 This is an example with 5 alternatives and two nests. - Alt. 1 belongs to nest A. - Alt. 2 belongs to nest A. - Alt. 3 belongs to both nest A (50%) and nest B (50%). - Alt. 4 belongs to nest B. - Alt. 5 belongs to nest B. .. GENERATED FROM PYTHON SOURCE LINES 392-404 .. code-block:: default V = {1: Variable('Variable1'), 2: 0.1, 3: -0.1, 4: -0.2, 5: 0.2} av = {1: 1, 2: 0, 3: 1, 4: 1, 5: 1} alpha_a = {1: 1, 2: 1, 3: 0.5, 4: 0, 5: 0} alpha_b = {1: 0, 2: 0, 3: 0.5, 4: 1, 5: 1} nest_a = OneNestForCrossNestedLogit( nest_param=1.2, dict_of_alpha=alpha_a, name='Nest a' ) nest_b = OneNestForCrossNestedLogit( nest_param=2.3, dict_of_alpha=alpha_b, name='Nest b' ) nests = NestsForCrossNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) .. GENERATED FROM PYTHON SOURCE LINES 405-408 .. code-block:: default p1 = models.cnl(V, availability=av, nests=nests, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.60161076, 0.81080413, 0.92317655, 0.97098919, 0.98933903]) .. GENERATED FROM PYTHON SOURCE LINES 409-410 If all the alternatives are available, define the availability dictionary as None. .. GENERATED FROM PYTHON SOURCE LINES 410-413 .. code-block:: default p1 = models.cnl(V, availability=None, nests=nests, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.49345928, 0.74695583, 0.89735316, 0.9622809 , 0.98660661]) .. GENERATED FROM PYTHON SOURCE LINES 414-418 If the value of the parameter :math:`\mu` is not 1, there is another function to call. Note that, for the sake of computational efficiency, it is not verified by the code if the condition :math:`0 \leq \mu \leq \mu_m` is verified. .. GENERATED FROM PYTHON SOURCE LINES 418-421 .. code-block:: default p1 = models.cnlmu(V, availability=av, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.6110354 , 0.828654 , 0.93675704, 0.97837752, 0.99280536]) .. GENERATED FROM PYTHON SOURCE LINES 422-425 .. code-block:: default p1 = models.cnlmu(V, availability=None, nests=nests, choice=1, mu=1.1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.50313975, 0.76313184, 0.91036491, 0.96956188, 0.99005685]) .. GENERATED FROM PYTHON SOURCE LINES 426-431 If the sample is endogenous, a correction must be included in the model, as proposed by `Bierlaire, Bolduc and McFadden (2008) `_. In this case, the generating function must first be defined, and the MEV model with correction is then called. .. GENERATED FROM PYTHON SOURCE LINES 431-434 .. code-block:: default logGi = models.getMevForCrossNested(V, availability=av, nests=nests) logGi .. rst-class:: sphx-glr-script-out .. code-block:: none {1: logzero(bioMultSum((((`1.0` ** `1.2`) * exp((`0.19999999999999996` * Variable1))) * (bioMultSum(((`1.0` * (`1.0` ** `1.2`)) * exp((`1.2` * Variable1))), ((`0.0` * (`1.0` ** `1.2`)) * exp(`0.12`)), ((`1.0` * (`0.5` ** `1.2`)) * exp(`-0.12`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`-0.24`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`0.24`))) ** `-0.16666666666666663`)), (((`0.0` ** `2.3`) * exp((`1.2999999999999998` * Variable1))) * (bioMultSum(((`1.0` * (`0.0` ** `2.3`)) * exp((`2.3` * Variable1))), ((`0.0` * (`0.0` ** `2.3`)) * exp(`0.22999999999999998`)), ((`1.0` * (`0.5` ** `2.3`)) * exp(`-0.22999999999999998`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`-0.45999999999999996`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`0.45999999999999996`))) ** `-0.5652173913043478`)))), 2: logzero(bioMultSum((((`1.0` ** `1.2`) * exp(`0.019999999999999997`)) * (bioMultSum(((`1.0` * (`1.0` ** `1.2`)) * exp((`1.2` * Variable1))), ((`0.0` * (`1.0` ** `1.2`)) * exp(`0.12`)), ((`1.0` * (`0.5` ** `1.2`)) * exp(`-0.12`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`-0.24`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`0.24`))) ** `-0.16666666666666663`)), (((`0.0` ** `2.3`) * exp(`0.12999999999999998`)) * (bioMultSum(((`1.0` * (`0.0` ** `2.3`)) * exp((`2.3` * Variable1))), ((`0.0` * (`0.0` ** `2.3`)) * exp(`0.22999999999999998`)), ((`1.0` * (`0.5` ** `2.3`)) * exp(`-0.22999999999999998`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`-0.45999999999999996`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`0.45999999999999996`))) ** `-0.5652173913043478`)))), 3: logzero(bioMultSum((((`0.5` ** `1.2`) * exp(`-0.019999999999999997`)) * (bioMultSum(((`1.0` * (`1.0` ** `1.2`)) * exp((`1.2` * Variable1))), ((`0.0` * (`1.0` ** `1.2`)) * exp(`0.12`)), ((`1.0` * (`0.5` ** `1.2`)) * exp(`-0.12`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`-0.24`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`0.24`))) ** `-0.16666666666666663`)), (((`0.5` ** `2.3`) * exp(`-0.12999999999999998`)) * (bioMultSum(((`1.0` * (`0.0` ** `2.3`)) * exp((`2.3` * Variable1))), ((`0.0` * (`0.0` ** `2.3`)) * exp(`0.22999999999999998`)), ((`1.0` * (`0.5` ** `2.3`)) * exp(`-0.22999999999999998`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`-0.45999999999999996`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`0.45999999999999996`))) ** `-0.5652173913043478`)))), 4: logzero(bioMultSum((((`0.0` ** `1.2`) * exp(`-0.039999999999999994`)) * (bioMultSum(((`1.0` * (`1.0` ** `1.2`)) * exp((`1.2` * Variable1))), ((`0.0` * (`1.0` ** `1.2`)) * exp(`0.12`)), ((`1.0` * (`0.5` ** `1.2`)) * exp(`-0.12`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`-0.24`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`0.24`))) ** `-0.16666666666666663`)), (((`1.0` ** `2.3`) * exp(`-0.25999999999999995`)) * (bioMultSum(((`1.0` * (`0.0` ** `2.3`)) * exp((`2.3` * Variable1))), ((`0.0` * (`0.0` ** `2.3`)) * exp(`0.22999999999999998`)), ((`1.0` * (`0.5` ** `2.3`)) * exp(`-0.22999999999999998`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`-0.45999999999999996`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`0.45999999999999996`))) ** `-0.5652173913043478`)))), 5: logzero(bioMultSum((((`0.0` ** `1.2`) * exp(`0.039999999999999994`)) * (bioMultSum(((`1.0` * (`1.0` ** `1.2`)) * exp((`1.2` * Variable1))), ((`0.0` * (`1.0` ** `1.2`)) * exp(`0.12`)), ((`1.0` * (`0.5` ** `1.2`)) * exp(`-0.12`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`-0.24`)), ((`1.0` * (`0.0` ** `1.2`)) * exp(`0.24`))) ** `-0.16666666666666663`)), (((`1.0` ** `2.3`) * exp(`0.25999999999999995`)) * (bioMultSum(((`1.0` * (`0.0` ** `2.3`)) * exp((`2.3` * Variable1))), ((`0.0` * (`0.0` ** `2.3`)) * exp(`0.22999999999999998`)), ((`1.0` * (`0.5` ** `2.3`)) * exp(`-0.22999999999999998`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`-0.45999999999999996`)), ((`1.0` * (`1.0` ** `2.3`)) * exp(`0.45999999999999996`))) ** `-0.5652173913043478`))))} .. GENERATED FROM PYTHON SOURCE LINES 435-439 .. code-block:: default correction = {1: -0.1, 2: 0.1, 3: 0.2, 4: -0.2, 5: 0} p1 = models.mev_endogenousSampling(V, logGi, av, correction, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.57460723, 0.79415806, 0.91584339, 0.96822294, 0.98835331]) .. GENERATED FROM PYTHON SOURCE LINES 440-444 .. code-block:: default correction = {1: -0.1, 2: 0.1, 3: 0.2, 4: -0.2, 5: 0} p1 = models.logmev_endogenousSampling(V, logGi, av, correction, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.55406855, -0.23047277, -0.0879099 , -0.03229291, -0.01171504]) .. GENERATED FROM PYTHON SOURCE LINES 445-449 .. code-block:: default correction = {1: -0.1, 2: 0.1, 3: 0.2, 4: -0.2, 5: 0} p1 = models.mev_endogenousSampling(V, logGi, av=None, correction=correction, choice=1) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([0.46401513, 0.72247789, 0.8853334 , 0.95771369, 0.98503002]) .. GENERATED FROM PYTHON SOURCE LINES 450-456 .. code-block:: default correction = {1: -0.1, 2: 0.1, 3: 0.2, 4: -0.2, 5: 0} p1 = models.logmev_endogenousSampling( V, logGi, av=None, correction=correction, choice=1 ) p1.getValue_c(my_data, prepareIds=True) .. rst-class:: sphx-glr-script-out .. code-block:: none array([-0.76783811, -0.32506845, -0.12179098, -0.04320641, -0.01508316]) .. GENERATED FROM PYTHON SOURCE LINES 457-458 The MEV generating function for the following models are available. .. GENERATED FROM PYTHON SOURCE LINES 460-461 Nested logit model .. GENERATED FROM PYTHON SOURCE LINES 461-471 .. code-block:: default V = {1: Variable('Variable1'), 2: 0.1, 3: -0.1, 4: -0.2, 5: 0.2} av = {1: 1, 2: 0, 3: 1, 4: 1, 5: 1} nest_a = OneNestForNestedLogit( nest_param=Beta('muA', 1.2, 1.0, None, 0), list_of_alternatives=[1, 2, 4] ) nest_b = OneNestForNestedLogit( nest_param=Beta('muB', 2.3, 1.0, None, 0), list_of_alternatives=[3, 5] ) nests = NestsForNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) .. GENERATED FROM PYTHON SOURCE LINES 472-475 .. code-block:: default logGi = models.getMevForNested(V, availability=None, nests=nests) logGi .. rst-class:: sphx-glr-script-out .. code-block:: none {1: (((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1) + (((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 2: (((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`) + (((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 4: (((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`) + (((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 3: (((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`) + (((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`)), exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))))), 5: (((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`) + (((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`)), exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`))))))} .. GENERATED FROM PYTHON SOURCE LINES 476-477 And with the :math:`\mu` parameter. .. GENERATED FROM PYTHON SOURCE LINES 479-482 .. code-block:: default logGi = models.getMevForNestedMu(V, availability=None, nests=nests, mu=1.1) logGi .. rst-class:: sphx-glr-script-out .. code-block:: none {1: ((log(`1.1`) + ((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1)) + (((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 2: ((log(`1.1`) + ((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`)) + (((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 4: ((log(`1.1`) + ((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`)) + (((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`)), exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`)))))), 3: ((log(`1.1`) + ((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`)) + (((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`)), exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))))), 5: ((log(`1.1`) + ((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`)) + (((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`) * log(bioMultSum(exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`)), exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`))))))} .. GENERATED FROM PYTHON SOURCE LINES 483-484 Cross nested logit model .. GENERATED FROM PYTHON SOURCE LINES 486-497 .. code-block:: default V = {1: Variable('Variable1'), 2: 0.1, 3: -0.1, 4: -0.2, 5: 0.2} av = {1: 1, 2: 0, 3: 1, 4: 1, 5: 1} alpha_a = {1: 1, 2: 1, 3: 0.5, 4: 0, 5: 0} alpha_b = {1: 0, 2: 0, 3: 0.5, 4: 1, 5: 1} nest_a = OneNestForCrossNestedLogit( nest_param=Beta('muA', 1.2, 1.0, None, 0), dict_of_alpha=alpha_a ) nest_b = OneNestForCrossNestedLogit( nest_param=Beta('muB', 2.3, 1.0, None, 0), dict_of_alpha=alpha_b ) nests = NestsForCrossNestedLogit(choice_set=list(V), tuple_of_nests=(nest_a, nest_b)) .. GENERATED FROM PYTHON SOURCE LINES 498-501 .. code-block:: default logGi = models.getMevForCrossNested(V, availability=None, nests=nests) logGi .. rst-class:: sphx-glr-script-out .. code-block:: none {1: logzero(bioMultSum((((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1))) * (bioMultSum(((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1))) * (bioMultSum(((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))))), 2: logzero(bioMultSum((((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`))) * (bioMultSum(((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`))) * (bioMultSum(((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))))), 3: logzero(bioMultSum((((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`))) * (bioMultSum(((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`))) * (bioMultSum(((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))))), 4: logzero(bioMultSum((((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`))) * (bioMultSum(((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`))) * (bioMultSum(((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))))), 5: logzero(bioMultSum((((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`))) * (bioMultSum(((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`))) * (bioMultSum(((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.0` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`)))))} .. GENERATED FROM PYTHON SOURCE LINES 502-503 Cross nested logit model with :math:`\mu` parameter. .. GENERATED FROM PYTHON SOURCE LINES 505-507 .. code-block:: default logGi = models.getMevForCrossNestedMu(V, availability=None, nests=nests, mu=1.1) logGi .. rst-class:: sphx-glr-script-out .. code-block:: none {1: log((`1.1` * bioMultSum((((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1))) * (bioMultSum(((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * Variable1))) * (bioMultSum(((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`)))))), 2: log((`1.1` * bioMultSum((((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`))) * (bioMultSum(((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.1`))) * (bioMultSum(((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`)))))), 3: log((`1.1` * bioMultSum((((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`))) * (bioMultSum(((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.1`))) * (bioMultSum(((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`)))))), 4: log((`1.1` * bioMultSum((((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`))) * (bioMultSum(((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `-0.2`))) * (bioMultSum(((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`)))))), 5: log((`1.1` * bioMultSum((((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`))) * (bioMultSum(((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`1.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`0.0` ** (Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muA', 1.2, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))), (((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp(((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) - `1.0`) * `0.2`))) * (bioMultSum(((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * Variable1))), ((`0.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.1`))), ((`0.5` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.1`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `-0.2`))), ((`1.0` ** (Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) / `1.1`)) * exp((Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0) * `0.2`)))) ** ((`1.1` / Beta('muB', 2.3, 1.0, 1.3407807929942596e+154, 0)) - `1.0`))))))} .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.331 seconds) .. _sphx_glr_download_auto_examples_programmers_plot_models.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_models.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_models.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_