Page 1 of 1

Randomizing alternative within scenarios.

PostPosted: Thu Aug 05, 2021 8:26 am
by izakro
Dear all,
We want to examine choice between internal combustion engine and alternative fuel vehicles. We created the following labelled design with 7 utilities functions, one for each propulsion technology. Since choosing each time among 7 alternatives is difficult, we wonder whether it is possible to ask Ngene to choose randomly 4 alternatives in each scenario, such that the participant will see 4 different combinations of propulsion technologies in each menu.
Any help will be highly appreciated!
design
; alts = ICE, plugin, hybrid, PHEV, fuelCell, NCG, bioDiesel
; rows = 24
; block = 6
;eff = (mnl,d)
;cond:
if(ICE.CarCate=1, ICE.price=[65, 110, 175]),
if(ICE.CarCate=[2,3], ICE.price=[80, 165, 320]),
if(ICE.CarCate=[4,5], ICE.price=[110, 240, 360]),
if(ICE.CarCate=6, ICE.price=[240, 420, 600]),
if(ICE.CarCate=7, ICE.price=[175, 240, 420]),
if(plugin.CarCate=1, plugin.price=[65, 110, 175]),
if(plugin.CarCate=[2,3], plugin.price=[80, 165, 320]),
if(plugin.CarCate=[4,5], plugin.price=[110, 240, 360]),
if(plugin.CarCate=6, plugin.price=[240, 420, 600]),
if(plugin.CarCate=7, plugin.price=[175, 240, 420]),
if(hybrid.CarCate=1, hybrid.price=[65, 110, 175]),
if(hybrid.CarCate=[2,3], hybrid.price=[80, 165, 320]),
if(hybrid.CarCate=[4,5], hybrid.price=[110, 240, 360]),
if(hybrid.CarCate=6, hybrid.price=[240, 420, 600]),
if(hybrid.CarCate=7, hybrid.price=[175, 240, 420]),
if(PHEV.CarCate=1, PHEV.price=[65, 110, 175]),
if(PHEV.CarCate=[2,3], PHEV.price=[80, 165, 320]),
if(PHEV.CarCate=[4,5], PHEV.price=[110, 240, 360]),
if(PHEV.CarCate=6, PHEV.price=[240, 420, 600]),
if(PHEV.CarCate=7, PHEV.price=[175, 240, 420]),
if(fuelCell.CarCate=1, fuelCell.price=[65, 110, 175]),
if(fuelCell.CarCate=[2,3], fuelCell.price=[80, 165, 320]),
if(fuelCell.CarCate=[4,5], fuelCell.price=[110, 240, 360]),
if(fuelCell.CarCate=6, fuelCell.price=[240, 420, 600]),
if(fuelCell.CarCate=7, fuelCell.price=[175, 240, 420]),
if(NCG.CarCate=1, NCG.price=[65, 110, 175]),
if(NCG.CarCate=[2,3], NCG.price=[80, 165, 320]),
if(NCG.CarCate=[4,5], NCG.price=[110, 240, 360]),
if(NCG.CarCate=6, NCG.price=[240, 420, 600]),
if(NCG.CarCate=7, NCG.price=[175, 240, 420])

; model:
U(ICE) = P [-0.0001] * price [65, 80, 110, 165, 175, 240, 320, 360, 420, 600]
+ CAT.dummy [0|0|0|0|0|0] * CarCate[1,2,3,4,5,6,7]
+ SAFE.dummy [0.0001|0.0002|0.0003|0.0004] * safety[2,3,4,5,1]
+ TRIM.dummy [0.00001|0.00002] * trim[2,3,1]
+ TRNK.dummy [0.00001|0.00002] * trunk[2,3,1]
/

U(plugin) = plugin[0]
+RANGE [0.0001] * range[ 240, 270, 300] ? km per full charge
+ INFRAST.dummy [0.00001|0.00002|0.00003] * infrastructure [1,2,3,0]
+ CHRG_TIME.dummy [0.00001|0.00002] * chrging_time[2,3,1]
+ AVAIL.dummy [0.00001|0.00002] * CS_availability [2,3,1]
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk
/

U(hybrid) = hybrid[0]
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk
/

U(PHEV) = PHEV[0]
+ RANGE * range
+ INFRAST * infrastructure
+ CHRG_TIME * chrging_time
+ AVAIL * CS_availability
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk
/

U(fuelCell) = fuelCell[0]
+REFILL[0.0001] * refuel_infrastructure [10, 40, 70, 100]
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk
/

U(NCG) = NCG[0]
+ REFILL * refuel_infrastructure
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk
/

U(bioDiesel) =bioDiesel[0]
+ REFILL * refuel_infrastructure
+ P * price
+ CAT * CarCate
+ SAFE * safety
+ TRIM * trim
+ TRNK * trunk $

Re: Randomizing alternative within scenarios.

PostPosted: Thu Aug 05, 2021 9:36 am
by Michiel Bliemer
Yes that is possible. This is what is referred to as a partial choice set design, or an availability design.
The Ngene manual discusses the generation of partial choice set designs using an external candidate set, see Section 8.11. There is another way to do this, but this relies on a method that I have not yet published but I can share the slides with you to show you how this can be done by rewriting the utility function. This method is more tricky and involves creating indicator variables in Ngene, but avoids having to generate an external candidate set. I will send you the slides in a private message.

Michiel