Dominance Issues

This forum is for posts covering broader stated choice experimental design issues.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Post Reply
markp
Posts: 5
Joined: Thu May 16, 2019 5:54 am

Dominance Issues

Post by markp »

Hi

I am designing a DCE with 9 attributes: 8x5 levels and 1 x 4 levels. 120 rows, no constraints other than dominance.

Ngene is having trouble finding a design without dominance. There is no issue when I remove the priors.

The priors are informed by the literature.

I was hoping for some advice regarding working through this situation. Code is below

Code: Select all

Design 
;alts = alt1*, alt2*
;rows = 120
;eff = (mnl, d)
;block=10
;model:
U(alt1) = b1[0.76]*time[10,5,2,1] + 
b2.dummy[0|0|0|0]*se[0,1,2,3,4]  +
ise1[-0.02]*se.dummy[1]*time +
ise2[-0.04]*se.dummy[2]*time +
ise3[-0.06]*se.dummy[3]*time +
ise4[-0.08]*se.dummy[4]*time +
b3.dummy[0|0|0|0]*l[0,1,2,3,4]  + 
il1[-0.02]*l.dummy[1]*time +
il2[-0.04]*l.dummy[2]*time +
il3[-0.06]*l.dummy[3]*time +
il4[-0.08]*l.dummy[4]*time +
b4.dummy[0|0|0|0]*a[0,1,2,3,4]  + 
ia1[-0.02]*a.dummy[1]*time +
ia2[-0.04]*a.dummy[2]*time +
ia3[-0.06]*a.dummy[3]*time +
ia4[-0.08]*a.dummy[4]*time +
b5.dummy[0|0|0|0]*bo[0,1,2,3,4]  + 
ibo1[-0.02]*bo.dummy[1]*time +
ibo2[-0.04]*bo.dummy[2]*time +
ibo3[-0.06]*bo.dummy[3]*time +
ibo4[-0.08]*bo.dummy[4]*time +
b6.dummy[0|0|0|0]*bl[0,1,2,3,4]  + 
ibl1[-0.02]*bl.dummy[1]*time +
ibl2[-0.04]*bl.dummy[2]*time +
ibl3[-0.06]*bl.dummy[3]*time +
ibl4[-0.08]*bl.dummy[4]*time +
b7.dummy[0|0|0|0]*p[0,1,2,3,4] + 
ip1[-0.02]*p.dummy[1]*time +
ip2[-0.04]*p.dummy[2]*time +
ip3[-0.06]*p.dummy[3]*time +
ip4[-0.08]*p.dummy[4]*time +
b8.dummy[0|0|0|0]*m[0,1,2,3,4] + 
im1[-0.02]*m.dummy[1]*time +
im2[-0.04]*m.dummy[2]*time +
im3[-0.06]*m.dummy[3]*time +
im4[-0.08]*m.dummy[4]*time +
b9.dummy[0|0|0|0]*so[0,1,2,3,4] +
iso1[-0.02]*so.dummy[1]*time +
iso2[-0.04]*so.dummy[2]*time +
iso3[-0.06]*so.dummy[3]*time +
iso4[-0.08]*so.dummy[4]*time /
U(alt2) = b1*time + 
b2.dummy*se  +
ise1*se.dummy[1]*time +
ise2*se.dummy[2]*time +
ise3*se.dummy[3]*time +
ise4*se.dummy[4]*time +
b3.dummy*l  + 
il1*l.dummy[1]*time +
il2*l.dummy[2]*time +
il3*l.dummy[3]*time +
il4*l.dummy[4]*time +
b4.dummy*a  + 
ia1*a.dummy[1]*time +
ia2*a.dummy[2]*time +
ia3*a.dummy[3]*time +
ia4*a.dummy[4]*time +
b5.dummy*bo  + 
ibo1*bo.dummy[1]*time +
ibo2*bo.dummy[2]*time +
ibo3*bo.dummy[3]*time +
ibo4*bo.dummy[4]*time +
b6.dummy*bl  + 
ibl1*bl.dummy[1]*time +
ibl2*bl.dummy[2]*time +
ibl3*bl.dummy[3]*time +
ibl4*bl.dummy[4]*time +
b7.dummy*p + 
ip1*p.dummy[1]*time +
ip2*p.dummy[2]*time +
ip3*p.dummy[3]*time +
ip4*p.dummy[4]*time +
b8.dummy*m + 
im1*m.dummy[1]*time +
im2*m.dummy[2]*time +
im3*m.dummy[3]*time +
im4*m.dummy[4]*time +
b9.dummy*so +
iso1*so.dummy[1]*time +
iso2*so.dummy[2]*time +
iso3*so.dummy[3]*time +
iso4*so.dummy[4]*time
$
Michiel Bliemer
Posts: 2055
Joined: Tue Mar 31, 2009 4:13 pm

