A design for a mobility tool ownership SP experiment

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

A design for a mobility tool ownership SP experiment

Postby thoscha » Tue Oct 05, 2021 12:59 am

Hi everyone,

I would like to conduct an SP experiment on mobility tool ownership and therefore need an appropriate choice design. There are 3 "single" alternatives: Bike (B), Car (C), Public transport (PT); and 4 bundles: Car and Bike (C_B), Car and PT (C_PT), PT and Bike (PT_B) as well as one that entails all three mobility tools: Car, PT and Bike (C_PT_B), which is the reference alternative/bundle. There are dummy and continuous attributes. The point is that C_PT_B contains all attributes with different levels and the other alternatives basically resemble a subset of it. I have come up with a set up as follows:

Code: Select all
Design
;alts = C, PT, B, C_PT, C_B, PT_B, C_PT_B
;rows = 80
;block = 10
;eff = (mnl, d)

;model:
U(C_PT_B) = b_workfromhome.dummy[0|0]*wfh[1,2,3] + b_covidsituation.dummy[0|0]*covsit[1,2,3] +
                   b_carsize.dummy[0|0|0|0]*csize[1,2,3,4,5] + b_carfuel.dummy[0|0]*cfuel[1,2,3] + b_carfuelprice[-0.01]*cfuelprice[1,2,3] +
                   b_ptsubscription.dummy[0|0]*ptsub[1,2,3] + b_ptsubscriptionprice[-0.01]*ptsubprice[1,2,3] +
                   b_biketype.dummy[0|0]*btype[1,2,3] /
U(C) =         b_C_asc /
U(PT) =       b_PT_asc /
U(B) =         b_B_asc /
U(C_PT) =   b_C_PT_asc /
U(C_B) =     b_C_B_asc /
U(PT_B) =   b_PT_B_asc
$



There are a couple of questions I have concerning this approach:

1. Is this a valid approach since the attribute levels do not change (aka are fixed) between the alternatives/bundles for one choice situation? I could not find a valid design where I included the relevant attributes in all other alternatives.
2. We do account for alternative specific constants, but would only be able to estimate generic parameters (b_...), right?
3. Would it make sense to include an opt out alternative in the sense "I do not choose any of these alternatives?

Thank you in advance for your feedback and best regards, Thomas
thoscha
 
Posts: 5
Joined: Fri Oct 01, 2021 12:22 am

Re: A design for a mobility tool ownership SP experiment

Postby Michiel Bliemer » Tue Oct 05, 2021 11:05 am

Hi Thomas,

Is it correct that all variables are scenario variables that are constant across all alternatives? If so, you need to include all relevant variables in all alternatives, except for one alternatives where they are normalised to zero (so all coefficients need to be interpretated as relative to this base alternative). You can find more about scenario variables in Section 8.5 of the Ngene manual. Below I have shown how to include the same attribute level in the second alternative by referencing the attribute level in the first alternative. You can use alternative-specific parameters in each utility function to indicate that the impact of the attributes is different across alternatives.

Code: Select all
Design
;alts = C, PT, B, C_PT, C_B, PT_B, C_PT_B
;rows = 80
;block = 10
;eff = (mnl, d)

;model:
U(C_PT_B) = b_workfromhome1.dummy[0|0]    * wfh1[1,2,3]
          + b_covidsituation1.dummy[0|0]  * covsit1[1,2,3]
          + b_carsize1.dummy[0|0|0|0]     * csize1[1,2,3,4,5]
          + b_carfuel1.dummy[0|0]         * cfuel1[1,2,3]
          + b_carfuelprice1[-0.01]        * cfuelprice1[1,2,3]
          + b_ptsubscription1.dummy[0|0]  * ptsub1[1,2,3]
          + b_ptsubscriptionprice1[-0.01] * ptsubprice1[1,2,3]
          + b_biketype1.dummy[0|0]        * btype1[1,2,3]
          /
U(C)      = b_C_asc
          + b_workfromhome2.dummy[0|0]    * wfh2[wfh1]
          + b_covidsituation2.dummy[0|0]  * covsit2[covsit1]
          + b_carsize2.dummy[0|0|0|0]     * csize2[csize1]
          + b_carfuel2.dummy[0|0]         * cfuel2[cfuel1]
          + b_carfuelprice2[-0.01]        * cfuelprice2[cfuelprice1]


You specified alternative-specific constants, which is appropriate. You would not estimate generic parameters, they should be different since the alternatives are labelled.

