Efficient design with product-specific brands

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Efficient design with product-specific brands

Postby weishou » Tue Oct 31, 2017 3:43 am

Hi everyone,
I am new to choice experiments and Ngene and would like to seek your opinion on the most effective way to carry out a pilot. We want to investigate preferences among 5 different products and have identified 4 attributes that we would like to include. They are as follows:
Product (5 levels): 0, 1, 2, 3, 4
Price (4 levels): $1, $3, $5, $7
Brand (7 levels): 0, 1, 2 ,3 ,4, 5, 6
Time to store (5 levels): 5, 10, 20, 30, 40 mins
The brand attribute is not generic across the products. For example, brands 0 to 2 are for products 0 to 2. Brands 3, 4 are for product 3. Brands 5, 6 are for product 4. The remaining attributes are generic. We have tried to code such a design in Ngene though a few different ways and would like your opinions on them.

1) Labelled design:
Design
;alts= pdt0, pdt1, pdt2, pdt3, pdt4, None
;rows=18
;eff = (mnl,d)
;model:
U(pdt0) = b1 + b2[(n,0.1,0.1)]* A[1,3,5,7] + b3.dummy[(n,0.1,0.1)|(n,0.1,0.1)] * B[0,1,2] + b6[(n,0.1,0.1)]* E[5,10,20,30,40] /
U(pdt1) = b2 * A[1,3,5,7] + b3 * B[0,1,2] + b6 * E[5,10,20,30,40] /
U(pdt2) = b2 * A[1,3,5,7] + b3 * B[0,1,2] + b6 * E[5,10,20,30,40] /
U(pdt3) = b2 * A[1,3,5,7] + b4.dummy[(n,0.1,0.1)] * C[0,1] + b6 * E[5,10,20,30,40] /
U(pdt4) = b2 * A[1,3,5,7] + b5.dummy[(n,0.1,0.1)] * D[0,1] + b6 * E[5,10,20,30,40]
$

2) Unlabelled design:
Design
;alts = alt1*, alt2*, alt3
;rows = 18
;block=2
;eff = (mnl,d,mean)
;bdraws = halton(500)
;cond:
if(alt1.Product = [0], alt1.Brand = [0,1,2]),
if(alt1.Product = [1], alt1.Brand = [0,1]),
if(alt1.Product = [2], alt1.Brand = [0,1]),
if(alt1.Product = [3], alt1.Brand = [3,4]),
if(alt1.Product = [4], alt1.Brand = [5,6]),
if(alt2.Product = [0], alt2.Brand = [0,1,2]),
if(alt2.Product = [1], alt2.Brand = [0,1]),
if(alt2.Product = [2], alt2.Brand = [0,1]),
if(alt2.Product = [3], alt2.Brand = [3,4]),
if(alt2.Product = [4], alt2.Brand = [5,6])
;model:
U(alt1) = b1[0.1] +
b2[(n,0.1,0.1)] * Price[1,3,5,7] +
b3.dummy[(n,0.1,0.1) |(n,0.1,0.1) |(n,0.1,0.1)|(n,0.1,0.1) ] * Product[0,1,2,3,4] +
b4.dummy[(n,0.1,0.1) |(n,0.1,0.1) |(n,0.1,0.1)|(n,0.1,0.1) |(n,0.1,0.1) |(n,0.1,0.1)] * Brand [0,1,2,3,4,5,6] +
b5[(n,0.1,0.1)] * Time [5,10,20,30,40] /
U(alt2) =b2 * Price +
b3 * Product +
b4 * Brand +
b5 * Time
$

While the labelled design is cleaner, would having 6 alternatives (including the no choice option) be too much to handle? We have tried to do a unlabelled design to overcome this but Ngene is unable to find a design. How else can we code for such a design in an unlabelled design? Thank you!

Nicholas
weishou
 
Posts: 1
Joined: Mon Oct 30, 2017 2:50 am

Re: Efficient design with product-specific brands

Postby Michiel Bliemer » Tue Oct 31, 2017 5:08 pm

