Syntax for constraints
Posted: Tue May 07, 2013 3:57 am
Hi there,
I'm designing a fairly simple experiment. I wanted to build in two constraints: prohibitions between a few attributes. In particular, I wanted to prevent offer level 3 from appearing with incentive level 1 and message level 3 from appearing with offer level 1. At first, I tried this syntax:
design
;alts = respond, not
;rows = 16
;eff=(mnl,d)
;bdraws=halton(400)
;reject:
respond.offer = 3 and respond.incentive = 1,
respond.message = 3 and respond.offer = 1
;model:
u(respond) =
b0[-6] + b1.d[(u,0.3,0.4)|(u,.2,.3)|(u,.1,.2)]*message[1,2,3,4] +
b2.d[(u,-.2,.2)|(u,-.2,.2)]*offer[1,2,3] +
b3.d[(u,.2,.3)|(u,.1,.2)]*incentive[1,2,3] +
b4.d[(u,.4,.8)]*price_lock[1,2] +
b5.d[(u,.6,.9)|(u,.3,.6)]*cashback[1,2,3] +
b6.d[(u,-.2,.2)]*format[1,2] +
b7.d[(u,0,.2)]*channel[1,2]
$
But the resulting design included pairs that I thought were prohibited. That is, there were a few rows with offer = 3 and incentive = 1 and a few with message = 3 and offer = 1.
Then I tried this:
design
;alts = respond, not
;rows = 16
;eff=(mnl,d)
;bdraws=halton(400)
;reject:
respond.offer = 3 and respond.incentive = 1,
respond.message = 3 and respond.offer = 1
;cond:
if(respond.offer = 3, respond.incentive=[2,3]),
if(respond.message = 3, respond.offer=[2,3])
;model:
u(respond) =
b0[-6] + b1.d[(u,0.3,0.4)|(u,.2,.3)|(u,.1,.2)]*message[1,2,3,4] +
b2.d[(u,-.2,.2)|(u,-.2,.2)]*offer[1,2,3] +
b3.d[(u,.2,.3)|(u,.1,.2)]*incentive[1,2,3] +
b4.d[(u,.4,.8)]*price_lock[1,2] +
b5.d[(u,.6,.9)|(u,.3,.6)]*cashback[1,2,3] +
b6.d[(u,-.2,.2)]*format[1,2] +
b7.d[(u,0,.2)]*channel[1,2]
$
As far as I can tell, the ;cond statment does exactly the same thing as the ;reject statement. But this time it worked. Now the prohibited pairs are not included in the design.
My question is, what is wrong with the syntax of the ;reject statement? Why didn't that one work?
Thanks much.
Paul
I'm designing a fairly simple experiment. I wanted to build in two constraints: prohibitions between a few attributes. In particular, I wanted to prevent offer level 3 from appearing with incentive level 1 and message level 3 from appearing with offer level 1. At first, I tried this syntax:
design
;alts = respond, not
;rows = 16
;eff=(mnl,d)
;bdraws=halton(400)
;reject:
respond.offer = 3 and respond.incentive = 1,
respond.message = 3 and respond.offer = 1
;model:
u(respond) =
b0[-6] + b1.d[(u,0.3,0.4)|(u,.2,.3)|(u,.1,.2)]*message[1,2,3,4] +
b2.d[(u,-.2,.2)|(u,-.2,.2)]*offer[1,2,3] +
b3.d[(u,.2,.3)|(u,.1,.2)]*incentive[1,2,3] +
b4.d[(u,.4,.8)]*price_lock[1,2] +
b5.d[(u,.6,.9)|(u,.3,.6)]*cashback[1,2,3] +
b6.d[(u,-.2,.2)]*format[1,2] +
b7.d[(u,0,.2)]*channel[1,2]
$
But the resulting design included pairs that I thought were prohibited. That is, there were a few rows with offer = 3 and incentive = 1 and a few with message = 3 and offer = 1.
Then I tried this:
design
;alts = respond, not
;rows = 16
;eff=(mnl,d)
;bdraws=halton(400)
;reject:
respond.offer = 3 and respond.incentive = 1,
respond.message = 3 and respond.offer = 1
;cond:
if(respond.offer = 3, respond.incentive=[2,3]),
if(respond.message = 3, respond.offer=[2,3])
;model:
u(respond) =
b0[-6] + b1.d[(u,0.3,0.4)|(u,.2,.3)|(u,.1,.2)]*message[1,2,3,4] +
b2.d[(u,-.2,.2)|(u,-.2,.2)]*offer[1,2,3] +
b3.d[(u,.2,.3)|(u,.1,.2)]*incentive[1,2,3] +
b4.d[(u,.4,.8)]*price_lock[1,2] +
b5.d[(u,.6,.9)|(u,.3,.6)]*cashback[1,2,3] +
b6.d[(u,-.2,.2)]*format[1,2] +
b7.d[(u,0,.2)]*channel[1,2]
$
As far as I can tell, the ;cond statment does exactly the same thing as the ;reject statement. But this time it worked. Now the prohibited pairs are not included in the design.
My question is, what is wrong with the syntax of the ;reject statement? Why didn't that one work?
Thanks much.
Paul