Page 1 of 1

Efficient design with attribute level balance- possible?

PostPosted: Thu Jul 26, 2018 7:27 pm
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]
$

Re: Efficient design with attribute level balance- possible?

PostPosted: Fri Jul 27, 2018 3:31 pm
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