Too many conditions?

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Too many conditions?

Postby Liz » Sat Mar 23, 2019 7:03 pm

Hi,
Thank you for all of the help so far. I am about to start a final experiment, following two rounds of piloting to get priors. We have a topic with a lot of conditions, because we are trying to make the experiment as true-to-life as possible, but I am concerned that this may be too much, as the list of conditions is very long compared to other designs I have seen.

My questions are:

1) Does the number of conditions look ok for this design? (and as an extension to that, does the code look ok in general?)
2) A minor second question - I have switched from a labelled to an unlabelled design - in that case, do I just need one alternative specific constant (b1) for all rather than the three included below?

Many thanks!



Code: Select all
Design
;alts = alt1,alt2,alt3,alt4
;eff = (mnl,d,mean)
;bdraws = sobol(500)
;rows = 24
;block = 2
;cond:
if(alt1.att1=0, alt1.att3=[0,1]),
if(alt2.att1=0, alt2.att3=[0,1]),
if(alt3.att1=0, alt3.att3=[0,1]),
if(alt1.att1=1, alt1.att3=[1,2,3,4,5]),
if(alt2.att1=1, alt2.att3=[1,2,3,4,5]),
if(alt3.att1=1, alt3.att3=[1,2,3,4,5]),
if(alt1.att1=2, alt1.att3=[3,4]),
if(alt2.att1=2, alt2.att3=[3,4]),
if(alt3.att1=2, alt3.att3=[3,4]),
if(alt1.att1=0 AND alt1.att3=0, alt1.price=[1000,2500,5000]),
if(alt2.att1=0 AND alt2.att3=0, alt2.price=[1000,2500,5000]),
if(alt3.att1=0 AND alt3.att3=0, alt3.price=[1000,2500,5000]),
if(alt1.att1=0 AND alt1.att3=1, alt1.price=[1000,2500]),
if(alt2.att1=0 AND alt2.att3=1, alt2.price=[1000,2500]),
if(alt3.att1=0 AND alt3.att3=1, alt3.price=[1000,2500]),
if(alt1.att1=2, alt1.price=[250,500]),
if(alt2.att1=2, alt2.price=[250,500]),
if(alt3.att1=2, alt3.price=[250,500]),
if(alt1.att1=1 AND alt1.att3=1,alt1.price=[1000,2500]),
if(alt2.att1=1 AND alt2.att3=1,alt2.price=[1000,2500]),
if(alt3.att1=1 AND alt3.att3=1,alt3.price=[1000,2500]),
if(alt1.att1=1 AND alt1.att3=2,alt1.price=[500,1000]),
if(alt2.att1=1 AND alt2.att3=2,alt2.price=[500,1000]),
if(alt3.att1=1 AND alt3.att3=2,alt3.price=[500,1000]),
if(alt1.att1=1 AND alt1.att3=5,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=5,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=5,alt3.price=[25,250,500]),
if(alt1.att1=1 AND alt1.att3=3,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=3,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=3,alt3.price=[25,250,500]),
if(alt1.att1=1 AND alt1.att3=4,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=4,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=4,alt3.price=[25,250,500]),
if(alt1.att1=0, alt1.att2=[0,1,2,3]),
if(alt2.att1=0, alt2.att2=[0,1,2,3]),
if(alt3.att1=0, alt3.att2=[0,1,2,3]),
if(alt1.att1=1, alt1.att2=[0,1,2,3,4,5]),
if(alt2.att1=1, alt2.att2=[0,1,2,3,4,5]),
if(alt3.att1=1, alt3.att2=[0,1,2,3,4,5]),
if(alt1.att1=2, alt1.att2=[0,1,2,3,4]),
if(alt2.att1=2, alt2.att2=[0,1,2,3,4]),
if(alt3.att1=2, alt3.att2=[0,1,2,3,4])
;model:

U(alt1) = b1[-2.542] + att1.dummy[0.182|0.527]*att1[0,1,2] + place.dummy[1.386|-0.337|0.137|0.294|1.037]* place[0,1,2,3,4,5] + form.dummy[-0.924|-1.175|-0.612|0.094|0.66]* form[0,1,2,3,4,5] + price[-0.0001]*price[25,250,500,1000,2500,5000] + scenario.dummy[0.362|0.65]*scenario[0,1,2]/
U(alt2) = b2[-2.542] + att1* att1 + place* place + form* form + price*price + scenario*scenario[scenario]/
U(alt3) = b3[-2.542] + att1* att1 + place* place + form* form + price*price + scenario*scenario[scenario]/
U(alt4) = 0
$
Liz
 
Posts: 5
Joined: Tue Mar 20, 2018 5:21 pm

Re: Too many conditions?

Postby Michiel Bliemer » Sun Mar 24, 2019 8:42 am

1) They are indeed a lot of conditions, but if Ngene finds a design then it works fine. I fixed some issues with your syntax (renamed attribute place to att2 and form to att3), removed "mean" from the ;eff command and removed ;bdraws since you are not using Bayesian priors.

2) Correct. It is easier if you put the constant in the no-choice alternative. I have changed it in the syntax below.

