2. You can reformulate using reject constraints. For example:
;reject:
alt12.mode = 1 and alt1_is_pt = 0,
etc,
3. This is the easiest of all. You need to formulate a labelled experiment whereby alt1 is always mode=1, alt2 is always mode=2, and alt3 is always mode=3. You can randomise the order of the alternatives in the survey instrument. This also makes it much easier to specify alternative-specific coefficients without the need for all the interactions, and it also makes it much easier to specify that certain attributes only appear in certain alternatives. In other words, everything becomes much easier; you do not need the is_pt indicator anymore and you do not need the auxiliary model anymore. But from your first message, you wanted mode to be an attribute, and the only reason for doing this is to allow the same mode across multiple alternatives. But if you do not want this, then the solution is simply a labelled experiment. Much easier, see script below! And in a labelled experiment, there is no issue with dominant alternatives because you are no longer comparing bus versus bus but only bus versus car etc.
- Code: Select all
Design
;alts = rail, car, bus, none
;rows = 660
;block = 55
;eff = (mnl,d)
;alg = mfederov
;model:
U(rail) = asc_rail
+ b_fm_rail.dummy[0|0|0|0|0|0|0|0|0|0] * fm[2,3,4,5,6,7,8,9,10,11,1] ? First Mile dummy: 1 = walk 5m (base), 2 = walk 15m, 3 = Taxi 5m 12€, 4 = Taxi 15m 30€, 5 = Taxi 30m 50€, 6 = PT 10m 0€, 7 = PT 30m 0€, 8 = PT 50m 0€, 9 = PT 10m 3€, 10 = PT 30m 6€, 11 = PT 50m 9€
+ b_tt.dummy[0|0] * tt[2,3,1] ? time dummy: 1 = 7h (base), 2 = 8h, 3 = 9h
+ b_transfers_rail.dummy[0|0] * transfers[2,3,1] ? transfers dummy: 1 = 0 transfers, 2 = 1 transfer, 3 = 2 transfers
+ b_delay.dummy[0|0|0] * delay[2,3,4,1] ? delay dummy: 1 = on time (base), 2 = 20% 1h, 3 = 20% 2h, 4 = 20% 3h
+ b_cost.dummy[0|0|0|0] * cost[2,3,4,5,1] ? cost dummy: 1 = 25€ (base), 2 = 50€, 3 = 100€, 4 = 150€, 5 = 200€
+ b_lm_rail.dummy[0|0|0|0|0|0|0|0|0|0] * lm[2,3,4,5,6,7,8,9,10,11,1] ? LM dummy: 1 = walk 5m (base), 2 = walk 15m, 3 = Taxi 5m 12€, 4 = Taxi 15m 30€, 5 = Taxi 30m 50€, 6 = PT 10m 0€, 7 = PT 30m 0€, 8 = PT 50m 0€, 9 = PT 10m 3€, 10 = PT 30m 6€, 11 = PT 50m 9€
+ b_busfreq.dummy[0|0] * busfreq[2,3,1] ? bus frequency: 1 = every 30m (base), 2 = every 60m, 3 = 3 times a day
+ b_busstop.dummy[0|0|0|0] * busstop[2,3,4,5,1] ? distance to bus stop: 1 = right at the hotel (base), 2 = 5min, 3 = 10min, 4 = 15min, 5 = 30min
+ b_hotel.dummy[0|0|0|0] * hotel[2,3,4,5,1] ? facilities at the hotel: 1 = nothing, 2 = E-Bikes, 3 = of (own) electric car for free, 4 = charging of (own) electric car for a market price, 5 = electric car for guests
+ b_transfers2_delay2_rail * transfers.dummy[2] * delay.dummy[2]
+ b_transfers2_delay3_rail * transfers.dummy[2] * delay.dummy[3]
+ b_transfers2_delay4_rail * transfers.dummy[2] * delay.dummy[4]
+ b_transfers3_delay2_rail * transfers.dummy[3] * delay.dummy[2]
+ b_transfers3_delay3_rail * transfers.dummy[3] * delay.dummy[3]
+ b_transfers3_delay4_rail * transfers.dummy[3] * delay.dummy[4]
/
U(car) = asc_car
+ b_tt.dummy * tt
+ b_delay.dummy * delay
+ b_cost.dummy * cost
+ b_busfreq.dummy * busfreq
+ b_busstop.dummy * busstop
+ b_hotel.dummy * hotel
/
U(bus) = asc_bus
+ b_fm_bus.dummy[0|0|0|0|0|0|0|0|0|0] * fm
+ b_tt.dummy * tt
+ b_transfers_bus.dummy[0|0] * transfers
+ b_delay.dummy * delay
+ b_cost.dummy * cost
+ b_lm_bus.dummy[0|0|0|0|0|0|0|0|0|0] * lm
+ b_busfreq.dummy * busfreq
+ b_busstop.dummy * busstop
+ b_hotel.dummy * hotel
+ b_transfers2_delay2_bus * transfers.dummy[2] * delay.dummy[2]
+ b_transfers2_delay3_bus * transfers.dummy[2] * delay.dummy[3]
+ b_transfers2_delay4_bus * transfers.dummy[2] * delay.dummy[4]
+ b_transfers3_delay2_bus * transfers.dummy[3] * delay.dummy[2]
+ b_transfers3_delay3_bus * transfers.dummy[3] * delay.dummy[3]
+ b_transfers3_delay4_bus * transfers.dummy[3] * delay.dummy[4]
$
Michiel