Thanks a lot for your hard work in making the NGENE manual so clear, it helped me a lot understanding things! This is the first time I am making a choice experiment design and I would be really glad if I could get your feedback on a few points for my quite complex design.
I will survey companies that use harmful chemicals in their electronic products and investigate their willingness to switch towards safer chemicals in their products. Companies will have their own status quo (SQ) based on the description of the product they sell the most.
Therefore, I need a heterogeneous pivot design since I have different SQs for different companies (and the design will be generated on the fly). I have 3 alternatives including the SQ, and 4 attributes:
- Health and environmental properties (Hep): qualitative attribute with 5 levels=[0,1,2,3,4];
- Label (Lbl): qualitative attribute with 2 levels=[0,1];
- European regulations (Reg): qualitative attribute with 2 levels =[0,1]);
- Product price (Pri): quantitative price attribute with 4 levels =[-5%, 0%, 5%, 10%].
What follows is the preliminary piece of code that is common to all codes presented after.
- Code: Select all
Design
;alts(SQ1) = altA*, altB*, SQuo*
;alts(SQ2) = altA*, altB*, SQuo*
;alts(SQ3) = altA*, altB*, SQuo*
;rows = 8
;eff = fish(mnl, d)
;fisher(Fish) = design1(SQ1[0.33]) + design2(SQ2[0.33]) + design3(SQ3[0.34])
;alg = mfederov(candidates=5000000)
I had in mind the following constrained models specification that does not work because of the incompatibility between the pivot design and the effects coding:
- Code: Select all
;reject:
altA.Hep = 4 and altA.Lbl<> 0,
altA.Reg = 0 and altA.Hep > 1,
altB.Hep = 4 and altB.Lbl<> 0,
altB.Reg = 0 and altB.Hep > 1
;model(SQ1):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep.ref[4] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[1] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[-4,-3,-2,-1,0] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[-4,-3,-2,-1,0] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ2):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep.ref[1] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[-1,0,1,2,3] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[-1,0,1,2,3] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ3):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep.ref[0] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
$
Therefore I got rid of the effects coding (although not ideal in my setting) and wrote the following working code (by pivoting differently my attribute levels depending on the SQ): is it conceptually correct?
- Code: Select all
;reject:
altA.Hep = 4 and altA.Lbl<> 0,
altA.Reg = 0 and altA.Hep > 1,
altB.Hep = 4 and altB.Lbl<> 0,
altB.Reg = 0 and altB.Hep > 1
;model(SQ1):
U(SQuo) = b0[0] + b1[0]*Hep.ref[4] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[1] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[-4,-3,-2,-1,0] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[-4,-3,-2,-1,0] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ2):
U(SQuo) = b0[0] + b1[0]*Hep.ref[1] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[-1,0,1,2,3] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[-1,0,1,2,3] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ3):
U(SQuo) = b0[0] + b1[0]*Hep.ref[0] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep.piv[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep.piv[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
$
Finally, I have re-used one of your tricks (cf http://choice-metrics.com/forum/viewtopic.php?f=4&t=377) to actually keep my effects coding on the "Hep" variable (which would be the ideal design) and it works. But I would be glad if you could have a look and tell me whether there is a magic somewhere that actually corrupts my thinking ? I.e that I perform a heterogeneous pivot design with effect coding on the variable Hep (by 'triangularly' rejecting the undesirable model specific cases) ?
- Code: Select all
;reject:
altA.Hep = 4 and altA.Lbl<> 0,
altA.Reg = 0 and altA.Hep > 1,
altB.Hep = 4 and altB.Lbl<> 0,
altB.Reg = 0 and altB.Hep > 1,
SQuo.Hep <> 4 and SQuo.Reg = 1,
SQuo.Hep <> 1 and SQuo.Reg = 0 and SQuo.Pri = 4000,
SQuo.Hep <> 0 and SQuo.Reg = 0 and SQuo.Pri = 4001
;model(SQ1):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep[0,1,2,3,4] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[1] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,-1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ2):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep[0,1,2,3,4] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4000]/
U(altA) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
;model(SQ3):
U(SQuo) = b0[0] + b1.effects[0|0|0|0]*Hep[0,1,2,3,4] + b2[0]*Lbl.ref[0] + b3[0]*Reg.ref[0] + b4[0]*Pri.ref[4001]/
U(altA) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]/
U(altB) = b1 *Hep[0,1,2,3,4] + b2 *Lbl.piv[0,1] + b3 *Reg.piv[0,1] + b4 *Pri.piv[-5%,0%,5%,10%]
$
Note the last price (in the SQ3 model) that is set to 4001 so as to be able to discriminate the reference alternatives in SQ2 and SQ3 and reject undesirable cases.
I am very grateful for your feedback, my pilot starts on Monday, which is always a little bit stressful .
Best regards,
Marion