Putting in an opt-out alternative is only needed if you are interested in forecasting absolute market shares. If you are only interested in relative market shares, there is no need.

I encourage you to look at the publication below, which describes an application of a choice experiment with only scenario variables. The utility functions are similar to the ones that I propose.

De Bekker-Grob, E.W., A.D. Bergstra, M.C.J. Bliemer, I.J.M. Trijssenaar-Buhre, A. Burdorf (2015) Protective behaviour of citizens to transport accidents involving hazardous materials: a discrete choice experiment applied to populated areas nearby waterways. PLoS ONE, Vol. 10, Issue 11, pp. 1-14.

Finally, you may need to think about model estimation since your alternatives are not disjoint but rather overlapping. A typical choice model would assume that all alternatives are disjoint and when they are overlapping you may need a nested logit or cross-nested logit model.

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

Re: A design for a mobility tool ownership SP experiment

Postby thoscha » Fri Oct 22, 2021 12:10 am

Dear Michiel,

Thank you very much for your feedback and the reference to the NGene manual. Exactly, all variables are scenario variables. This is the set up as suggested by you that I could run:

Code: Select all
Design
;alts = C, PT, B, C_PT, C_B, PT_B, C_PT_B
;rows = 80
;block = 10
;eff = (mnl, d)

;model:
U(C_PT_B) = b_wfh1.dummy[0|0] * wfh1[1,2,3]
          + b_covsit1.dummy[0|0] * covsit1[1,2,3]
          + b_csize1.dummy[0|0|0|0] * csize1[1,2,3,4,5]
          + b_cfuel1.dummy[0|0] * cfuel1[1,2,3]
          + b_cfuelprice1[-0.01] * cfuelprice1[1,2,3]
          + b_ptsub1.dummy[0|0] * ptsub1[1,2,3]
          + b_ptsubprice1[-0.01] * ptsubprice1[1,2,3]
          + b_btype1.dummy[0|0] * btype1[1,2,3]
/
U(C) = b_C_asc
/
U(PT) = b_PT_asc
      + b_wfh3.dummy[0|0] * wfh3[wfh1]
      + b_covsit3.dummy[0|0] * covsit3[covsit1]
      + b_ptsub3.dummy[0|0] * ptsub3[ptsub1]
      + b_ptsubprice3[-0.01] * ptsubprice3[ptsubprice1]
/
U(B) = b_B_asc
     + b_wfh4.dummy[0|0] * wfh4[wfh1]
     + b_covsit4.dummy[0|0] * covsit4[covsit1]
     + b_btype4.dummy[0|0] * btype4[btype1]
/
U(C_PT) = b_C_PT_asc
        + b_wfh5.dummy[0|0] * wfh5[wfh1]
        + b_covsit5.dummy[0|0] * covsit5[covsit1]
        + b_csize5.dummy[0|0|0|0] * csize5[csize1]
        + b_cfuel5.dummy[0|0] * cfuel5[cfuel1]
        + b_cfuelprice5[-0.01] * cfuelprice5[cfuelprice1]
        + b_ptsub5.dummy[0|0] * ptsub5[ptsub1]
        + b_ptsubprice5[-0.01] * ptsubprice5[ptsubprice1]
/
U(C_B) = b_C_B_asc
       + b_wfh6.dummy[0|0] * wfh6[wfh1]
       + b_covsit6.dummy[0|0] * covsit6[covsit1]
       + b_csize6.dummy[0|0|0|0] * csize6[csize1]
       + b_cfuel6.dummy[0|0] * cfuel6[cfuel1]
       + b_cfuelprice6[-0.01] * cfuelprice6[cfuelprice1]
       + b_btype6.dummy[0|0] * btype6[btype1]
/
U(PT_B) = b_PT_B_asc
        + b_wfh7.dummy[0|0] * wfh7[wfh1]
        + b_covsit7.dummy[0|0] * covsit7[covsit1]
        + b_ptsub7.dummy[0|0] * ptsub7[ptsub1]
        + b_ptsubprice7[-0.01] * ptsubprice7[ptsubprice1]
        + b_btype7.dummy[0|0] * btype7[btype1]
$


The only thing I am currently struggling with is whether I did right in specifying the ASC's in combination with your suggestion to normalise the variables to zero for one alternative. In my example there is no ASC for C_PT_B, so this would be the reference alternative. Since I normalised the variables for C, the car alternative, I don't know how to correctly interpret which alternative is the reference anymore... I tried to set U(C) = 0 and add an ASC for U(C_PT_B), but I end up with an error saying that I have constants specified for all alternatives (I thought, this way it would be similar to the set up in the paper by De-Bekker-Grob et al. 2015). Is there a mistake from my side?

