Customizing Price Levels in NGENE

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Customizing Price Levels in NGENE

Postby rafael_lionello » Fri Jan 26, 2024 11:14 pm

Dear Professors,

I am embarking on a discrete choice experiment focusing on brand choice for a fast-moving consumer good. It employs an unlabeled efficient design, incorporating three attributes: brand, price, and taste. The design features three alternatives alongside an opt-out option, and I've implemented restrictions to prevent any overlap among the brands.

Below is an illustrative NGENE code for this experiment:

Code: Select all
Design
;alts = Alt1*, Alt2*, Alt3*, Optout
;rows = 270
;block = 30
;eff = (mnl,d)
;alg = mfederov(candidates = 5000, stop=total(20000 iterations))
;require:
Alt1.brand <> Alt2.brand,
Alt1.brand <> Alt3.brand,
Alt2.brand <> Alt3.brand
;model:
U(Alt1)=  b_brand.dummy[0.1|0.1|0.1|0.05|0.05] * brand[0,1,2,3,4,5](43-47,43-47,43-47,43-47,43-47,43-47) +
          b_price[-0.01] * price[14,16,18,21,24,28](43-47,43-47,43-47,43-47,43-47,43-47) +
          b_taste.dummy[0.0|0.0] * taste[0,1,2](88-92,88-92,88-92) +
          b_brandTaste * brand * taste/

U(Alt2)=  b_brand.dummy*brand + b_price*price + b_taste.dummy*taste + b_brandTaste * brand * taste /
U(Alt3)=  b_brand.dummy*brand + b_price*price + b_taste.dummy*taste + b_brandTaste * brand * taste $


However, my design has a unique requirement: the need for price customization based on the prices commonly paid by consumers. Instead of presenting uniform price levels to all participants, I plan to inquire about the typical price the respondent usually pays at the beginning of the survey. Subsequently, in the choice experiment, I will showcase price values that oscillate around this baseline price.

I'm currently contemplating the best approach for this customization. While I've read about the pivot design, it doesn't seem to fit my needs (e.g., my design includes an opt-out alternative, but not a status quo one). I considered creating a library of designs, each corresponding to a specific price level based on the question that seeks the consumer's baseline price. However, I'm unsure if this is necessary or the most efficient approach, especially given that my price attribute in the design is not continuous.

Hence, my query is: Should I construct a library of designs with customized absolute price values (e.g., if the baseline price is 18, then levels are 13, 16, 18, etc.)? Or is it feasible to use a single design with relative price levels that adjust proportionally to the baseline price (e.g., baseline * 0.75, baseline * 1, etc.)? Or is there any other better approach?

I really appreciate your insights on this matter.

Best regards,

Rafael.
rafael_lionello
 
Posts: 11
Joined: Sat Jul 24, 2021 3:14 am

Re: Customizing Price Levels in NGENE

Postby Michiel Bliemer » Sat Jan 27, 2024 12:40 am

You can do both. You can generate a library of designs with different price levels. Or alternatively, you can create pivots, as explained below.

For a pivot design, since you do not have a reference alternative, only an opt-out, you first need to generate an efficient design with absolute price levels. In this design, simply assume price levels around a mean price level. After that, you manually convert the absolute price levels into pivots. For example, if you assumed price levels around average price 18, e.g. [13, 16, 18, 21, 24], then the pivots become [-28%, -11%, 0%, 17%, 33%] for relative pivots or [-5, -3, 0, 3, 6] for absolute pivots. In the survey instrument, you ask about the average price (don't let respondents type but rather let them select from pre-defined price points so that they do not make mistakes) and then in the survey instrument you apply the pivots to the price.

The disadvantage of relative pivots is that you may need to apply some rounding, whereas the disadvantage of absolute pivots is that it may not be desirable that the price range remains the same for low and high average price levels.

Regarding your script, note that the LAST level is the base level with dummy coding, so please check that your priors correctly specify the preference order (currently, levels 3 and 4 are most preferred, then levels 0,1,2, and finally level 5 is least preferred). So maybe you mean brand[1,2,3,4,5,0].

Your attribute level constraints (43-47 etc) are too strict, Ngene will not be able to find a design that satisfies these constraints. Note that you usually do not need to include attribute level constraints for dummy coded variables since efficiency requires that information is collected more or less equally across all levels and therefore an efficient design will have a high degree of attribute level balance for dummy/effects coded variables. Note that this is not the case for numerical attributes, therefore I generally only include attribute level constraints for numerical attributes, like price. When you are using near-zero priors, I usually recommend dummy coding all attributes, including price, since the most efficient design with (near) zero priors mostly compares outer levels and inner levels in a choice task, which is undesirable. My recommended script is below.

Also note that your interaction effect brand*taste assumes that both variables are numerical, it will simply multiple the values. If you want interactions across dummy coded variables, you need to include all separately, i.e.

b_brandTaste1 * brand.dummy[1] * taste.dummy[1] +
b_brandTaste2 * brand.dummy[1] * taste.dummy[2] +
b_brandTaste3 * brand.dummy[2] * taste.dummy[1] +
...etc


Code: Select all
Design
;alts = Alt1*, Alt2*, Alt3*, Optout
;rows = 270
;block = 30
;eff = (mnl,d)
;alg = mfederov(candidates = 5000, stop=total(20000 iterations))
;require:
Alt1.brand <> Alt2.brand,
Alt1.brand <> Alt3.brand,
Alt2.brand <> Alt3.brand
;model:
U(Alt1)=  b_brand.dummy[0.1|0.1|0.1|0.05|0.05]         * brand[0,1,2,3,4,5] +
          b_price.dummy[-0.01|-0.02|-0.03|-0.04|-0.05] * price[16,18,21,24,28,14] +
          b_taste.dummy[0.0|0.0]                       * taste[0,1,2] +
          b_brandTaste                                 * brand * taste/

U(Alt2)=  b_brand.dummy*brand + b_price*price + b_taste.dummy*taste + b_brandTaste * brand * taste /
U(Alt3)=  b_brand.dummy*brand + b_price*price + b_taste.dummy*taste + b_brandTaste * brand * taste $


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

Re: Customizing Price Levels in NGENE

Postby rafael_lionello » Wed Jan 31, 2024 6:52 am

Dear Michiel,

Thank you very much for providing the NGENE script and your valuable guidance.

I would like to revisit the preference ordering for the 'brand' attribute levels, as there seems to be a point of confusion on my part.

I understand that in the typical dummy coding sequence in NGENE, the base level is conventionally placed at the end (and I'm now contemplating whether it would have been more intuitive if I had assigned the base level as 0 rather than 5).

However, I am unclear as to why levels 3 and 4 would be considered the most preferred in the script.

Considering the the priors set in brand attribute in the "U(Alt1)" part of the script, could you please confirm whether the logic below is correct, or if there has been a misstep in my approach?
Level 0 = 0.1
Level 1 = 0.1
Level 2 = 0.1
Level 3 = 0.05
Level 4 = 0.05
Level 5 = (base level, no prior needed)

If the logic is correct, with the above priors, it was my intention to convey that Levels 0, 1, and 2 are the most preferred, as indicated by the higher prior values (0.1), compared to Levels 3 and 4, which are assigned lower prior values (0.05).

Thank you again for you time.

Best regards,
Rafael.
rafael_lionello
 
Posts: 11
Joined: Sat Jul 24, 2021 3:14 am

Re: Customizing Price Levels in NGENE

Postby Michiel Bliemer » Wed Jan 31, 2024 8:55 am

Sorry I misread. I read 0.5 instead of 0.05, my mistake. So your preference order is exactly as you say.

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


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 11 guests

cron