Re: Dominance Issues

Post by Michiel Bliemer »

Ngene looks at the rankings of the main effects of each attribute. So by providing a positive prior for b1 Ngene you tell Ngene that level 10 is more preferred (higher utility) than level 1. If you do not provide any rankings, i.e. if you use zero priors, then Ngene ignores that attribute. Interaction effects are excluded from dominance checks (it is not evident how interaction effects influence dominance).

In this case, you only provide rankings for "time", but not any of the other attributes. Therefore, you are asking Ngene to exclude dominant alternative by only checking "time", which is not possible because all choice tasks will have a dominant alternative in that case unless the levels for "time" are the same for all alternatives.

Therefore, if you would like to check for dominance you will need to add the ranking information for each attribute, i.e. if higher levels of "se" increase utility, then you could use b2.dummy[-0.004|-0.003|-0.002|-0.001]*se[0,1,2,3,4], nothing that the last level 4 is the reference level.

Michiel
markp
Posts: 5
Joined: Thu May 16, 2019 5:54 am

Re: Dominance Issues

Post by markp »

Thank you! That fixed the problem.

I am not interested in the main effects and will not be using them in my analysis. Is there a way to run Ngene without them? I haven't had success.
Michiel Bliemer
Posts: 2055
Joined: Tue Mar 31, 2009 4:13 pm

Re: Dominance Issues

Post by Michiel Bliemer »

Yes that can be done, but note that by removing main effects you are no longer able to check for dominance (although I doubt that there is any problem since you have many attributes).

In the syntax below I have created a model called "not_used" that includes all main effects such that they at least are defined, and a model called "main" that only includes interaction effects. In the optimisation I specify that only model "main" should be optimised by setting ;eff = main(mnl,d) and it ignores "not_used". This is a trick to remove the main effects from the utility function.

Code: Select all

Design
;alts(not_used) = alt1, alt2
;alts(main) = alt1, alt2
;rows = 120
;eff = main(mnl, d)
;block=10
;model(not_used):
U(alt1) = b1[0.76]*time[10,5,2,1] +
b2.dummy[0|0|0|0]*se[0,1,2,3,4]  +
ise1[-0.02]*se.dummy[1]*time +
ise2[-0.04]*se.dummy[2]*time +
ise3[-0.06]*se.dummy[3]*time +
ise4[-0.08]*se.dummy[4]*time +
b3.dummy[0|0|0|0]*l[0,1,2,3,4]  +
il1[-0.02]*l.dummy[1]*time +
il2[-0.04]*l.dummy[2]*time +
il3[-0.06]*l.dummy[3]*time +
il4[-0.08]*l.dummy[4]*time +
b4.dummy[0|0|0|0]*a[0,1,2,3,4]  +
ia1[-0.02]*a.dummy[1]*time +
ia2[-0.04]*a.dummy[2]*time +
ia3[-0.06]*a.dummy[3]*time +
ia4[-0.08]*a.dummy[4]*time +
b5.dummy[0|0|0|0]*bo[0,1,2,3,4]  +
ibo1[-0.02]*bo.dummy[1]*time +
ibo2[-0.04]*bo.dummy[2]*time +
ibo3[-0.06]*bo.dummy[3]*time +
ibo4[-0.08]*bo.dummy[4]*time +
b6.dummy[0|0|0|0]*bl[0,1,2,3,4]  +
ibl1[-0.02]*bl.dummy[1]*time +
ibl2[-0.04]*bl.dummy[2]*time +
ibl3[-0.06]*bl.dummy[3]*time +
ibl4[-0.08]*bl.dummy[4]*time +
b7.dummy[0|0|0|0]*p[0,1,2,3,4] +
ip1[-0.02]*p.dummy[1]*time +
ip2[-0.04]*p.dummy[2]*time +
ip3[-0.06]*p.dummy[3]*time +
ip4[-0.08]*p.dummy[4]*time +
b8.dummy[0|0|0|0]*m[0,1,2,3,4] +
im1[-0.02]*m.dummy[1]*time +
im2[-0.04]*m.dummy[2]*time +
im3[-0.06]*m.dummy[3]*time +
im4[-0.08]*m.dummy[4]*time +
b9.dummy[0|0|0|0]*so[0,1,2,3,4] +
iso1[-0.02]*so.dummy[1]*time +
iso2[-0.04]*so.dummy[2]*time +
iso3[-0.06]*so.dummy[3]*time +
iso4[-0.08]*so.dummy[4]*time /
U(alt2) = b1*time +
b2.dummy*se  +
ise1*se.dummy[1]*time +
ise2*se.dummy[2]*time +
ise3*se.dummy[3]*time +
ise4*se.dummy[4]*time +
b3.dummy*l  +
il1*l.dummy[1]*time +
il2*l.dummy[2]*time +
il3*l.dummy[3]*time +
il4*l.dummy[4]*time +
b4.dummy*a  +
ia1*a.dummy[1]*time +
ia2*a.dummy[2]*time +
ia3*a.dummy[3]*time +
ia4*a.dummy[4]*time +
b5.dummy*bo  +
ibo1*bo.dummy[1]*time +
ibo2*bo.dummy[2]*time +
ibo3*bo.dummy[3]*time +
ibo4*bo.dummy[4]*time +
b6.dummy*bl  +
ibl1*bl.dummy[1]*time +
ibl2*bl.dummy[2]*time +
ibl3*bl.dummy[3]*time +
ibl4*bl.dummy[4]*time +
b7.dummy*p +
ip1*p.dummy[1]*time +
ip2*p.dummy[2]*time +
ip3*p.dummy[3]*time +
ip4*p.dummy[4]*time +
b8.dummy*m +
im1*m.dummy[1]*time +
im2*m.dummy[2]*time +
im3*m.dummy[3]*time +
im4*m.dummy[4]*time +
b9.dummy*so +
iso1*so.dummy[1]*time +
iso2*so.dummy[2]*time +
iso3*so.dummy[3]*time +
iso4*so.dummy[4]*time

