Keeping attributes on a similar level

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Keeping attributes on a similar level

Postby anna_123 » Wed Nov 14, 2018 2:08 am

Hi everyone,

I'm fairly new to Ngene and am trying to design a survey for modelling transport mode choices. The choice task looks something like: "If you were to make a trip that is 3km long which of the following modes of transportation would you choose?"

Different choice situations will have different trip lengths and attribute levels. The respondents can choose between the following modes with the given attributes:

walk (attributes: time)
bike (attributes: time)
bike sharing (attributes: time, cost)
car as passenger (attributes: time, waiting time)
public transport (attributes: time, waiting time, cost, # of changes)

To make the choice situation realistic I think it would be good to have similar levels across the alternatives, i.e. if the trip is long, for each alternative I would show a higher attribute level. Does that make sense? How can I do that in Ngene?
Here's my syntax for the pilot study:

Code: Select all
design
;alts = fuss, rad, rad_sharing, auto_mf, oev
;rows = 12
;block = 2
;eff = (mnl,d)

;model:

U(walk)= bt_walk[-0.06]*time_walk[0,18.75,37.5,56.25,75]/
U(bike)= bt_bike[-0.06] *t_bike[2,16,30]/
U(bike_sharing)= bt_bike*t_bike+ bc_bs[-0.05] *cost_bs[0.24,1.36,2.48,3.6]/
U(car_pass)= bt_car[-0.05]*time_car[2,13.5,25]+ bwt[-0.1]*wt_car[1,8,15]/
U(pt)= bz_oev[-0.08] *time_pt[2,15,30,40]+ bc_pt[-0.06]*cost_pt[2.5,3.5]+ bwt*wt_pt[1,8,15] + bch_pt[-0.08]*ch_pt[0,1,2,3]
$

Would you suggest more parameters? Should I include sociodemographic parameters and/or an opt out?
anna_123
 
Posts: 5
Joined: Tue Nov 13, 2018 9:06 pm

Re: Keeping attributes on a similar level

Postby Michiel Bliemer » Wed Nov 14, 2018 8:12 am

Is the "3km long" fixed across all choice tasks for a single respondent, or does it vary within respondent?
If it is fixed, then it is easiest to simply create three different designs, one for short trips, one for medium length trips, and one for long trips.
If it varies across choice tasks, then you could add "trip length" as a scenario variable in your utility functions and use conditional if-then constraints to make sure that the other attribute levels make sense, e.g. if(walk.triplength = 3, time_walk = [15, 20, 25]) while the time_walk attribute has many levels, e.g. [5,10,15,20,25,30,35,40,...].

It is not common to include socio-demographics at the design stage, but if you believe this is important then you could create different surveys per segment.

You will need to add alternative-specific constants in your utility functions since your alternatives are labelled.

There is often no need to add an opt-out unless unconditional market shares are the aim of your study.

Please select attribute levels that are easy to interpret for respondents, so not 56.25 min walk time.

I cannot recommend which parameters or attributes to include, this depends on your study.

Michiel
Michiel Bliemer
 
Posts: 1727
Joined: Tue Mar 31, 2009 4:13 pm

Re: Keeping attributes on a similar level

Postby anna_123 » Thu Nov 15, 2018 5:24 pm

The trip length varies for each respondent, so we will use conditionals! Thanks for the elaborate response :)

I totally agree about using understandable attribute levels, those were just premiliminary, also thanks for catching that I forgot the ASC!
anna_123
 
Posts: 5
Joined: Tue Nov 13, 2018 9:06 pm

Re: Keeping attributes on a similar level

Postby anna_123 » Fri Nov 16, 2018 1:24 am

Hi again,

I have tried to implement the changes but already have a follow up question. Here's how I changed the syntax:

Code: Select all
design
;alts = walk, bike, bike_sharing, car_pass, pt
;rows = 12
;block = 2
;eff = (mnl,d)

;cond:
if(walk.length = 1, time_walk = [8,12,16,20]),
if(walk.length = 3, time_walk = [25,37,48,60]),
if(walk.length = 6, time_walk = [51,74,97,120]),
if(bike.length = 1, time_bike= [2,4,6,8]),
if(bike.length = 3, time_bike= [6,12,19,25]),
if(bike.length = 6, time_bike= [12,25,38,51]),
if(car_pass.length = 1, time_car= [1,3,4,6]),
if(car_pass.length = 3, time_car= [3,8,13,18]),
if(car_pass.length = 6, time_car= [6,16,26,36]),
if(pt.length = 1, time_pt= [2,4,6,8]),
if(pt.length = 3, time_pt= [6,12,19,25]),
if(pt.length = 6, time_pt= [12,25,38,51])

