Efficient design questions

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Efficient design questions

Postby Fatoumata » Wed Aug 08, 2018 7:00 pm

Dear all,

I am a new user of Ngene. I’ve read the manual and a lot of posts in the forum. However, I still have some interrogation about my experiment. It would be great to have your recommendations!

I’m actually creating an efficient design for a pilot study.

1) I just have the sign of the priors. If I’ve understand well I can choose prior very near to 0, such that prior*levels of the attributes are between 1 and 2. Is it okay if for my pilot study I privilege this method without trying to weight the attribute depending on their impact on the utility?

2) I don’t have exactly equidistant levels. Do I have to take it into account in the determination of the priors?

3) I want to include a no-opt option, a kind of hypothetical status-quo. I present a context to the respondents that they have to imagine. For example, the context is “The environment of your building is very noisy”. In the attributes I propose a measure to improve the phonic environment with levels: 1 (weak protection against noise), 2 (intermediate protection against noise) ,3 (high protection against noise). Should I include in the status quo option the level of this attribute, as a kind of reference level (ex : level 1 of protection of the building against noise) ? Or the inclusion of the ASC alone is sufficient?

4) My monetary attribute has a large range [5000-27000] and I’m afraid that some respondents pay to much attention on it. So, is it better to add constraint such that the extremes don’t appear in the same choice sets or to maintain fix the monetary attributes in each choice sets ?

5) Could you please take a look to my code? Just to check if the other things are fine, please?
(This code include the fact that some extreme don’t appear in the same choice sets i.e. 27 000 and 20 000 versus 5 000)

Design
;alts (M1) = OptionA*, OptionB*, neither
;alts (M2) = OptionA*, OptionB*

; eff = 2*M1(mnl,d)+ M2(mnl,d)
; rows = 54
; block = 6

; cond :
if(OptionA.der=[40,20], OptionA.eva=0),
if(OptionB.der=[40,20], OptionB.eva=0),
if(OptionB.eva=[40,20], OptionB.der=1),
if(OptionA.eva=[40,20], OptionA.der=1),
if(OptionA.P=[27000,20000], OptionB.P=[27000,20000,15000,10000]),
if(OptionB.P=[27000,20000], OptionA.P=[27000,20000,15000,10000])



; model (M1):
U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000] /
U(OptionB)= b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P/
U(neither) = ASC



;model (M2) :
U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000] /
U(OptionB)= b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P$

Thank you a lot !
Fatoumata
 
Posts: 6
Joined: Wed Jul 25, 2018 11:54 pm

Re: Efficient design questions

Postby johnr » Thu Aug 09, 2018 8:16 am

Hi Fatoumata

1. You can do this, or you can use a uninformed Bayesian prior – that is a use a uniform distribution such as [(U,0,1)].

2. This may affect the average marginal utility of the attributes. If you don’t want to weight the impact of the attributes differently, then yes, you may need to select different priors so the average of beta*X are the same for all attributes. For example the average of 40,20 and 1 is 20.333 where -0.01*20.333 = 0.20333, whilst the average of 60, 30 and 20 is 36.667 such that -0.01*36.667 = 0.3667. This implies that the average contribution to utility is higher for RF than for DER for example. You can find betas that balance this average if you want to imply that the average contribution is the same for both.

3. It depends on how you want to analyse the data. The utility functions for your design should reflect your best guess as to the utility functions of your final model. Usually the ASC only is used if there are no levels for the SQ alternative, although this need not be the case. If there are levels for the attributes of the SQ alternative, then it is common to have a generic parameter across the SQ and SP alternatives. The issue you will get however is that you are using effects coding. Please see previous posts regarding dummy/effects coding and SQ alternatives. One way to do this would be to have something like

U(neither) = b1*DER1[1] + b2*EVA1[0] + b3*RF1[20] + b6*PS1[0] + b7*P1[0]

However again, please read some of the recent posts as there is not a good idea!

4. What you are saying is that beta_cost*cost > sum_k beta_k*attribute_k. In theory, what you therefore want is for high cost values to appear with the more favourable levels of the non-cost attributes (and vice-versa). Ideally, this would happen if you choose the priors correctly, however the constraint that is most likely to prevent this from happening is attribute level balance. As the design has to allow each level to appear an equal number of times, it probably isn’t possible to get the level combinations you want over all choice sets. The easiest way to handle this is therefore to let go of attribute level balance (you have done this anyway as you have 54 rows in your design and 5 price levels which means each level cannot appear an equal number of times over the rows). There is command to allow for this which might look as follows.