I had a quick look and your approach in principle is fine, but if Ngene indicates that it cannot find a design it can have multiple reasons. I tried the following syntax, which removes the dominance checks, includes a constant for alt2 to make it completely generic, and set all priors to zero (note that your prior for Time is very large, you cannot just "guess" these priors, they need to make sense and account for the relevant and units of each attribute).

Design
;alts = alt1, alt2, alt3
;rows = 18
;block=2
;eff = (mnl,d)
;alg = mfederov(candidates = 10000)
;reject:
alt1.product = 0 and alt1.brand = 3,
alt1.product = 0 and alt1.brand = 4,
alt1.product = 0 and alt1.brand = 5,
alt1.product = 0 and alt1.brand = 6,
alt1.product = 1 and alt1.brand = 2,
alt1.product = 1 and alt1.brand = 3,
alt1.product = 1 and alt1.brand = 4,
alt1.product = 1 and alt1.brand = 5,
alt1.product = 1 and alt1.brand = 6,
alt1.product = 1 and alt1.brand = 2,
alt1.product = 2 and alt1.brand = 3,
alt1.product = 2 and alt1.brand = 4,
alt1.product = 2 and alt1.brand = 5,
alt1.product = 2 and alt1.brand = 6,
alt1.product = 3 and alt1.brand = 0,
alt1.product = 3 and alt1.brand = 1,
alt1.product = 3 and alt1.brand = 2,
alt1.product = 3 and alt1.brand = 5,
alt1.product = 3 and alt1.brand = 6,
alt1.product = 4 and alt1.brand = 0,
alt1.product = 4 and alt1.brand = 1,
alt1.product = 4 and alt1.brand = 2,
alt1.product = 4 and alt1.brand = 3,
alt1.product = 4 and alt1.brand = 4,
alt2.product = 0 and alt2.brand = 3,
alt2.product = 0 and alt2.brand = 4,
alt2.product = 0 and alt2.brand = 5,
alt2.product = 0 and alt2.brand = 6,
alt2.product = 1 and alt2.brand = 2,
alt2.product = 1 and alt2.brand = 3,
alt2.product = 1 and alt2.brand = 4,
alt2.product = 1 and alt2.brand = 5,
alt2.product = 1 and alt2.brand = 6,
alt2.product = 1 and alt2.brand = 2,
alt2.product = 2 and alt2.brand = 3,
alt2.product = 2 and alt2.brand = 4,
alt2.product = 2 and alt2.brand = 5,
alt2.product = 2 and alt2.brand = 6,
alt2.product = 3 and alt2.brand = 0,
alt2.product = 3 and alt2.brand = 1,
alt2.product = 3 and alt2.brand = 2,
alt2.product = 3 and alt2.brand = 5,
alt2.product = 3 and alt2.brand = 6,
alt2.product = 4 and alt2.brand = 0,
alt2.product = 4 and alt2.brand = 1,
alt2.product = 4 and alt2.brand = 2,
alt2.product = 4 and alt2.brand = 3,
alt2.product = 4 and alt2.brand = 4
;model:
U(alt1) = b1 +
b2 * Price[1,3,5,7] +
b3.dummy[0|0|0|0] * Product[0,1,2,3,4] +
b4.dummy[0|0|0|0|0|0] * Brand [0,1,2,3,4,5,6] +
b5[0] * Time [5,10,20,30,40] /
U(alt2) = b1 + n2*Price +
b3 * Product +
b4 * Brand +
b5 * Time
$

With this syntax, Ngene indicates that it still cannot find a design. If I remove one of your conditions or a few of my rejects, the syntax runs, Ngene can find a design. This leads me to believe that your model may actually not be identifiable. You could try to simulate data and see if you can estimate a model, but if the model is not identifiable, model estimation will not work and no useful experimental design can solve this. The issue may lie in the fact that both Product and Brand are both dummy coded. Product 4 is the reference level and Brand 6 is the reference level. If Product = 4 and Brand = 6 appear at the same time, then both are set to zero. Maybe this creates issues in being able to identify the parameters, I am not really sure. I think this is not an Ngene issue but rather an issue with model identifiability, which is not my area of expertise.

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 24 guests