;model(main):
U(alt1) = 
ise1[-0.02]*se.dummy[1]*time +
ise2[-0.04]*se.dummy[2]*time +
ise3[-0.06]*se.dummy[3]*time +
ise4[-0.08]*se.dummy[4]*time +
il1[-0.02]*l.dummy[1]*time +
il2[-0.04]*l.dummy[2]*time +
il3[-0.06]*l.dummy[3]*time +
il4[-0.08]*l.dummy[4]*time +
ia1[-0.02]*a.dummy[1]*time +
ia2[-0.04]*a.dummy[2]*time +
ia3[-0.06]*a.dummy[3]*time +
ia4[-0.08]*a.dummy[4]*time +
ibo1[-0.02]*bo.dummy[1]*time +
ibo2[-0.04]*bo.dummy[2]*time +
ibo3[-0.06]*bo.dummy[3]*time +
ibo4[-0.08]*bo.dummy[4]*time +
ibl1[-0.02]*bl.dummy[1]*time +
ibl2[-0.04]*bl.dummy[2]*time +
ibl3[-0.06]*bl.dummy[3]*time +
ibl4[-0.08]*bl.dummy[4]*time +
ip1[-0.02]*p.dummy[1]*time +
ip2[-0.04]*p.dummy[2]*time +
ip3[-0.06]*p.dummy[3]*time +
ip4[-0.08]*p.dummy[4]*time +
im1[-0.02]*m.dummy[1]*time +
im2[-0.04]*m.dummy[2]*time +
im3[-0.06]*m.dummy[3]*time +
im4[-0.08]*m.dummy[4]*time +
iso1[-0.02]*so.dummy[1]*time +
iso2[-0.04]*so.dummy[2]*time +
iso3[-0.06]*so.dummy[3]*time +
iso4[-0.08]*so.dummy[4]*time /
U(alt2) = 
ise1*se.dummy[1]*time +
ise2*se.dummy[2]*time +
ise3*se.dummy[3]*time +
ise4*se.dummy[4]*time +
il1*l.dummy[1]*time +
il2*l.dummy[2]*time +
il3*l.dummy[3]*time +
il4*l.dummy[4]*time +
ia1*a.dummy[1]*time +
ia2*a.dummy[2]*time +
ia3*a.dummy[3]*time +
ia4*a.dummy[4]*time +
ibo1*bo.dummy[1]*time +
ibo2*bo.dummy[2]*time +
ibo3*bo.dummy[3]*time +
ibo4*bo.dummy[4]*time +
ibl1*bl.dummy[1]*time +
ibl2*bl.dummy[2]*time +
ibl3*bl.dummy[3]*time +
ibl4*bl.dummy[4]*time +
ip1*p.dummy[1]*time +
ip2*p.dummy[2]*time +
ip3*p.dummy[3]*time +
ip4*p.dummy[4]*time +
im1*m.dummy[1]*time +
im2*m.dummy[2]*time +
im3*m.dummy[3]*time +
im4*m.dummy[4]*time +
iso1*so.dummy[1]*time +
iso2*so.dummy[2]*time +
iso3*so.dummy[3]*time +
iso4*so.dummy[4]*time
$
Michiel
markp
Posts: 5
Joined: Thu May 16, 2019 5:54 am

Re: Dominance Issues

Post by markp »

Thank you. that worked great.
Post Reply