b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20)

This would mean that 27000 would appear between 5 and 12 times, 20000 between 8 and 15, and the rest between 10 and 20 times.

Your code is fine, however try something like this with the balance issue:

Code: Select all
Design
;alts (M1) = OptionA*, OptionB*, neither
;alts (M2) = OptionA*, OptionB*

; eff = 2*M1(mnl,d)+ M2(mnl,d)
; rows = 54
; block = 6

; cond :
if(OptionA.der=[40,20], OptionA.eva=0),
if(OptionB.der=[40,20], OptionB.eva=0),
if(OptionB.eva=[40,20], OptionB.der=1),
if(OptionA.eva=[40,20], OptionA.der=1),
if(OptionA.P=[27000,20000], OptionB.P=[27000,20000,15000,10000]),
if(OptionB.P=[27000,20000], OptionA.P=[27000,20000,15000,10000])

; model (M1):
U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20) /
U(OptionB)= b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P /
U(neither) = ASC

;model (M2) :
U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20)  /
U(OptionB)= b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P $
johnr
 
Posts: 157
Joined: Fri Mar 13, 2009 7:15 am

Re: Efficient design questions

Postby Fatoumata » Fri Aug 17, 2018 7:04 pm

Hi John,

Thank you for your reply !

I've tried to follow all of your advices and got a new code. Could you tell me if it seems to be correct, please ? Especially the method used to set the levels of the status quo ?

Thank you a lot !!!


Code: Select all
Design
;alts (M1) = OptionA*, OptionB*, sq
;alts (M2) = OptionA*, OptionB*

; eff = 2*M1(mnl,d)+ M2(mnl,d)   


; rows = 54

; cond :
if(OptionA.der=[40,20], OptionA.eva=0),
if(OptionB.der=[40,20], OptionB.eva=0),
if(OptionB.eva=[40,20], OptionB.der=1),
if(OptionA.eva=[40,20], OptionA.der=1)


; model (M1) :
U(OptionA) = b1[-0.0125]*DER[40,20,1] + b2[-0.013]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.17|0.13]*IP[3,2,1] + b5.effects[0.15|0.10]*CT[3,2,1] + b6[-0.09]*PS[4,3,0] + b7[-0.00002]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20) /
U(OptionB)=  b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P /
U(sq)=  b1*DERsq[0] + b2*EVAsq[0] + b3*RFsq[0] + b4*IPsq[1.001,1.002,1.003]+ b5*CTsq[1.001,1.002,1.003]+ + b6*PSsq[0] + b7*Psq[0] 


;model (M2) :
U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20) /
U(OptionB)=  b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P $





Fatoumata
 
Posts: 6
Joined: Wed Jul 25, 2018 11:54 pm

Re: Efficient design questions

Postby Michiel Bliemer » Sun Aug 19, 2018 12:10 pm

Am I correct to assume that you would like to set IP and CT to level 1 in the status quo alternative? If so, then your syntax is not appropriate. You will need to use the require command to set the level of the effects coded variables to a specific level as I have done below. Since require does not work with the default swapping algorithm and also does not work with ;cond, I have reformulated your constraints into ;reject and changed the algorithm to ;alg = mfederov with 2000 candidates (which I think is enough). Note that the mfederov algorithm lets go of attribute level balance.

Code: Select all
Design
    ;alts(M1) = OptionA*, OptionB*, sq
    ;alts(M2) = OptionA*, OptionB*
    ;eff = 2*M1(mnl,d)+ M2(mnl,d)   
    ;rows = 54
    ;alg = mfederov(candidates = 1000)

    ;reject:
    OptionA.der=40 and OptionA.eva=20,
    OptionA.der=40 and OptionA.eva=40,
    OptionA.eva=20 and OptionA.der=20,
    OptionA.eva=40 and OptionA.der=40
    ? You can also include OptionA.P=5000 and OptionB.P=27000 etc if you like

    ;require:
    sq.IP=1,
    sq.CT=1

    ;model(M1):
    U(OptionA) = b1[-0.0125]*DER[40,20,1]( + b2[-0.013]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.17|0.13]*IP[3,2,1] + b5.effects[0.15|0.10]*CT[3,2,1] + b6[-0.09]*PS[4,3,0] + b7[-0.00002]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20) /
    U(OptionB)=  b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P /
    U(sq)=  b0[0] + b1*DERsq[0] + b2*EVAsq[0] + b3*RFsq[0] + b4*IP + b5*CT + b6*PSsq[0] + b7*Psq[0]


    ;model(M2):
    U(OptionA) = b1[-0.01]*DER[40,20,1] + b2[-0.01]*EVA[40,20,0] + b3[-0.01]*RF [60,30,20] + b4.effects[0.2|0.1]*IP[3,2,1] + b5.effects[0.2|0.1]*CT[3,2,1] + b6[-0.1]*PS[4,3,0] + b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20) /
    U(OptionB)=  b1*DER + b2*EVA + b3*RF + b4*IP+ b5*CT+ b6*PS + b7*P $


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