;model:
U(walk)= asc_walk+bt_walk[-0.06]*time_walk[8,12,16,20,25,37,48,51,60,74,97,120]+bl_walk[-0.1]*length[1,3,5]/
U(bike)= asc_bike+bt_bike[-0.06]*time_bike[2,4,6,8,12,19,25,38,51]+bl_bike[-0.1]*length/
U(bike_sharing)=asc_bike_sharing+bt_bike*time_bike+bc_bs[-0.05]*cost_bs[0.1,0.7,1.4,2]+ bl_bs[-0.1]*length/
U(car_pass)= asc_car_pass+bt_car[-0.05]*time_car[1,3,4,6,8,13,16,18,26,36]+ bwt[-0.1]*wt_car[1,8,15]+bl_car[-0.05]*length/
U(pt)=bt_pt[-0.08]*time_pt [2,4,6,8,12,19,25,38,51]+bc_pt[-0.06]*cost_pt[1.3,2.2,3.1,4.0] + bwt*wt_pt[1,8,15]+bch_pt[-0.08]*ch_pt[0,1,2,3]+bl_pt[-0.05]*length 

$


Now I get an error message stating that an attribute, 'time_walk', specified in the ';cond' property could not be found. Also ideally I would like to have the same trip lengths over all alternatives. Does that mean, I have to require that they are the same? Can I just add that when having conditionals?

Thanks again!
anna_123
 
Posts: 5
Joined: Tue Nov 13, 2018 9:06 pm

Re: Keeping attributes on a similar level

Postby Michiel Bliemer » Sun Nov 18, 2018 10:45 am

You forget to put the alternative name in front of the attribute name in your ;cond statements. I have fixed it below.
I also added length as a scenario variable where I refer to the same value across all alternatives using length[length].

Given that you have a lot of levels and complex conditional constraints, it is difficult for Ngene to find a suitable design in 12 choice tasks; 24 choice tasks works better in this case.

Code: Select all
design
;alts = walk, bike, bike_sharing, car_pass, pt
;rows = 24
;block = 4
;eff = (mnl,d)

;cond:
if(walk.length = 1, walk.time_walk = [8,12,16,20]),
if(walk.length = 3, walk.time_walk = [25,37,48,60]),
if(walk.length = 6, walk.time_walk = [51,74,97,120]),
if(bike.length = 1, bike.time_bike= [2,4,6,8]),
if(bike.length = 3, bike.time_bike= [6,12,19,25]),
if(bike.length = 6, bike.time_bike= [12,25,38,51]),
if(car_pass.length = 1, car_pass.time_car= [1,3,4,6]),
if(car_pass.length = 3, car_pass.time_car= [3,8,13,18]),
if(car_pass.length = 6, car_pass.time_car= [6,16,26,36]),
if(pt.length = 1, pt.time_pt= [2,4,6,8]),
if(pt.length = 3, pt.time_pt= [6,12,19,25]),
if(pt.length = 6, pt.time_pt= [12,25,38,51])

;model:
U(walk)= asc_walk+bt_walk[-0.06]*time_walk[8,12,16,20,25,37,48,51,60,74,97,120]+bl_walk[-0.1]*length[1,3,5]/
U(bike)= asc_bike+bt_bike[-0.06]*time_bike[2,4,6,8,12,19,25,38,51]+bl_bike[-0.1]*length[length]/
U(bike_sharing)=asc_bike_sharing+bt_bike*time_bike+bc_bs[-0.05]*cost_bs[0.1,0.7,1.4,2]+ bl_bs[-0.1]*length[length]/
U(car_pass)= asc_car_pass+bt_car[-0.05]*time_car[1,3,4,6,8,13,16,18,26,36]+ bwt[-0.1]*wt_car[1,8,15]+bl_car[-0.05]*length[length]/
U(pt)=bt_pt[-0.08]*time_pt [2,4,6,8,12,19,25,38,51]+bc_pt[-0.06]*cost_pt[1.3,2.2,3.1,4.0] + bwt*wt_pt[1,8,15]+bch_pt[-0.08]*ch_pt[0,1,2,3]+bl_pt[-0.05]*length[length]
$


Michiel
Michiel Bliemer
 
Posts: 1727
Joined: Tue Mar 31, 2009 4:13 pm

Re: Keeping attributes on a similar level

Postby anna_123 » Tue Nov 20, 2018 2:56 am

Great! Thank you very much, that really helped a lot!
anna_123
 
Posts: 5
Joined: Tue Nov 13, 2018 9:06 pm


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 8 guests