Code: Select all
Design
;alts = alt1,alt2,alt3,alt4
;eff = (mnl,d)
;rows = 24
;block = 2
;cond:
if(alt1.att1=0, alt1.att3=[0,1]),
if(alt2.att1=0, alt2.att3=[0,1]),
if(alt3.att1=0, alt3.att3=[0,1]),
if(alt1.att1=1, alt1.att3=[1,2,3,4,5]),
if(alt2.att1=1, alt2.att3=[1,2,3,4,5]),
if(alt3.att1=1, alt3.att3=[1,2,3,4,5]),
if(alt1.att1=2, alt1.att3=[3,4]),
if(alt2.att1=2, alt2.att3=[3,4]),
if(alt3.att1=2, alt3.att3=[3,4]),
if(alt1.att1=0 AND alt1.att3=0, alt1.price=[1000,2500,5000]),
if(alt2.att1=0 AND alt2.att3=0, alt2.price=[1000,2500,5000]),
if(alt3.att1=0 AND alt3.att3=0, alt3.price=[1000,2500,5000]),
if(alt1.att1=0 AND alt1.att3=1, alt1.price=[1000,2500]),
if(alt2.att1=0 AND alt2.att3=1, alt2.price=[1000,2500]),
if(alt3.att1=0 AND alt3.att3=1, alt3.price=[1000,2500]),
if(alt1.att1=2, alt1.price=[250,500]),
if(alt2.att1=2, alt2.price=[250,500]),
if(alt3.att1=2, alt3.price=[250,500]),
if(alt1.att1=1 AND alt1.att3=1,alt1.price=[1000,2500]),
if(alt2.att1=1 AND alt2.att3=1,alt2.price=[1000,2500]),
if(alt3.att1=1 AND alt3.att3=1,alt3.price=[1000,2500]),
if(alt1.att1=1 AND alt1.att3=2,alt1.price=[500,1000]),
if(alt2.att1=1 AND alt2.att3=2,alt2.price=[500,1000]),
if(alt3.att1=1 AND alt3.att3=2,alt3.price=[500,1000]),
if(alt1.att1=1 AND alt1.att3=5,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=5,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=5,alt3.price=[25,250,500]),
if(alt1.att1=1 AND alt1.att3=3,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=3,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=3,alt3.price=[25,250,500]),
if(alt1.att1=1 AND alt1.att3=4,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=4,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=4,alt3.price=[25,250,500]),
if(alt1.att1=0, alt1.att2=[0,1,2,3]),
if(alt2.att1=0, alt2.att2=[0,1,2,3]),
if(alt3.att1=0, alt3.att2=[0,1,2,3]),
if(alt1.att1=1, alt1.att2=[0,1,2,3,4,5]),
if(alt2.att1=1, alt2.att2=[0,1,2,3,4,5]),
if(alt3.att1=1, alt3.att2=[0,1,2,3,4,5]),
if(alt1.att1=2, alt1.att2=[0,1,2,3,4]),
if(alt2.att1=2, alt2.att2=[0,1,2,3,4]),
if(alt3.att1=2, alt3.att2=[0,1,2,3,4])
;model:

U(alt1) = att1.dummy[0.182|0.527]*att1[0,1,2] + place.dummy[1.386|-0.337|0.137|0.294|1.037]* att2[0,1,2,3,4,5] + form.dummy[-0.924|-1.175|-0.612|0.094|0.66]* att3[0,1,2,3,4,5] + price[-0.0001]*price[25,250,500,1000,2500,5000] + scenario.dummy[0.362|0.65]*scenario[0,1,2]/
U(alt2) = att1* att1 + place* att2 + form* att3 + price*price + scenario*scenario[scenario]/
U(alt3) = att1* att1 + place* att2 + form* att3 + price*price + scenario*scenario[scenario]/
U(alt4) = asc[2.542]
$
Michiel Bliemer
 
Posts: 1705
Joined: Tue Mar 31, 2009 4:13 pm

Re: Too many conditions?

Postby Liz » Mon Mar 25, 2019 7:31 pm

Thank you so much. Your comment made me realise that I had posted the code from before I put in the Bayesian priors. It should be an efficient design here. See below for the updated code with your edits incorporated. One other minor question - the price attribute has large gaps between levels so I analysed it as an ordinal dummy-coded variable. Whilst there was a broadly linear trend no levels were significant. Dummy-coding the price attribute in the final design seems strange, so I have gone with just a small negative value here instead of the priors - is this the right approach for the coding?

