I believe that the syntax below will do what you want.
Note that conditional constraints are not compatible with the modified Federov algorithm, only with the default swapping algorithm. I have translated your conditional constraints into reject constraints.
Further note that the modified Federov algorithm does not guarantee attribute level balance. I have added attribute level balance constraints (3-5,3-5,3-5) for each attribute.
Finally, you may want to include a small positive or negative priors for the other attributes (if known) to avoid dominant alternatives, e.g. use 0.000001 or -0.000001 as priors. You now only specified a non-negative prior for cost.
Code: Select all
Design
;alts = alt1*,alt2*,base
;rows = 12
;block = 2
;eff = (mnl,d)
;alg = mfederov
;reject:
? the constraints below replace: if(alt1.survival * alt1.tree > alt2.survival * alt2.tree, alt1.cost > alt2.cost)
alt1.survival = 0.75 and alt1.tree = 150 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 150 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 150 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 200 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 200 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 200 and alt2.survival = 0.9 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.9 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 250 and alt2.survival = 0.9 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.9 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.9 and alt2.tree = 150 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 150 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.6 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.75 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.9 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.9 and alt2.tree = 200 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 200 and alt2.survival = 0.6 and alt2.tree = 250 and alt1.cost <= alt2.cost,
alt1.survival = 0.75 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 250 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.6 and alt2.tree = 250 and alt1.cost <= alt2.cost,
alt1.survival = 0.9 and alt1.tree = 250 and alt2.survival = 0.75 and alt2.tree = 250 and alt1.cost <= alt2.cost,
? the constraints below replace: if(alt1.survival * alt1.tree = alt2.survival * alt2.tree, alt1.cost = alt2.cost)
alt1.survival = 0.6 and alt2.survival = 0.6 and alt1.tree = 150 and alt2.tree = 150 and alt1.cost <> alt1.cost,
alt1.survival = 0.75 and alt2.survival = 0.75 and alt1.tree = 150 and alt2.tree = 150 and alt1.cost <> alt1.cost,
alt1.survival = 0.9 and alt2.survival = 0.9 and alt1.tree = 150 and alt2.tree = 150 and alt1.cost <> alt1.cost,
alt1.survival = 0.6 and alt2.survival = 0.6 and alt1.tree = 200 and alt2.tree = 200 and alt1.cost <> alt1.cost,
alt1.survival = 0.75 and alt2.survival = 0.75 and alt1.tree = 200 and alt2.tree = 200 and alt1.cost <> alt1.cost,
alt1.survival = 0.9 and alt2.survival = 0.9 and alt1.tree = 200 and alt2.tree = 200 and alt1.cost <> alt1.cost,
alt1.survival = 0.6 and alt2.survival = 0.6 and alt1.tree = 250 and alt2.tree = 250 and alt1.cost <> alt1.cost,
alt1.survival = 0.75 and alt2.survival = 0.75 and alt1.tree = 250 and alt2.tree = 250 and alt1.cost <> alt1.cost,
alt1.survival = 0.9 and alt2.survival = 0.9 and alt1.tree = 250 and alt2.tree = 250 and alt1.cost <> alt1.cost,
alt1.survival = 0.75 and alt2.survival = 0.6 and alt1.tree = 200 and alt2.tree = 250 and alt1.cost <> alt1.cost,
alt1.survival = 0.6 and alt2.survival = 0.75 and alt1.tree = 250 and alt2.tree = 200 and alt1.cost <> alt1.cost
;model:
U(alt1) = asc
+ b1 * survival[0.6, 0.75, 0.9](3-5,3-5,3-5)
+ b2.dummy[0|0] * vigor[1,2,0](3-5,3-5,3-5)
+ b3 * tree[150,200,250](3-5,3-5,3-5)
+ b4 * cost[6,8,10](3-5,3-5,3-5)
/
U(alt2) = asc + b1 * survival + b2 * vigor + b3 * tree + b4 * cost /
U(base) = b1*survival1[0.6] + b3*tree1[150] + b4*cost1[6]
$
Michiel