About the modelling approach: Thanks for pointing out the issue with overlapping alternatives. The participants will also be asked in a second step to indicate if and how much they would change km travelled by mode (car, PT, bicycle) compared to their status quo. We are planning to estimate a MDCEV model on the data gathered, which is able to account for nesting structures as far as I know.

Best regards,
Thomas
thoscha
 
Posts: 5
Joined: Fri Oct 01, 2021 12:22 am

Re: A design for a mobility tool ownership SP experiment

Postby Michiel Bliemer » Fri Oct 22, 2021 9:25 am

In Ngene, if no utility function is specified for an alternative it defaults to zero. Ngene does not accept U(X) = 0 in the syntax. So the solution is to simply omit U(C) in the model specification. This is often done for specifying an opt-out alternative that also has zero utility (or a constant), see Ngene manual Section 7.2.7.

So you can use the syntax below.

Code: Select all
Design
;alts = C, PT, B, C_PT, C_B, PT_B, C_PT_B
;rows = 80
;block = 10
;eff = (mnl, d)

;model:
U(C_PT_B) = b_C_PT_B_asc
          + b_wfh1.dummy[0|0] * wfh1[1,2,3]
          + b_covsit1.dummy[0|0] * covsit1[1,2,3]
          + b_csize1.dummy[0|0|0|0] * csize1[1,2,3,4,5]
          + b_cfuel1.dummy[0|0] * cfuel1[1,2,3]
          + b_cfuelprice1[-0.01] * cfuelprice1[1,2,3]
          + b_ptsub1.dummy[0|0] * ptsub1[1,2,3]
          + b_ptsubprice1[-0.01] * ptsubprice1[1,2,3]
          + b_btype1.dummy[0|0] * btype1[1,2,3]
/
U(PT) = b_PT_asc
      + b_wfh3.dummy[0|0] * wfh3[wfh1]
      + b_covsit3.dummy[0|0] * covsit3[covsit1]
      + b_ptsub3.dummy[0|0] * ptsub3[ptsub1]
      + b_ptsubprice3[-0.01] * ptsubprice3[ptsubprice1]
/
U(B) = b_B_asc
     + b_wfh4.dummy[0|0] * wfh4[wfh1]
     + b_covsit4.dummy[0|0] * covsit4[covsit1]
     + b_btype4.dummy[0|0] * btype4[btype1]
/
U(C_PT) = b_C_PT_asc
        + b_wfh5.dummy[0|0] * wfh5[wfh1]
        + b_covsit5.dummy[0|0] * covsit5[covsit1]
        + b_csize5.dummy[0|0|0|0] * csize5[csize1]
        + b_cfuel5.dummy[0|0] * cfuel5[cfuel1]
        + b_cfuelprice5[-0.01] * cfuelprice5[cfuelprice1]
        + b_ptsub5.dummy[0|0] * ptsub5[ptsub1]
        + b_ptsubprice5[-0.01] * ptsubprice5[ptsubprice1]
/
U(C_B) = b_C_B_asc
       + b_wfh6.dummy[0|0] * wfh6[wfh1]
       + b_covsit6.dummy[0|0] * covsit6[covsit1]
       + b_csize6.dummy[0|0|0|0] * csize6[csize1]
       + b_cfuel6.dummy[0|0] * cfuel6[cfuel1]
       + b_cfuelprice6[-0.01] * cfuelprice6[cfuelprice1]
       + b_btype6.dummy[0|0] * btype6[btype1]
/
U(PT_B) = b_PT_B_asc
        + b_wfh7.dummy[0|0] * wfh7[wfh1]
        + b_covsit7.dummy[0|0] * covsit7[covsit1]
        + b_ptsub7.dummy[0|0] * ptsub7[ptsub1]
        + b_ptsubprice7[-0.01] * ptsubprice7[ptsubprice1]
        + b_btype7.dummy[0|0] * btype7[btype1]
$


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

Re: A design for a mobility tool ownership SP experiment

Postby thoscha » Fri Oct 22, 2021 6:34 pm

Thank you a lot, Michiel!
thoscha
 
Posts: 5
Joined: Fri Oct 01, 2021 12:22 am


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 12 guests

cron