Efficient design with attribute level balance- possible?

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

Moderators: Andrew Collins, Michiel Bliemer, johnr

Post Reply
Olive
Posts: 1
Joined: Tue Jul 17, 2018 11:53 pm

Efficient design with attribute level balance- possible?

Post by Olive »

Hi

I am trying to get my design for a choice experiment. I have used "*" and require/rejects to avoid unrealistic combinations. However, my attribute level balance is pretty bad (i.e. Ngene distributes the lower and upper levels of all attributes but I get 1-2 of the middle levels). In the syntax below I have tried to add the range of times I want each level to appear but then I get error. Can the restrictions be simplified? Any suggestions welcome!
Olivia

Design
alts = prog1*, prog2*, sq
;rows = 24
;block = 3, minsum
;eff = (mnl, d)
; alg=mfederov (stop=total(500000 iterations), candidates = 1000)
;require:
prog1.cost<>prog2.cost,
prog2.sa<>prog1.sa or prog2.sv<>prog1.sv or prog2.de<>prog1.de
; reject:
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv>=prog2.sv and prog1.cost<prog2.cost,
prog1.sa>prog2.sa and prog1.de>=prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog1.sa>=prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv>=prog1.sv and prog2.cost<prog1.cost,
prog2.sa>prog1.sa and prog2.de>=prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog2.sa>=prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv<=prog2.sv and prog1.cost>prog2.cost,
prog1.sa>prog2.sa and prog1.de<=prog2.de and prog1.sv>prog2.sv and prog1.cost>prog2.cost,
prog1.sa<=prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost>prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv<=prog1.sv and prog2.cost>prog1.cost,
prog2.sa>prog1.sa and prog2.de<=prog1.de and prog2.sv>prog1.sv and prog2.cost>prog1.cost,
prog2.sa<=prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost>prog1.cost,
prog1.sa=prog2.sa and prog1.de=prog2.de and prog1.sv<prog2.sv and prog1.cost>prog2.cost,
prog1.sa=prog2.sa and prog1.de<prog2.de and prog1.sv=prog2.sv and prog1.cost>prog2.cost,
prog1.sa<prog2.sa and prog1.de=prog2.de and prog1.sv=prog2.sv and prog1.cost>prog2.cost,
prog2.sa=prog1.sa and prog2.de=prog1.de and prog2.sv<prog1.sv and prog2.cost>prog1.cost,
prog2.sa=prog1.sa and prog2.de<prog1.de and prog2.sv=prog1.sv and prog2.cost>prog1.cost,
prog2.sa<prog1.sa and prog2.de=prog1.de and prog2.sv=prog1.sv and prog2.cost>prog1.cost,
prog1.sa = sq.sasq and prog1.de = sq.desq and prog1.sv = sq.svsq,
prog2.sa = sq.sasq and prog2.de = sq.desq and prog2.sv = sq.svsq
;model:
U(prog1) = b2[0]* sa[13,20,26](5-8,5-8,5-8) + b3[0] * de[15,23,30](5-8,5-8,5-8) + b4[0] * sv[20,30,40](5-8,5-8,5-8) + b5[0] * cost[2,5,8,11](3-6,3-6,3-6,3-6) /
U(prog2) = b2 * sa + b3 * de + b4 * sv + b5 * cost/
U(sq) = b1[0]+ b2 * sasq[13] + b3 * desq[15] + b4 * svsq[20] + b5 * costsq[0]
$
Michiel Bliemer
Posts: 2055
Joined: Tue Mar 31, 2009 4:13 pm

Re: Efficient design with attribute level balance- possible?

Post by Michiel Bliemer »

In your syntax you are requesting that the levels of the first three attributes appear each a maximum of 8 times and the levels of the fourth attribute a maximum of 6 times. Since rows = 24 this means that you are requesting perfect attribute level balance (8+8+8=24 and 6+6+6+6=24). This is too restrictive and Ngene will not be able to find a design that satisfies these strict requirements. In the syntax below I have relaxed the constraints to 6-10 (range around 8) and to 4-8 (range around 6). This syntax should run (it does on my computer).

Further, I have removed 'candidates = 1000' since a larger candidate set makes it easier to find a design that satisfies all constraints. The size of the candidate set is 4044, which can be considered in its entirety and hence there is no need to constrain the size of the candidate set.

Design
alts = prog1*, prog2*, sq
;rows = 24
;block = 3, minsum
;eff = (mnl, d)
;alg=mfederov(stop=total(500000 iterations))
;require:
prog1.cost<>prog2.cost,
prog2.sa<>prog1.sa or prog2.sv<>prog1.sv or prog2.de<>prog1.de
;reject:
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv>=prog2.sv and prog1.cost<prog2.cost,
prog1.sa>prog2.sa and prog1.de>=prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog1.sa>=prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost<prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv>=prog1.sv and prog2.cost<prog1.cost,
prog2.sa>prog1.sa and prog2.de>=prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog2.sa>=prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost<prog1.cost,
prog1.sa>prog2.sa and prog1.de>prog2.de and prog1.sv<=prog2.sv and prog1.cost>prog2.cost,
prog1.sa>prog2.sa and prog1.de<=prog2.de and prog1.sv>prog2.sv and prog1.cost>prog2.cost,
prog1.sa<=prog2.sa and prog1.de>prog2.de and prog1.sv>prog2.sv and prog1.cost>prog2.cost,
prog2.sa>prog1.sa and prog2.de>prog1.de and prog2.sv<=prog1.sv and prog2.cost>prog1.cost,
prog2.sa>prog1.sa and prog2.de<=prog1.de and prog2.sv>prog1.sv and prog2.cost>prog1.cost,
prog2.sa<=prog1.sa and prog2.de>prog1.de and prog2.sv>prog1.sv and prog2.cost>prog1.cost,
prog1.sa=prog2.sa and prog1.de=prog2.de and prog1.sv<prog2.sv and prog1.cost>prog2.cost,
prog1.sa=prog2.sa and prog1.de<prog2.de and prog1.sv=prog2.sv and prog1.cost>prog2.cost,
prog1.sa<prog2.sa and prog1.de=prog2.de and prog1.sv=prog2.sv and prog1.cost>prog2.cost,
prog2.sa=prog1.sa and prog2.de=prog1.de and prog2.sv<prog1.sv and prog2.cost>prog1.cost,
prog2.sa=prog1.sa and prog2.de<prog1.de and prog2.sv=prog1.sv and prog2.cost>prog1.cost,
prog2.sa<prog1.sa and prog2.de=prog1.de and prog2.sv=prog1.sv and prog2.cost>prog1.cost,
prog1.sa = sq.sasq and prog1.de = sq.desq and prog1.sv = sq.svsq,
prog2.sa = sq.sasq and prog2.de = sq.desq and prog2.sv = sq.svsq
;model:
U(prog1) = b2[0]* sa[13,20,26](6-10,6-10,6-10) + b3[0] * de[15,23,30](6-10,6-10,6-10) + b4[0] * sv[20,30,40](6-10,6-10,6-10) + b5[0] * cost[2,5,8,11](4-8,4-8,4-8,4-8) /
U(prog2) = b2 * sa + b3 * de + b4 * sv + b5 * cost/
U(sq) = b1[0]+ b2 * sasq[13] + b3 * desq[15] + b4 * svsq[20] + b5 * costsq[0]
$

Michiel
Post Reply