Code: Select all
Design
;alts = alt1,alt2,alt3,alt4
;eff = (mnl,d,median)
;bdraws = sobol(500)
;rows = 24
;block = 2
;cond: 
if(alt1.att1=0, alt1.att3=[0,1]), 
if(alt2.att1=0, alt2.att3=[0,1]), 
if(alt3.att1=0, alt3.att3=[0,1]), 
if(alt1.att1=1, alt1.att3=[1,2,3,4,5]), 
if(alt2.att1=1, alt2.att3=[1,2,3,4,5]), 
if(alt3.att1=1, alt3.att3=[1,2,3,4,5]), 
if(alt1.att1=2, alt1.att3=[3,4]),
if(alt2.att1=2, alt2.att3=[3,4]),
if(alt3.att1=2, alt3.att3=[3,4]),
if(alt1.att1=0 AND alt1.att3=0, alt1.price=[1000,2500,5000]), 
if(alt2.att1=0 AND alt2.att3=0, alt2.price=[1000,2500,5000]), 
if(alt3.att1=0 AND alt3.att3=0, alt3.price=[1000,2500,5000]), 
if(alt1.att1=0 AND alt1.att3=1, alt1.price=[1000,2500]), 
if(alt2.att1=0 AND alt2.att3=1, alt2.price=[1000,2500]), 
if(alt3.att1=0 AND alt3.att3=1, alt3.price=[1000,2500]), 
if(alt1.att1=2, alt1.price=[250,500]), 
if(alt2.att1=2, alt2.price=[250,500]), 
if(alt3.att1=2, alt3.price=[250,500]), 
if(alt1.att1=1 AND alt1.att3=1,alt1.price=[1000,2500]), 
if(alt2.att1=1 AND alt2.att3=1,alt2.price=[1000,2500]), 
if(alt3.att1=1 AND alt3.att3=1,alt3.price=[1000,2500]), 
if(alt1.att1=1 AND alt1.att3=2,alt1.price=[500,1000]), 
if(alt2.att1=1 AND alt2.att3=2,alt2.price=[500,1000]), 
if(alt3.att1=1 AND alt3.att3=2,alt3.price=[500,1000]), 
if(alt1.att1=1 AND alt1.att3=5,alt1.price=[25,250,500]), 
if(alt2.att1=1 AND alt2.att3=5,alt2.price=[25,250,500]), 
if(alt3.att1=1 AND alt3.att3=5,alt3.price=[25,250,500]), 
if(alt1.att1=1 AND alt1.att3=3,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=3,alt2.price=[25,250,500]), 
if(alt3.att1=1 AND alt3.att3=3,alt3.price=[25,250,500]), 
if(alt1.att1=1 AND alt1.att3=4,alt1.price=[25,250,500]),
if(alt2.att1=1 AND alt2.att3=4,alt2.price=[25,250,500]),
if(alt3.att1=1 AND alt3.att3=4,alt3.price=[25,250,500]),
if(alt1.att1=0, alt1.att2=[0,1,2,3]),
if(alt2.att1=0, alt2.att2=[0,1,2,3]),
if(alt3.att1=0, alt3.att2=[0,1,2,3]),
if(alt1.att1=1, alt1.att2=[0,1,2,3,4,5]),
if(alt2.att1=1, alt2.att2=[0,1,2,3,4,5]),
if(alt3.att1=1, alt3.att2=[0,1,2,3,4,5]),
if(alt1.att1=2, alt1.att2=[0,1,2,3,4]),
if(alt2.att1=2, alt2.att2=[0,1,2,3,4]),
if(alt3.att1=2, alt3.att2=[0,1,2,3,4])
;model:

U(alt1) = att1.dummy[(n,0.182,0.39)|(n,0.527,0.204)]*att1[0,1,2] + att2.dummy[(n,1.386,0.244)|(n,-0.337,0.247)|(n,0.1370.219)|(n,0.294,0.226)|(n,1.037,0.222)]* att2[0,1,2,3,4,5] +att3.dummy[n,-0.924,0.564)|(n,-1.175,0.477)|(n,-0.612,0.306)|(n,0.094,0.22)|(n,0.66,0.216)]* att3[0,1,2,3,4,5] + price[-0.0001]*price[25,250,500,1000,2500,5000] + scenario.dummy[(n,0.362,0.139)|(n,0.65,0156)]*scenario[0,1,2]/
U(alt2) = att1* att1 + att2* att2 + att3* att3 + price*price + scenario*scenario[scenario]/ 
U(alt3) = att1* att1 + att2* att2 + att3* att3 + price*price + scenario*scenario[scenario]/
U(alt4) = asc[(n,-2.542,0.568]
$
Liz
 
Posts: 5
Joined: Tue Mar 20, 2018 5:21 pm

Re: Too many conditions?

Postby Michiel Bliemer » Tue Mar 26, 2019 8:19 am

You can use discrete coding schemes like dummy coding any variable, but for continuous attributes like price I would not use it myself. Using dummy coding also makes determining willingness-to-pay measures much more difficult and you can also not use it for forecasting with price levels that were not represented in the survey.

Note that in model estimation you do not necessarily have to use beta*price, but you can also use beta*sqrt(price) or beta*price^2 or something like that. Some people prefer to include price as sqrt(price). Ngene does not recognise a sqrt but if you think you would estimate this model then you simply replace [25,250,500,1000,2500,5000] with [5,15.8,22.4,31.6,50,70.7] noting that you show 25, 250 etc to respondents in the survey but in the model you use sqrt(price). Maybe you can try getting an appropriate beta prior for sqrt(price).

Michiel
Michiel Bliemer
 
Posts: 1705
Joined: Tue Mar 31, 2009 4:13 pm


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 12 guests

cron