Page 1 of 1

efficient design error?

PostPosted: Tue Feb 07, 2023 10:19 pm
by julian0309
Hello,

When I run the code below, attribute level 2 is always paired with another level 2. For example, fish(2) is always paired with fish(2) for alternatives a and b.

Could someone tell me what's going on and how to fix this issue?

Thank you.

Julian


Design
;alts = a, b, sq
;rows = 12
;eff = (mnl,d)
;model:
U(a) = a[0.05] + fish[0.5] * Fish[1,2,3] + cook[0.025] * Cook[1,2,3] + type[0.05] * Type[1,2,3] + price[0.05] * Price[1,2,3,4,5] /
U(b) = b[0.05] + fish[0.5] * Fish + cook[0.025] * Cook + type[0.05] * Type + price[0.05] * Price
$

Re: efficient design error?

PostPosted: Wed Feb 08, 2023 6:15 am
by Michiel Bliemer
It is most efficient to compare extreme levels, namely (3,1), and (1,3), they will provide most information about trade-offs. Therefore, Ngene will maximise the number of times these extreme comparisons appear. But since by default Ngene also aims for attribute level balance, it will also need to put level 2 in there, and it sacrifices information from comparison (2,2) to allow comparisons (3,1) and (1,3). This is a direct result of efficiency maximisation.

You can observe this better when you let go of attribute level balance by adding

;alg = mfederov

Essentially level 2 will hardly be used because it is inefficient for estimating a linear effect.

However, I believe that fish, type, etc, are categorical variables, and therefore you MUST use dummy or effects coding to estimate them. With categorical variables you will see that comparisons (2,2) will not appear much anymore as it is no longer efficient to use extreme levels for categorical variables.

Please use appropriate priors, your priors seem chosen quite randomly. Price has a positive sign, which is strange? Please add dummy coded coefficients, noting that the last level is the reference level in Ngene.

Please use the exact price levels that you show to respondents, e.g. $10, $5, etc, instead of 1,2,3,4,5.

Please add an asterisk after a and b in alternatives to indicate that they are generic.

Code: Select all
Design
;alts = a*, b*, sq
;rows = 12
;eff = (mnl,d)
;model:
U(a) = a[0.05] + fish.dummy[0.5|1.0] * Fish[2,3,1] + cook.dummy[0.5|1.0] * Cook[2,3,1] + type.dummy[0.5|1.0] * Type[2,3,1] + price[-0.05] * Price[1,2,3,4,5] /
U(b) = b[0.05] + fish * Fish + cook * Cook + type * Type + price * Price
$


Michiel

Re: efficient design error?

PostPosted: Wed Feb 08, 2023 10:52 pm
by julian0309
Hello Michiel,

Thank you so much for your feedback. This is super helpful!
I have a follow-up question if you don't mind.
If I want to introduce interactions between Fish and Cook, and Fish and Type, is the coding below correct?

Design
;alts = a*, b*, sq
;rows = 12
;eff = (mnl,d)
;model:
U(a) = a[0.05] + fish.dummy[0.5|1.0] * Fish[2,3,1] + cook.dummy[0.5|1.0] * Cook[2,3,1] + type.dummy[0.5|1.0] * Type[2,3,1] + price[-0.05] * Price[12.99,17.99,22.99,27.99,32.99]
+ i1[0.02] * Fish.dummy[2] * Cook.dummy[2] + i2[0.02] * Fish.dummy[2] * Cook.dummy[3] + i3[0.02] * Fish.dummy[3] * Cook.dummy[2] + i4[0.02] * Fish.dummy[3] * Cook.dummy[3]
+ i5[0.02] * Fish.dummy[2] * Type.dummy[2] + i6[0.02] * Fish.dummy[2] * Type.dummy[3] + i7[0.02] * Fish.dummy[3] * Type.dummy[2] + i8[0.02] * Fish.dummy[3] * Type.dummy[3] /

U(b) = b[0.05] + fish * Fish + cook * Cook + type * Type + price * Price
+ i1 * Fish.dummy[2] * Cook.dummy[2] + i2 * Fish.dummy[2] * Cook.dummy[3] + i3 * Fish.dummy[3] * Cook.dummy[2] + i4 * Fish.dummy[3] * Cook.dummy[3]
+ i5 * Fish.dummy[2] * Type.dummy[2] + i6 * Fish.dummy[2] * Type.dummy[3] + i7 * Fish.dummy[3] * Type.dummy[2] + i8 * Fish.dummy[3] * Type.dummy[3]
$

Re: efficient design error?

PostPosted: Thu Feb 09, 2023 10:01 am
by Michiel Bliemer
Yes those interactions between dummy coded variables look fine.