5: MTC MNL Mode Choice, Motorized Travel Time¶

Model 5 relaxes the time constraints in Model 1 by specifying distinct time variables for the motorized and non-motorized modes based on our expectation that travelers are likely to be more sensitive to travel time by non-motorized modes. (pp. 111)

d = larch.examples.MTC()
m = larch.Model(dataservice=d)

from larch.roles import P, X, PX
m.utility_co[2] = P("ASC_SR2")  + P("hhinc#2,3") * X("hhinc")
m.utility_co[3] = P("ASC_SR3P") + P("hhinc#2,3") * X("hhinc")
m.utility_co[4] = P("ASC_TRAN") + P("hhinc#4") * X("hhinc")
m.utility_co[5] = P("ASC_BIKE") + P("hhinc#5") * X("hhinc")
m.utility_co[6] = P("ASC_WALK") + P("hhinc#6") * X("hhinc")


To only use the proper parameter for Motorized and Nonmotorized, we can take advantage of all motorized options being alternatives 1 through 4, and nonmotorized being 5 and 6.

m.utility_ca = (
+ (P("motorized_time") * X("(altnum <= 4) * tottime")
+ P("nonmotorized_time") * X("(altnum >4) * tottime")
+ PX("totcost"))
)

m.availability_var = '_avail_'
m.choice_ca_var = '_choice_'

m.ordering = (
("LOS", "totcost", "motorized_time", "nonmotorized_time", ),
("Income", "hhinc.*", ),
("ASCs", "ASC.*", ),
)

>>> m.load_data()
>>> m.maximize_loglike()
┣ ...Optimization terminated successfully...
>>> m.calculate_parameter_covariance()
>>> m.loglike()
-3616.893...

>>> print(m.pfo()[['value','std_err','t_stat','robust_std_err','robust_t_stat']])
value  std_err   t_stat  robust_std_err  robust_t_stat
Category Parameter
LOS      totcost           -0.0050   0.0002 -20.6810          0.0003       -17.0869
motorized_time    -0.0431   0.0035 -12.2883          0.0039       -11.1694
nonmotorized_time -0.0687   0.0053 -12.9009          0.0054       -12.7348
Income   hhinc#2,3         -0.0015   0.0014  -1.1026          0.0015        -1.0211
hhinc#4           -0.0054   0.0018  -2.9747          0.0018        -3.0814
hhinc#5           -0.0125   0.0053  -2.3659          0.0064        -1.9487
hhinc#6           -0.0095   0.0031  -3.1135          0.0033        -2.9229
ASCs     ASC_BIKE          -1.8444   0.3258  -5.6616          0.3759        -4.9067
ASC_SR2           -2.2619   0.0982 -23.0253          0.1076       -21.0307
ASC_SR3P          -3.6768   0.1242 -29.6087          0.1307       -28.1274
ASC_TRAN          -0.8522   0.1393  -6.1198          0.1368        -6.2296
ASC_WALK           0.4768   0.2522   1.8906          0.2593         1.8385