Re: Efficient design questions

Postby Fatoumata » Tue Apr 28, 2020 2:26 am

Hello,

And thank you for your answer.

I've applied your code and have begin the econometrics analysis for the priors estimations.

However I have some problems :
- Multicollinearity : I can't integrate all of the attributes because I got a singularity message error, it disappear when I exclude one of the attribute (that is constraint in the Ngene Code) and the ASC (constant).

If I understand well, according to the utility function of the status quo alternative (that is not null), I have to include a constant specific to this alternative plus the levels corresponding to the specific attributes (but as opposed to the Ngene code I have to keep the same name of attributes during the analysis).


- No significance : I have several attributes that are not significant including the monetary attributes. I have read in one post that I can however use the value of the coefficient to specify the prior.


Could you help me please ? Especially regarding the design of the final design code, how could I avoid all these limitations please ?

Thank you a lot !
Fatoumata
 
Posts: 6
Joined: Wed Jul 25, 2018 11:54 pm

Re: Efficient design questions

Postby Michiel Bliemer » Tue Apr 28, 2020 9:40 am

You should be able to estimate the exact same utility functions as used in the Ngene syntax. There is no multicollinearity issue if you use the exact same utility functions (unless you have changed the design or added other constraints). Note that the second model does NOT have a constant b0, you can only estimate a constant for the first model. If you pool all the data together and estimate a single model (which I assume that you do), then you can estimate a constant b0, but you need to carefully code your data such that you have a mix of two and three alternatives in each choice set, and that the constant does not appear in case you have two choice sets. How to do this depends on the estimation software.

It is common that not all parameters are statistically significant in a pilot study, you can still assume normally distributed Bayesian priors with a mean that is not equal to 0.

Code: Select all
Design
;alts(M1) = OptionA*, OptionB*, sq
;alts(M2) = OptionA*, OptionB*
;eff = 2*M1(mnl,d)+ M2(mnl,d)   
;rows = 54
;alg = mfederov(candidates = 1000)

;reject:
OptionA.der=40 and OptionA.eva=20,
OptionA.der=40 and OptionA.eva=40,
OptionA.eva=20 and OptionA.der=20,
OptionA.eva=40 and OptionA.der=40
? You can also include OptionA.P=5000 and OptionB.P=27000 etc if you like

;require:
sq.IP=1,
sq.CT=1

;model(M1):
U(OptionA) = b1[-0.0125]*DER[40,20,1]
           + b2[-0.013]*EVA[40,20,0]
           + b3[-0.01]*RF [60,30,20]
           + b4.effects[0.17|0.13]*IP[3,2,1]
           + b5.effects[0.15|0.10]*CT[3,2,1]
           + b6[-0.09]*PS[4,3,0]
           + b7[-0.00002]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20)
           /
U(OptionB) = b1*DER
           + b2*EVA
           + b3*RF
           + b4*IP
           + b5*CT
           + b6*PS
           + b7*P
           /
U(sq)      = b0[0]
           + b1*DERsq[0]
           + b2*EVAsq[0]
           + b3*RFsq[0]
           + b4*IP
           + b5*CT
           + b6*PSsq[0]
           + b7*Psq[0]

;model(M2):
U(OptionA) = b1[-0.01]*DER[40,20,1]
           + b2[-0.01]*EVA[40,20,0]
           + b3[-0.01]*RF [60,30,20]
           + b4.effects[0.2|0.1]*IP[3,2,1]
           + b5.effects[0.2|0.1]*CT[3,2,1]
           + b6[-0.1]*PS[4,3,0]
           + b7[-0.00001]*P[27000,20000,15000,10000,5000](5-12,8-15,10-20,10-20,10-20)
           /
U(OptionB) = b1*DER
           + b2*EVA
           + b3*RF
           + b4*IP
           + b5*CT
           + b6*PS
           + b7*P
$
Michiel Bliemer
 
Posts: 900
Joined: Tue Mar 31, 2009 4:13 pm


Return to Ngene

Who is online

Users browsing this forum: No registered users and 9 guests

cron